Kaw*_*iKx 6 operating-system real-mode protected-mode
从操作系统和硬件的角度来看,我知道实模式和保护模式之间的区别.
但我想弄清楚程序对真实模式或保护模式的"了解"是什么?你怎么能在看源代码/目标代码时说它是真正的模式程序呢?
寻找答案,我能想到的是"实模式"程序使用BIOS子程序和OS子程序,而"保护模式"程序仅使用OS子程序.指令代码不同,因为寄存器的操作码是不同的,并且偏移地址的长度不同.是否还有其他功能可以区分真实和受保护的模式程序?
小智 7
主要区别在于cpu所处的模式.在保护模式下,操作系统可以使用分页和虚拟内存等功能.实模式代码也不是32位,而保护模式代码可以是16位或32位.每个x86 cpu都以实模式启动,操作系统必须切换到保护模式.
你怎么能在看源代码/目标代码时说它是真正的模式程序呢?
如果物理存储器和虚拟存储器之间存在直接映射(一对一),则程序在实模式下执行.更确切地说,由于虚拟存储器未在实模式下激活,因此程序以16位模式执行,其中源代码/目标代码"查看"的每个地址都是RAM上的实际物理地址.
另一方面,受保护模式启用了虚拟内存功能.因此,源代码/目标代码访问的地址与RAM中访问的实际内存位置之间的映射不同.
要检测到这一点,您可以在源/目标代码执行时检查CPU中是否启用了分页标志.
对于基于x86的CPU,可以检查CR0寄存器中的值.如果CR0寄存器为空,则程序以实模式运行.