请问在VC里编写出来的WIN32控制台程序运行的时候是按16位模式的还是32位的?

提问可能说的不太清楚。首先前提是我知道CPU分16位实模式,32位保护模式,和16位的虚拟86模式。开机进入window前汇编指令是按16位实模式执行的,window中是... 提问可能说的不太清楚。首先前提是我知道CPU分16位实模式,32位保护模式,和16位的虚拟86模式。开机进入window前汇编指令是按16位实模式执行的,window中是32位保护模式执行,cmd打开DOS窗口后,里面是按16位虚拟86模式执行的。我试过把一个用32位汇编(就是代码里有eax,ebx之类的)编译出来的EXE,放在cmd打开的DOS窗口中执行,跟踪它结果发现它把我每条32位的指令拆成16位的指令执行了(结果当然是跟代码原意不太相同了),那我就认为虚拟86模式是16位的了。但是我记得以前用VC编译出来的控制台程序,是32位的啊?反汇编好像是有eax这些东西的啊?那我就纳闷了,这种编译出来的类似DOS程序的控制台程序,放在虚拟86模式下,就是在DOS窗口下用DOS命令执行它,为什么又能得到正确的执行? 展开
 我来答
hr_999
2013-12-27 · TA获得超过2244个赞
知道大有可为答主
回答量:2009
采纳率:0%
帮助的人:1543万
展开全部
这个是因为EXE文件的特殊结构,32位的EXE文件(或者叫PE文件)相当于在16位EXE文件的基础上附加一个overlay用以容纳32位指令。因此32bit的EXE文件无论在纯DOS还是在WINDOWS下都是可执行的。只不过在纯DOS下的没有进入实际的程序逻辑,而只是用于显示一句“this program can not be run in dos mode”
更多追问追答
追问
你好,感谢你的回答。由于坑爹的百度追问居然还限制字数(最讨厌的是还不告诉你限多少),我把向你追问的内容写到上面的补充上了。
追答
我感觉这只是一个调试器的问题,debug本身是一个16bit应用程序,自然不可能正常解析32bit应用程序,用debug调试自然会吧程序强行带到16模式下去

另:感觉你对windows还不怎么了解。虚拟86是9x年代的东西了,在现在的系统中DOS是一个名叫NTVDM的虚拟机,你运行16bit应用程序的时候会自动调用。用CMD打开的并不是dos,而是纯32bit的控制台。
wuli咪咕虫
2013-12-27
知道答主
回答量:14
采纳率:0%
帮助的人:2.4万
展开全部
32 首先前提是我知道CPU分16位实模式,32位保护模式,和16位的虚拟86模式。开机进入window前汇编指令是按16位实模式执行的,window中是32位保护模式执行,cmd打开DOS窗口后,里面是按16位虚拟86模式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式