使用 rxx 寄存器比 exx 解码 CPUID 有优势吗?

Is there an advantage of using rxx registers over exx for decoding CPUID?

我一直发现自己在我的 64 位 OS 上使用 eax 等进行编程,但 rax 的工作原理完全相同。在 exx 和 rxx 中编写内联汇编有什么好处吗? If anything 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] 相同的结果。该问答涵盖(并链接到)操作数大小的一些背景知识,如果您发现它不明显,这可能会阐明一些事情。