Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 将64位寄存器的前32位归零_Assembly_X86 64_Machine Language - Fatal编程技术网

Assembly 将64位寄存器的前32位归零

Assembly 将64位寄存器的前32位归零,assembly,x86-64,machine-language,Assembly,X86 64,Machine Language,使用amd64汇编,将64位寄存器的前32位归零的最佳方法是什么,例如,将eax未涵盖的rax位归零?似乎我无法根据64位常量对整个寄存器进行排序 movl%eax,%eax或mov-eax,eax,具体取决于使用的汇编程序 请参阅:英特尔64和IA-32体系结构-软件开发人员手册,3.4.1.1:64位模式下的通用寄存器 32位操作数生成32位结果,在目标通用中零扩展为64位结果 注册。 关于@HansPassant的评论,我还要补充:7.3.1.7: MOVSXD指令对64位数据进行操作。它

使用amd64汇编,将64位寄存器的前32位归零的最佳方法是什么,例如,将eax未涵盖的rax位归零?似乎我无法根据64位常量对整个寄存器进行排序

movl%eax,%eax
mov-eax,eax
,具体取决于使用的汇编程序

请参阅:英特尔64和IA-32体系结构-软件开发人员手册,3.4.1.1:64位模式下的通用寄存器

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

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


MOVSXD指令对64位数据进行操作。它将32位的值扩展到64位。

eax不是rax的低32位吗?请参见此处:如果eax是有符号值,那么如果值为负数,则需要1s,而不是0s。MOVSXD。如果可能的话,最好是
mov
到另一个寄存器(不在其他地方花费额外的指令)
mov same,same
击败了Intel SnB系列和AMD Ryzen上的mov消除,因此
mov edi,edi
与作为dep链一部分的mov ecx,edi相比,延迟成本为1c。(见附件)。即使延迟比吞吐量更重要,但背对背的
mov-eax,edi
/
mov-edi,eax
可能会使其中一个无法消除mov,因此通常不要这样做。