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 位寄存器(与旧值合并,这是对无序执行的额外依赖性)不同。 )。