RAX,RBX,RCX,RDX,RSI,RDI,RBP,RSP,R8-R15是否可互换?

Ale*_*nko 4 assembly x86-64

x64寄存器是否可以互换,因为任何与它们组合使用的指令都可以与其他指令一起使用?除了名称之外,是否有性能差异或任何其他因素使它们彼此不同?

phu*_*clv 6

虽然大多数x86和x86_64指令都可以使用任何寄存器作为GPR,但某些指令只能用于特定寄存器或寄存器集,例如movabs,mul,div ......

有关隐式寄存器使用的更多信息,请阅读此处

  • 还存在寻址模式差异(例如,没有[rbp].你必须用[rbp + 0]伪造它)并且高寄存器编码不那么紧凑. (3认同)

gsg*_*gsg 4

有一些限制,编码也有一些差异。

rsp(和esp等)不能用作索引寄存器。有许多指令在特定寄存器中接受参数或返回结果 - 例如,变量移位指令仅在cl.

算术指令 ( 和test) 具有rax加 32 位立即数的短编码:

8:  48 05 ff ff 00 00       add    $0xffff,%rax
e:  48 81 c3 ff ff 00 00    add    $0xffff,%rbx
Run Code Online (Sandbox Code Playgroud)

我确信还有一些其他的点点滴滴我现在想不起来:请参阅架构手册以获取血淋淋的细节。