为什么 shr eax, 32 没有做任何事情?

问题描述 投票:0回答:1

运行此汇编代码时(nasm)

mov eax, 0x12345678
shr eax, 32

我注意到 eax 寄存器中的值不是 0,我很困惑为什么会这样?

我尝试按其他数字进行转换,确实按预期工作。

assembly x86 nasm
1个回答
0
投票

移位大于或等于寄存器表示的位数的值是未定义的行为。

如果您想将值归零,规范的方法是

xor eax, eax

如果您真的想要通过轮班来做到这一点,那么请轮班两次,使用的值加到 32。

© www.soinside.com 2019 - 2024. All rights reserved.