使用 amd64 程序集,将 64 位寄存器的前 32 位清零的最佳方法是什么,例如将 eax 未覆盖的 rax 位清零?看来我不能和整个寄存器针对 64 位常量。
问问题
2109 次
1 回答
12
movl %eax, %eax
或mov 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 回答