我在 emu 80x86 IDE 中尝试了以下代码:
mov al,0h
sub al,1h
在模拟器中显示的输出中al=FF
,我确实理解它,但我不明白为什么在标志部分cf=1
CF
当 CPU 处理无符号整数时使用进位标志(在 8 位寄存器中,它们的值可以在 00h 和 FFh 之间)。
当执行加法并且结果超过最大值FFh时,CF
表示它发生了,并且应该将数字1添加到更高阶的寄存器中(ah
)。
当执行减法并且结果低于最小值 00h 时,CF
表示它发生了并且应该从 中借用(减去)数字 1 ah
。
在您的示例代码中,从 0h 中减去 1h 的结果al
低于允许的最小值,这就是设置 CF 的原因。
设置cf=1
CPU 表示无符号减法下溢。
如果您将这些数字视为有符号整数,它们的允许范围是 -128 到 +127(80h 到 7F),并且溢出或下溢用不同的标志表示of
。在您的代码中,结果(视为有符号数)为 -1(FFh),这在允许的范围内(无溢出),因此您应该在模拟器中看到of=0
.