我有一些关于地址转换如何在大实模式中发生的问题,正如http://wiki.osdev.org/Unreal_Mode所说
虚幻模式包括打破实模式段的'64Kb'限制,但仍然通过调整描述符缓存来保持16位指令和段* 16 +偏移地址的形成
但我的问题是如何在过程中使用gdt,甚至在转换为线性地址时使用gdt。如果任何人都可以指向一些规范或其他参考来切换到大实模式,那将非常有用,如果有人能够提供关于如何切换回实模式的一些见解,那将是非常好的。
此致
阿尔卡
答案 0 :(得分:1)
是的,我非常确定使用GDT,因为您需要先创建它。 Wikipedia说:
要将80386或更高版本的微处理器置于虚幻模式,程序必须首先进入保护模式,在GDT或LDT中查找或创建平面描述符,使用相应的保护模式加载某些数据段寄存器"选择器",然后切换回实模式。在返回实模式后,处理器将继续使用在保护模式下建立的缓存描述符,从而允许访问4 GiB的"扩展"来自实模式的记忆。
从80386开始,实模式程序可以将32位寄存器与操作数大小覆盖前缀一起使用。这允许程序使用类似DS的地址:[EAX]。在正常实模式下,如果EAX超过0xFFFF,则会发生故障。在虚幻模式下,允许访问。
作为旁注,您提供的link应足以让您进入虚幻模式。从技术上讲,你不能回去"进入实模式,因为虚幻模式和真实模式一起存在。可能他们之间唯一的主要区别是他们解决记忆的能力。如果你想"回去"在真实模式下,只需像在正常模式下一样对内存进行寻址。
基本上,你只需要记住这一点来区分:
在正常实模式下,如果EAX超过0xFFFF,则会发生故障。在虚幻模式下,允许访问。
我希望这有帮助!