2014-01-29 131 views
5

使用amd64彙編,什麼是最好的方法來清零64位寄存器的前32位,例如:將eax未涵蓋的rax位刪除掉?看來,我不能和整個註冊對64位常數。零輸出64位寄存器的前32位

+0

是不是eax的低32位rax?看到這裏:http://stackoverflow.com/questions/8580838/how-to-move-two-32-bit-registers-in-to-one-64-bit –

+1

如果eax是一個有符號的值,那麼你想要1s if該值是負值,而不是0s。 MOVSXD。 –

回答

8

movl %eax, %eaxmov eax, eax,取決於使用的彙編程序。請參閱:英特爾®64和IA-32架構 - 軟件開發人員手冊,Volume 1,3.4.1.1:64位模式下的通用寄存器。

32位操作數生成32位結果,零擴展爲目標通用寄存器中的64位結果。

我還要補充,在問候@ HansPassant的評論:7.3.1.7:

的MOVSXD指令對64位數據進行操作。它將一個32位值標記爲64位。