保护模式下的 64 位寄存器 x86



我想知道在保持 64 位保护模式时是否可以在 64 位处理器上使用 32 位寄存器。我无法自己测试,因为我的虚拟机不支持 64 位长模式。我在互联网上的任何地方都找不到这个。我认为这可能是可能的,因为 32 位寄存器可以在 16 位实模式下使用。

不,你不能。

64 位

寄存器仅在 64 位模式下提供全宽。我找不到明确的引用提到它们不可能从 32 位模式使用的事实,但这应该足够了(基本架构,第 3.4.1.1 节(:

因为 64 位通用寄存器的上 32 位是 在 32 位模式下未定义,任何通用的上部 32 位 从 64 位模式切换到 32 位模式时不保留寄存器 模式(到保护模式或兼容模式(。软件不得 依靠这些位在 64 位到 32 位模式后保持值 开关。

32位寄存器可以从16位模式内访问,这要归功于操作数大小覆盖前缀(0x66(。基本上,它告诉CPU使用32位寄存器而不是16位寄存器,这是16位模式下的默认设置。前缀也可以在 32 位模式下使用,但工作方式相反:它指示 CPU 使用 16 位寄存器而不是默认的 32 位寄存器。