cmd.exe和command.com
CMD.EXE是windows nt帶的一個(gè)32位的命令行程序,那完全不是DOS. 它是Windows 窗口命令行接口,因此它可以通過(guò)窗口右上角的X來(lái)關(guān)閉,它不是一個(gè)dos窗口,如果運(yùn)行cmd.exe則進(jìn)程可以看到cmd.exe。cmd是命令提示符(命令解釋器),32位支持長(zhǎng)文件名,中文 。cmd是進(jìn)入控制臺(tái)。
而COMMAND.COM是用ntvdm虛擬出來(lái)的一個(gè)16位的dos環(huán)境.同樣也是基于命令行的. 是一個(gè)16位的DOS應(yīng)用程序,它用于支持老的 dos應(yīng)用程序,它必須通過(guò)命令行輸入exit才可以退出,它一般運(yùn)行于NTVDM中。如果用戶運(yùn)行 command.com,用戶會(huì)在任務(wù)管理器中看到一個(gè)進(jìn)程ntvdm.exe在運(yùn)行。而且 command.exe還支持以前的16位的現(xiàn)在已經(jīng)不用的命令。command是WindowsXP中的16位DOS,不支持長(zhǎng)文件名,不支持中文。command是純DOS系統(tǒng),執(zhí)行它后會(huì)建立一個(gè)全新的環(huán)境模式,(比如path=的設(shè)置就會(huì)有改變) 是運(yùn)行在虛擬8086 模式的程序(可以看到進(jìn)程中有個(gè)NTVDM出來(lái)了,這就是NT DOS 虛擬機(jī)),運(yùn)行16位dos程序都會(huì)使用這個(gè)。16位程序都只支持8.3文件名(即文件名8個(gè)字符,擴(kuò)展名3個(gè)字符),因此文件系統(tǒng)會(huì)保留兩個(gè)文件名,一個(gè)長(zhǎng)文件名,一個(gè)短文件名以供16位程序用,事實(shí)上他們都指向同一個(gè)文件。command也不能顯示漢字,如果要顯示漢字,可以更改代碼頁(yè)為936(簡(jiǎn)體中文),英文是437,用graftabl命令。用法 graftabl xxx 但是只能對(duì)應(yīng)于圖形模式下,在全屏幕狀態(tài)是無(wú)效的。
但就用戶來(lái)說(shuō),這兩個(gè)命令有驚人的相似之處,他們同樣都是運(yùn)行環(huán)境,只是CMD更強(qiáng)大,雖然只能運(yùn)行在NT內(nèi)核的windows中,而command只是一個(gè)虛擬出來(lái)的dos運(yùn)行環(huán)境罷了,不過(guò)他也能運(yùn)行很多東東,總之都有用,尺有所短,寸有所長(zhǎng)。比較舊的系統(tǒng),如win95那些,就只有command而不存在cmd了。
另:debug程序可以用quit,或q命令退出。
另:用cmd和command分別調(diào)用debug,再用r命令查看各寄存器的值時(shí)發(fā)現(xiàn)段寄存器的初始值是不一樣的,比如在cmd下DS,ES,SS,CS為1382,在command下他們的值為14B1。而其他寄存器的值是一樣的。原因待查。
轉(zhuǎn)自[http://oojakioo.blog.163.com/blog/static/1239368132009725102254654/]
哈哈,由我這個(gè)小菜來(lái)解釋一下原因,CPU從何處執(zhí)行執(zhí)行指令,由代碼段寄存器CS和指令指針寄存器IP里里的內(nèi)容決定,它倆指向內(nèi)存單元的物理地址。
你看到不一樣,正說(shuō)明了cmd.exe和command.com是兩個(gè)獨(dú)立的東東。
我目前還很菜,只能粗俗的解釋一下。就到這里,我繼續(xù)去看王爽大叔的《匯編語(yǔ)言》。真好看!