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

vak*_*kus 0 assembly bare-metal protected-mode cpu-registers

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

Dan*_*zar 5

不,你不能.

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位寄存器.