对汇编补码计算加法转减法计算的疑问
汇编中OF=1表示带符号的运算结果无效,CF=1无符号的运算结果无效。
对加法容易理解。但是对减法我理解不了:
0100,0001b-1010,1011b
(1)直接用减法计算:
//debug
0BAD:0005 B041 MOV AL,41
0BAD:0007 2CAB SUB AL,AB
-t
AX=0B96 BX=0000 CX=001D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0BAC ES=0B9C SS=0BAC CS=0BAD IP=0009 OV UP EI NG NZ AC PE CY
0BAD:0009 B409 MOV AH,09
结果OF =1,CF=1,所有有符号和无符号都无效。
(2)利用[X-Y]补 = [X]补 + [Y]补
上面的式子等价于:
0100,0001b+0101,0101b
//debug
0BAD:0005 B041 MOV AL,41
0BAD:0007 0455 ADD AL,55
-t
AX=0B96 BX=0000 CX=001D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0BAC ES=0B9C SS=0BAC CS=0BAD IP=0009 OV UP EI NG NZ NA PE NC
0BAD:0009 B409 MOV AH,09
结果OF=1,CF=0,所以有符号计算无效,无符号计算有效。
上面的例子两种方法计算的得出的结论怎么不同?