清除x86_64 GPR(r?x)的高32位的最快指令是什么?
答案 0 :(得分:2)
不是很老and
不够好吗?
and rbx,0ffffffffh
答案 1 :(得分:1)
也许在某些情况下它可能最终不是更快的方法,但一般来说它应该:使用mov reg32,reg32
英特尔语法示例:
mov ebx, ebx ; The topmost 32 bits of rbx will be cleared
mov r11d, r11d ; The topmost 32 bits of r11 will be cleared
它起作用的原因是因为当你写一个32位寄存器时,它的64位兄弟会将其高32位清零。 “或reg32,reg32”,“和reg32,reg32”,“添加reg32,0”等也会发生同样的情况。
在使用某种方法清除高32位之前,请确保您确实需要执行此类操作,因为您的代码可能会开始使用32位操作(将自动清除高32位),在需要使用64位宽的操作数之前。