LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 605|回复: 0

关于 汇编的没有明白的问题

[复制链接]
发表于 2004-4-25 20:03:02 | 显示全部楼层 |阅读模式
选 MASM 汇编的 .586 和 .586p 指令系统到底有什么区别?

关于选 .586 (586 指令系统) 和 .586p (586 保护模式指令系统), 微机原理课中没有说太多,我只能自己猜测。
DOS 中应该是实模式,16 位的操作系统,586 CPU 退回到 8086 状态,相当于一个速度更快的 16 位机。(但是多了一些 32 位寄存器可以用,是不是这样?)
Win98 的模拟 DOS 环境是用 32 位的代码模拟运行 16 位机的程序 (但是 Win98 的命令提示符窗口可以运行 16 位的 MZ 格式的 DOS 程序,也可以运行 PE 格式的 32 位程序比如 ping.exe,java.exe,还有 Visual C++ 的编译器 cl.exe,这很有意思),这样在运行 16 位程序的时候,CPU 仍然运行于 586 保护模式状态。
那么指定 .586 和 .586p 到底有什么意义呢?我见到 MASM 汇编程序不指定 .586 和 .586p 也可以的。
是不是指定了 .586 “保护模式”指令系统的汇编程序不能运行于纯 DOS 环境呢?我想验证一下,但是我发现无法进入纯 DOS 环境了。因为现在已经找不到 Win98 了,WinME 已经不能进行纯 DOS 模式了。

还有,指定了 586 保护模式指令系统的汇编程序能不能算作是 32 位程序呢?
它应该还是 MZ 格式的 DOS 程序,但是它可以用 32 位寄存器,又指定保护模式,用 32 位保护模式状态运行 586 CPU ,这样还不能算作是 32 位应用程序的话,那么 32 位应用程序的严格定义是什么呢?

用 Visual C++ 开发的 Console 程序也是 32 位的 PE 格式的程序,虽然不是 Windows 程序,它显然不能在 DOS 这个 16 位 操作系统下运行,我想确认一下,但是找不到纯 DOS 环境。

还有另外一个疑问,Win98 自带的命令行程序 Ping.exe 是 PE 格式的程序,这用 VC++ 自带的 dumpbin 程序可以查看,应该是 32 位的吧?在纯 DOS 环境下能不能用 Ping 命令呢?我没有试过,但应该是可以的,但 DOS 不过是一个 16 位的操作系统而已,能运行 32 位的 PE 格式的程序?这让搞不明白了。难道运行的是放在系统另一个位置的 MZ 格式的 ping 程序?

谢谢大家指教,关于 DOS 下的汇编和 Linux 下的汇编,我想应该是大同小异的,虽然我没有在 Linux 下汇编过,关于 UNIX 平台下的汇编的资料太少了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表