cmd.exe和command.com
CMD.EXE是windows nt带的一个32位的命令行程序,那完全不是DOS. 它是Windows 窗口命令行接口,因此它可以通过窗口右上角的X来关闭,它不是一个dos窗口,如果运行cmd.exe则进程可以看到cmd.exe。cmd是命令提示符(命令解释器),32位支持长文件名,中文 。cmd是进入控制台。
而COMMAND.COM是用ntvdm虚拟出来的一个16位的dos环境.同样也是基于命令行的. 是一个16位的DOS应用程序,它用于支持老的 dos应用程序,它必须通过命令行输入exit才可以退出,它一般运行于NTVDM中。如果用户运行 command.com,用户会在任务管理器中看到一个进程ntvdm.exe在运行。而且 command.exe还支持以前的16位的现在已经不用的命令。command是WindowsXP中的16位DOS,不支持长文件名,不支持中文。command是纯DOS系统,执行它后会建立一个全新的环境模式,(比如path=的设置就会有改变) 是运行在虚拟8086 模式的程序(可以看到进程中有个NTVDM出来了,这就是NT DOS 虚拟机),运行16位dos程序都会使用这个。16位程序都只支持8.3文件名(即文件名8个字符,扩展名3个字符),因此文件系统会保留两个文件名,一个长文件名,一个短文件名以供16位程序用,事实上他们都指向同一个文件。command也不能显示汉字,如果要显示汉字,可以更改代码页为936(简体中文),英文是437,用graftabl命令。用法 graftabl xxx 但是只能对应于图形模式下,在全屏幕状态是无效的。
但就用户来说,这两个命令有惊人的相似之处,他们同样都是运行环境,只是CMD更强大,虽然只能运行在NT内核的windows中,而command只是一个虚拟出来的dos运行环境罢了,不过他也能运行很多东东,总之都有用,尺有所短,寸有所长。比较旧的系统,如win95那些,就只有command而不存在cmd了。
另:debug程序可以用quit,或q命令退出。
另:用cmd和command分别调用debug,再用r命令查看各寄存器的值时发现段寄存器的初始值是不一样的,比如在cmd下DS,ES,SS,CS为1382,在command下他们的值为14B1。而其他寄存器的值是一样的。原因待查。
转自[http://oojakioo.blog.163.com/blog/static/1239368132009725102254654/]
哈哈,由我这个小菜来解释一下原因,CPU从何处执行执行指令,由代码段寄存器CS和指令指针寄存器IP里里的内容决定,它俩指向内存单元的物理地址。
你看到不一样,正说明了cmd.exe和command.com是两个独立的东东。
我目前还很菜,只能粗俗的解释一下。就到这里,我继续去看王爽大叔的《汇编语言》。真好看!