使用旧名称所有寄存器保持相同大小,就像 x86-16 扩展到 x86-32 时一样。要访问 64 位寄存器,请使用带有 R-prefix 的新名称,例如 rax、rbx...
寄存器名称不会改变,因此您只需像以前一样将字节寄存器(al、bl、cl、dl、ah、bh、ch、dh)用于 ax、bx、cx、dx 的 LSB 和 MSB。
还有 8 个新寄存器,称为 r8-r15。您可以通过添加后缀 b(或 l if you're using AMD)来访问它们的 LSB。比如r8b, r9b... 你也可以用名字sil, dil, spl, bpl的esi, edi, esp, ebp的LSB和新的REX prefix一起使用,但是不能和ah同时使用, bh, ch 或 dh。
同样可以通过后缀w或d访问新寄存器的最低字或双字。
见What are the names of the new X86_64 processors registers?
关于调用约定,在特定系统上只有一个约定1。
更多信息请阅读x86-64和x86-64 calling conventions
Plan 9 中还有一个约定
- 所有寄存器都是调用者保存的
- 所有参数都在堆栈上传递
- 返回值也会在堆栈中返回,位于参数下方(堆栈方式;amd64 上的更高地址)保留的空间中。
事实上,Plan 9 一直都是个怪人。例如,它在没有硬件零寄存器的 RISC 架构上强制寄存器为 0。它上面的 x86 寄存器名称在 16、32 和 64 位 x86 架构中也是一致的,操作数大小由助记符后缀指示。这意味着 ax 可以是 16、32 或 64 位寄存器,具体取决于指令后缀。如果您对此感到好奇,请阅读
OTOH Itanium 是一个完全不同的架构,与 x86-64 没有任何关系。它是纯 64 位架构,因此所有普通寄存器都是 64 位的,没有 32 位或更小的版本可用。里面有很多寄存器:
- 128 个通用整数寄存器 r0 到 r127,每个寄存器携带 64 个值位和一个陷阱位。稍后我们将详细了解陷阱位。
- 128 个浮点寄存器 f0 到 f127。
- 64 个谓词寄存器 p0 到 p63。
- 8 个分支寄存器 b0 到 b7。
- 一个指令指针,Windows 调试引擎出于某种原因将其称为 iip。 (多余的“i”代表“疯狂”?)
- 128 个专用寄存器,并非所有寄存器都已被赋予含义。出于某种原因,这些被称为“应用程序寄存器”(ar)。我将介绍讨论期间出现的选定寄存器。
- 我们不会在本系列中介绍的其他杂项寄存器。
The Itanium processor, part 1: Warming up
阅读更多What is the difference between x64 and IA-64?