运行此汇编代码时(nasm)
mov eax, 0x12345678 shr eax, 32
我注意到 eax 寄存器中的值不是 0,我很困惑为什么会这样?
我尝试按其他数字进行转换,确实按预期工作。
移位大于或等于寄存器表示的位数的值是未定义的行为。
如果您想将值归零,规范的方法是
xor eax, eax
如果您真的想要通过轮班来做到这一点,那么请轮班两次,使用的值加到 32。