8位寄存器中0-1操作的进位标志

Carry flag of the operation 0 - 1 in 8 bit register

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

mov al,0h
sub al,1h

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

当 CPU 与 无符号整数 数字一起工作时,使用

进位标志 CF (在 8 位寄存器中,它们的值可以在 00h 和 FFh 之间)。

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

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

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

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

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