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
.
我在 emu 80x86 IDE 中尝试了以下代码:
mov al,0h
sub al,1h
在模拟器中显示的输出中 al=FF
我确实理解了,但我不明白的是为什么在标志部分 cf=1
进位标志 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
.