1

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

4

1 回答 1

6

不,你不能。

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

因为 64 位通用寄存器的高 32 位在 32 位模式下是未定义的,所以当从 64 位模式切换到 32 位模式时,任何通用寄存器的高 32 位都不会被保留(保护模式或兼容模式)。在 64 位到 32 位模式切换后,软件不得依赖这些位来维持一个值。

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

于 2016-02-07T11:20:08.837 回答