bla*_*ke 0 x86 assembly bit-manipulation eflags emu8086
我正在使用 emu8086 学习 8086 汇编,我正在玩一些旋转指令,至于我的问题,我知道对于超过 1 位移位/旋转,溢出标志 OF 的行为是未定义的。
但是当我尝试下面的代码时
MOV BH,72H
MOV CL,4
ROL BH,CL
Run Code Online (Sandbox Code Playgroud)
BH 寄存器中的结果为 27H,并且至于标志,进位和溢出标志被设置为 1,即使 OF 不应该被设置,因为它是未定义的。
有人可以解释一下 OF 是如何以及为什么设置在这里的吗?
未定义的标志意味着未指定它是被清除还是被设置。您的模拟器决定设置该标志。另一个 x86 CPU 可能会清除该标志。该行为甚至可能会根据所使用的操作数而有所不同,或者每次执行指令时都会有所不同。不依赖指令后溢出标志的值rol。