我正在学习计算机体系结构课程。
我的老师告诉我,有符号整数存储在二进制补码中,并且在进行减法时,例如 x - y,y 的补码会与 x 相加。
本课程还教授一些汇编语言。我了解到,如果操作从结果的最高有效位产生进位或借位,则在操作后设置进位标志。
鉴于上述知识,我对以下示例的结果感到困惑:
example1:
; eax = C2h, ecx = 22h
sub eax, ecx
; after this, cf = 0
example2:
; eax = 22h, ecx = C2h
sub eax, ecx
; after this, cf = 1
第一个例子是计算
C2 - 22 =
C2 + (FFFFFFDE) =
C0 + overflowed 2^32 carried out of the most significant bit
, 我认为应该设置 cf
第二个例子是计算
22 - C2 =
22 + FFFFFF3E =
FFFFFF60 with no overflow, so no carry out of the most significant bit
, 我认为不应该设置 cf
为什么实际结果却恰恰相反?我是不是误会了什么?