首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实模式程序和保护模式程序之间的真正区别是什么?

实模式程序和保护模式程序之间的真正区别是什么?
EN

Stack Overflow用户
提问于 2013-10-27 22:54:03
回答 3查看 21.8K关注 0票数 12

从操作系统和硬件的角度来看,我知道真实模式和保护模式之间的区别。

但是我想弄清楚一个程序对真实模式或保护模式“了解”些什么?在查看源代码/目标代码时,如何判断它是否是实模式程序?

在寻找答案时,我所能想到的就是“实模式”程序使用BIOS子例程和OS子例程,而“保护模式”程序只使用OS子例程。指令代码不同,因为寄存器的操作码不同,偏移地址的长度也不同。还有没有其他功能来区分真实模式和保护模式的程序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-28 17:16:49

“实模式”程序使用BIOS子例程和OS子例程,而“保护模式”程序只使用OS子例程。

指令代码不同,因为寄存器的操作码不同,偏移地址的长度也不同。

票数 12
EN

Stack Overflow用户

发布于 2013-10-28 18:06:30

在查看源代码/目标代码时,您如何判断它是否是实模式程序?

如果在物理内存和虚拟内存之间存在直接映射(一对一),则程序在实模式下执行。更准确地说,由于虚拟内存不是在实模式下激活的,所以程序以16位模式执行,其中源代码/目标代码“查看”的每个地址都是RAM上的实际物理地址。

另一方面,保护模式启用了虚拟内存功能。因此,源代码/目标代码所访问的地址之间的映射不同于RAM中所访问的实际存储器位置。

要检测这一点,您只需在执行源代码/目标代码时检查CPU中的分页标志是启用还是禁用。

对于基于x86的CPU,您可以在CR0寄存器中检查该值。如果CR0寄存器为空,则程序在实模式下运行。

票数 9
EN

Stack Overflow用户

发布于 2013-10-27 23:06:03

主要区别在于cpu所处的模式。在保护模式下,操作系统可以使用分页和虚拟内存等特性。另外,实模式代码永远不是32位的,而保护模式代码可以是16位或32位。每个x86处理器都以实模式启动,操作系统必须切换到保护模式。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19619425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档