64 位寄存器

AMD 是一家处理器制造商,已经从英特尔获得了 80386 的设计许可,以生产兼容但竞争的版本。他们对设计进行了内部更改,以提高设计的吞吐量或其他增强功能,同时仍然能够执行相同的程序。

对于单一的英特尔,他们提出了英特尔 32 位设计的 64 位扩展,并生产出第一个仍然可以运行 32 位 x86 代码的 64 位芯片。英特尔最终在他们的 64 位架构版本中采用了 AMD 的设计。

64 位设计对寄存器组进行了一些更改,同时仍然向后兼容:

  • 现有的通用寄存器扩展为 64 位,并以 R 前缀命名:RAXRBXRCXRDXRSIRDIRBPRSP

    同样,这些寄存器的下半部分与之前的 E 前缀寄存器相同,并且无法独立访问上半部分。

  • 增加了 8 个 64 位寄存器,并没有命名,只是编号:R8R9R10R11R12R13R14R15

    • 这些寄存器的 32 位低半部分是 R8DR15D(D 通常用于 DWORD)。
    • 这些寄存器的最低 16 位可以通过将 W 后缀为寄存器名称来访问:R8WR15W
  • 现在可以访问所有 16 个寄存器的最低 8 位 :

    • 传统的 ALBLCLDL;
    • (传统)指针寄存器的低字节:SILDILBPLSPL;
    • 8 个新寄存器的低字节:R8BR15B
    • 但是,AHBHCHDH 在使用 REX 前缀的指令中无法访问(对于 64 位操作数大小,或访问 R8-R15,或访问 SILDILBPLSPL)。使用 REX 前缀,用于表示 AH 的机器码位模式代替 SPL,依此类推。请参阅英特尔指令参考手册(第 2 卷)的表 3-1。

写入 32 位寄存器始终将全宽寄存器的高 32 位归零,这与写入 8 位或 16 位寄存器(与旧值合并,这是对无序执行的额外依赖性)不同。 )。