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

时间:2016-02-07 11:08:45

标签: assembly cpu-registers bare-metal protected-mode

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

1 个答案:

答案 0 :(得分:5)

不,你不能。

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

  

因为64位通用寄存器的高32位是   在32位模式下未定义,任何通用的高32位   从64位模式切换到32位时,不保留寄存器   模式(保护模式或兼容模式)。软件一定不能   依赖于这些位来保持64位到32位模式之后的值   开关。

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