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



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

但我试图弄清楚程序"知道"什么关于真实模式或保护模式? 在查看源代码/目标代码时,您怎么能说它是实模式程序

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

"

真实模式"程序使用BIOS子例程和操作系统子例程,而"保护模式"程序仅使用操作系统子例程。

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

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

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

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

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

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

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

最新更新