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

Kaw*_*iKx 6 operating-system real-mode protected-mode

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

但我想弄清楚程序对真实模式或保护模式的"了解"是什么?你怎么能在看源代码/目标代码时说它是真正的模式程序呢?

寻找答案,我能想到的是"实模式"程序使用BIOS子程序和OS子程序,而"保护模式"程序仅使用OS子程序.指令代码不同,因为寄存器的操作码是不同的,并且偏移地址的长度不同.是否还有其他功能可以区分真实和受保护的模式程序?

小智 7

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


Kaw*_*iKx 7

"实模式"程序使用BIOS子程序和OS子程序,而"保护模式"程序仅使用OS子程序.

指令代码不同,因为寄存器的操作码是不同的,并且偏移地址的长度不同.


She*_*fer 6

你怎么能在看源代码/目标代码时说它是真正的模式程序呢?

如果物理存储器和虚拟存储器之间存在直接映射(一对一),则程序在实模式下执行.更确切地说,由于虚拟存储器未在实模式下激活,因此程序以16位模式执行,其中源代码/目标代码"查看"的每个地址都是RAM上的实际物理地址.

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

要检测到这一点,您可以在源/目标代码执行时检查CPU中是否启用了分页标志.

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

  • 我怀疑实模式下的目标代码是否会包含实际的物理地址。它只包含向左移动 4 位后附加到 CS 值的偏移量。 (2认同)