【问题标题】:Address translation in big real mode大实模式下的地址翻译
【发布时间】:2015-07-24 10:19:57
【问题描述】:

正如http://wiki.osdev.org/Unreal_Mode 所说,我对在大实模式下如何进行地址转换有一些疑问

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

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

问候,

阿尔卡

【问题讨论】:

    标签: x86 real-mode gdt


    【解决方案1】:

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

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

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

    附带说明,您提供的link 应该足以让您进入虚幻模式。从技术上讲,您不能“返回”到实模式,因为虚模式和实模式同时存在。它们之间唯一的主要区别可能是它们寻址内存的能力。如果您想“返回”到实模式,只需像通常在实模式中那样寻址内存即可。

    基本上,您只需要记住这一点即可区分:

    在普通实模式下,如果 EAX 超过 0xFFFF,则会发生故障。在虚幻模式下,允许访问。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-30
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2010-12-29
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多