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