X86 大实数模式下的地址转换

X86 大实数模式下的地址转换,x86,real-mode,gdt,X86,Real Mode,Gdt,我有一些关于地址转换在大实数模式下是如何发生的问题,如前所述 非真实模式包括打破实模式段的“64Kb”限制,但仍然通过调整描述符缓存保持16位指令和段*16+偏移地址的形成 但我的问题是gdt在这个过程中是如何使用的,甚至在转换为线性地址时它是如何使用的。如果有人能指出一些规范或其他参考来切换到大实模式,这将是非常有帮助的,如果有人能提供一些关于如何切换回实模式的见解,这将是非常好的 问候, Arka是的,我非常确定使用了GDT,因为您需要先创建它。说: 要将80386或更高版本的微处理器置于非

我有一些关于地址转换在大实数模式下是如何发生的问题,如前所述

非真实模式包括打破实模式段的“64Kb”限制,但仍然通过调整描述符缓存保持16位指令和段*16+偏移地址的形成

但我的问题是gdt在这个过程中是如何使用的,甚至在转换为线性地址时它是如何使用的。如果有人能指出一些规范或其他参考来切换到大实模式,这将是非常有帮助的,如果有人能提供一些关于如何切换回实模式的见解,这将是非常好的

问候,


Arka

是的,我非常确定使用了GDT,因为您需要先创建它。说:

要将80386或更高版本的微处理器置于非真实模式,程序必须首先进入保护模式,在GDT或LDT中查找或创建平面描述符,用相应的保护模式“选择器”加载一些数据段寄存器,然后切换回真实模式。返回到实模式后,处理器将继续使用在保护模式下建立的缓存描述符,从而允许从实模式访问4 GiB的“扩展”内存

从80386开始,实模式程序可以使用带有操作数大小覆盖前缀的32位寄存器。这允许程序使用类似DS:[EAX]的地址。在正常实模式下,如果EAX超过0xFFFF,则会发生故障。在非真实模式下,允许访问

作为旁注,你提供的应该足够好,让你进入不真实的模式。从技术上讲,你不能“回到”真实模式,因为虚幻模式和真实模式是同时存在的。可能它们之间唯一的主要区别是它们处理内存的能力。如果您想“返回”到实模式,只需像通常在实模式中那样寻址内存

基本上,你只需要记住这一点就可以区别开来:

在正常实模式下,如果EAX超过0xFFFF,则会发生故障。在非真实模式下,允许访问

我希望这有帮助