我一直在使用eax等在我的64位操作系统上进行编程,但rax的工作方式完全相同.在exx vs rxx中编写内联汇编有什么好处吗?如果有任何exx跨平台兼容,并节省了使用预定义处理器宏在exx和rxx之间进行更改的边际时间.
在什么情况下?如果需要保存地址,显然需要64位寄存器(除非使用x32 ABI或其他方法确保地址适合32位).
否则,如果您不需要64位操作数大小,请使用32位,因为它是默认值.64需要REX前缀,16需要操作数大小前缀字节,而8只需要使用不同的操作码.
在许多情况下,即使您只想要较小的结果,也可以使用默认的32位操作数/ 64位地址大小.例如lea eax, [rdi + rsi*4 - 15]
总是给出相同的结果lea eax, [edi + esi*4 - 15]
.这个Q&A涵盖了(并链接到)操作数大小的一些背景,如果你发现它不明显,可能会对事情有所了解.