6

使用 amd64 程序集,将 64 位寄存器的前 32 位清零的最佳方法是什么,例如将 eax 未覆盖的 rax 位清零?看来我不能和整个寄存器针对 64 位常量。

4

1 回答 1

12

movl %eax, %eaxmov eax, eax,取决于使用的汇编程序。

请参阅:英特尔® 64 和 IA-32 架构 - 软件开发人员手册,第 1 卷,3.4.1.1:64 位模式下的通用寄存器。

32 位操作数生成 32 位结果,在目标通用寄存器中零扩展为 64 位结果。

关于@HansPassant 的评论,我还应该补充: 7.3.1.7 :

MOVSXD 指令对 64 位数据进行操作。它将 32 位值符号扩展为 64 位。

于 2014-01-29T18:23:32.747 回答