在64位ASM中.是否有一种很好的方法只能注意寄存器的底部32位

tin*_*ppo 4 x86 assembly

假设我们在RAX中有一些价值.我们希望不是RAX的低32位,而是保持高32位不变.有这么好的方法吗?

像这样的命令:

not eax
Run Code Online (Sandbox Code Playgroud)

不幸的是零延伸.

我可以这样做:

mov rbx,rax
not ebx ; or not rbx
and rax, 0xffffffff00000000
or rax, rbx
Run Code Online (Sandbox Code Playgroud)

但感觉应该有一个更好的方式.

Vat*_*ine 7

你可以对它进行异或0x00000000ffffffff,这将翻转底部的32位.

  • 一个问题是XOR只需要32位立即签名,因此您需要在内存中使用64位值进行异或,或者使用立即64位的MOV然后使用XOR. (3认同)