- 締切済み
command.com上でのcmdの呼び出し
質問です。 WindowsのDOS窓は基本的にwin上で走るエミュレータだと聞いたのですが、16bitエミュレータのcommand.com上でcmd.exeが呼び出せるのは、どういう仕組みになっているのでしょうか。 ただ、16bitエミュレータ上で32bitのエミュレータを起動したと考えれば良いとは思うのですが、心なしかcommand.com単体のときよりもcommand.com上で呼び出したcmd.exeのほうが、キー入力のエコーバックも早い用に感じます。 ネットで調べてみると、呼び出すたびに切り替えているのではという意見もありましたが、XP上で開いたcommand.comからcmd.exeを呼び出した状態でNASMでアセンブルした16bitのcomファイルが実行できるので、ただ切り替えているだけではないのではないかと疑問が消えません。 また、スタートメニューでファイル名を指定して実行するときに、16bitのcomファイルを指定すると、基本的にはcmdが立ち上がって実行され、プロンプト以外画面には何も表示されないで実行終了となるのですが、2割ほどの確率でcommand.comが立ち上がり、きちんと実行されることがあり余計に混乱しています。 どなたか詳しい方がいらっしゃったら、ご解説を宜しく御願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10359)
DOS窓というのは、Windows95~Meの話で、XPにはありません。 >command.com上でcmd.exeが呼び出せるのは、 これは、コマンドプロンプトで command /c cmd としたと言うことでしょうか? タスクマネージャを見ているとわかりますが、このときcmd.exeは3つ起動されています。つまり、コマンドプロンプトで cmd /c cmd としたのと同じと思われます。 >XP上で開いたcommand.comからcmd.exeを呼び出した状態でNASMでアセンブルした16bitのcomファイルが実行できるので、 cmd.exeには16bitアプリを起動する機能があるので別に不思議ではないと思います。
補足
ご存知かとは思いますが、command.comはMS-DOSネイティブの標準コマンドシェルで、通常XP上ではntvdm.exe上で動きます。 ファイル名を指定して実行の場合も、cmd上でも、>commandで呼び出せ、タスクマネージャーでプロセスを確認すると、ntvdmが立ち上がることが確認できました。 ただこの挙動がどうも曲者で、ntvdmで動くcommand.com上でcmdが呼び出せるのです。タスクマネージャーで確認すると別のプロセスなので、基本的にはシングルタスクであるntvdm経由でcmdが呼び出されているのではないかと思います(エコーバックの反応を見ても別のプロセスだと思った方が納得できる)。 cmdを立ち上げてDOSプログラムを走らせても何も起こりませんが、cmdからcommandを呼べばntvdm上で動きます。ところが、ntvdmからexitしてもう一度cmd上でDOSプログラムを走らせるときちんとcmd上で動いてしまうわけです。 さらに、cmd上でDOSプログラム(.com)を走らせると2割くらいの確率でntvdmを呼び出して実行するのです。 色々調べてみましたが、もうわけが分からなくなっています。 >cmd.exeの16bitアプリを起動する機能 それはntvdmを起動する機能と言う意味でしょうか?ntvdmは単体で起動しても何もしないので、基本的にはcommandを呼ぶほうが一般的だと思うのですが。