1

我在 emu 80x86 IDE 中尝试了以下代码:

mov al,0h
sub al,1h

在模拟器中显示的输出中al=FF,我确实理解它,但我不明白为什么在标志部分cf=1

4

1 回答 1

2

CF当 CPU 处理无符号整数时使用进位标志(在 8 位寄存器中,它们的值可以在 00h 和 FFh 之间)。

当执行加法并且结果超过最大值FFh时,CF表示它发生了,并且应该将数字1添加到更高阶的寄存器中(ah)。

当执行减法并且结果低于最小值 00h 时,CF表示它发生了并且应该从 中借用(减去)数字 1 ah

在您的示例代码中,从 0h 中减去 1h 的结果al低于允许的最小值,这就是设置 CF 的原因。

设置cf=1CPU 表示无符号减法下溢。

如果您将这些数字视为有符号整数,它们的允许范围是 -128 到 +127(80h 到 7F),并且溢出或下溢用不同的标志表示of。在您的代码中,结果(视为有符号数)为 -1(FFh),这在允许的范围内(无溢出),因此您应该在模拟器中看到of=0.

于 2020-05-09T10:24:06.943 回答