luqingfei@C++

为中华之崛起而崛起!
兼听则明,偏听则暗。

[转]WindowsXP下运行命令中cmd和command的区别

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是两个独立的东东。
我目前还很菜,只能粗俗的解释一下。就到这里,我继续去看王爽大叔的《汇编语言》。真好看!

posted on 2010-07-16 10:12 luqingfei 阅读(1048) 评论(0)  编辑 收藏 引用 所属分类: 计算机基础知识


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

留言簿(6)

随笔分类(109)

随笔档案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜