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

时间:2013-12-28 02:41:31

标签: assembly x86-64

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

2 个答案:

答案 0 :(得分:6)

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

有关隐式寄存器用法的更多信息,请阅读here

答案 1 :(得分:2)

存在一些限制,以及编码方面的一些差异。

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

我确信目前还有一些我无法想到的其他部分:请参考建筑手册了解血腥细节。