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是兩個獨立的東東。
我目前還很菜,只能粗俗的解釋一下。就到這里,我繼續去看王爽大叔的《匯編語言》。真好看!