64 位寄存器
AMD 是一家处理器制造商,已经从英特尔获得了 80386 的设计许可,以生产兼容但竞争的版本。他们对设计进行了内部更改,以提高设计的吞吐量或其他增强功能,同时仍然能够执行相同的程序。
对于单一的英特尔,他们提出了英特尔 32 位设计的 64 位扩展,并生产出第一个仍然可以运行 32 位 x86 代码的 64 位芯片。英特尔最终在他们的 64 位架构版本中采用了 AMD 的设计。
64 位设计对寄存器组进行了一些更改,同时仍然向后兼容:
-
现有的通用寄存器扩展为 64 位,并以
R
前缀命名:RAX
,RBX
,RCX
,RDX
,RSI
,RDI
,RBP
和RSP
。同样,这些寄存器的下半部分与之前的
E
前缀寄存器相同,并且无法独立访问上半部分。 -
增加了 8 个 64 位寄存器,并没有命名,只是编号:
R8
,R9
,R10
,R11
,R12
,R13
,R14
和R15
。- 这些寄存器的 32 位低半部分是
R8D
到R15D
(D 通常用于 DWORD)。 - 这些寄存器的最低 16 位可以通过将
W
后缀为寄存器名称来访问:R8W
到R15W
。
- 这些寄存器的 32 位低半部分是
-
现在可以访问所有 16 个寄存器的最低 8 位 :
- 传统的
AL
,BL
,CL
和DL
; - (传统)指针寄存器的低字节:
SIL
,DIL
,BPL
和SPL
; - 8 个新寄存器的低字节:
R8B
到R15B
。 - 但是,
AH
,BH
,CH
和DH
在使用 REX 前缀的指令中无法访问(对于 64 位操作数大小,或访问 R8-R15,或访问SIL
,DIL
,BPL
或SPL
)。使用 REX 前缀,用于表示AH
的机器码位模式代替SPL
,依此类推。请参阅英特尔指令参考手册(第 2 卷)的表 3-1。
- 传统的
写入 32 位寄存器始终将全宽寄存器的高 32 位归零,这与写入 8 位或 16 位寄存器(与旧值合并,这是对无序执行的额外依赖性)不同。 )。