x64寄存器是否可以互换,因为任何与它们组合使用的指令都可以与其他指令一起使用?除了名称之外,是否存在性能差异或任何其他因素使它们彼此不同?
答案 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
我确信目前还有一些我无法想到的其他部分:请参考建筑手册了解血腥细节。