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

64 bit registers in Protected Mode x86

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

不,你不能。

64 位寄存器仅在 64 位模式下以全宽形式提供。我找不到明确的引述,提到无法在 32 位模式下使用它们,但这应该足够了 (Basic Architecture, section 3.4.1.1) :

Because the upper 32 bits of 64-bit general-purpose registers are undefined in 32-bit modes, the upper 32 bits of any general-purpose register are not preserved when switching from 64-bit mode to a 32-bit mode (to protected mode or compatibility mode). Software must not depend on these bits to maintain a value after a 64-bit to 32-bit mode switch.

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