CF表示无符号数的溢出,OF表示带符号数的溢出。
加法中CF表示最高有效位有无向高位进位,有进CF=1,无进CF=0;
减法中CF表示最高有效位有无向高位借位,有借CF=1,无借CF=0。sub 3,4 后,cf的值为1,
字操作时的15位或字节操作时的第7位)产生一个进位或借位时,cf被置1无论怎么说来说去,总的原则只有两条:
第一:操作数没有明确到底是有符号数还是无符号数,你认为它是什么就是什么。
比如:a2可以是无符号数吧,大于128了,也可以是有符号数吧,就是个负数了。。。。
第二:处理器对两个操作数进行运算时,按照无符号数求得结果。 这只是处理器的处理方式。
计算结果被舍掉一位有两种情况,结果对,结果错
错的叫溢出,对的叫进位
加法的溢出有两种情况,如果是减法也差不多
两个正数相加 4f+5f变成一个负数了,溢出
两个负数相加 af+af变成一个正数了,溢出
进位,NND有点阴险,进了位被舍掉一位数据还正确,靠!
MOV AL, 01H
MOV BL, 80H
SUB AL, BL
= 1 - (-128)
MOV AL, 01H
MOV BL, 80H
ADD AL,BL
= 1 + (-128)
是的,第一个的OF还好理解,因为超出了有符号数的表示范围,关键是CF不好理解,所以想问一下这个减法是怎么完成的。
01h - 80h 有借位, cf置1
那可不可以这样理解: 做减法时先看原码,如有借位则CF置1,再变成补码做加法.
也可以这样理解
加法中CF表示最高有效位有无向高位进位,有进CF=1,无进CF=0;
减法中CF表示最高有效位有无向高位借位,有借CF=1,无借CF=0。sub 3,4 后,cf的值为1,
字操作时的15位或字节操作时的第7位)产生一个进位或借位时,cf被置1无论怎么说来说去,总的原则只有两条:
第一:操作数没有明确到底是有符号数还是无符号数,你认为它是什么就是什么。
比如:a2可以是无符号数吧,大于128了,也可以是有符号数吧,就是个负数了。。。。
第二:处理器对两个操作数进行运算时,按照无符号数求得结果。 这只是处理器的处理方式。
计算结果被舍掉一位有两种情况,结果对,结果错
错的叫溢出,对的叫进位
加法的溢出有两种情况,如果是减法也差不多
两个正数相加 4f+5f变成一个负数了,溢出
两个负数相加 af+af变成一个正数了,溢出
进位,NND有点阴险,进了位被舍掉一位数据还正确,靠!
MOV AL, 01H
MOV BL, 80H
SUB AL, BL
做完之后OF, CF都被置位了。据我所知,减法是用补码当加法做的,80H的补码就是其本身,可是最后一句换成ADD AL,BL的话OF,CF就被清除了。所以想请问一下减法实现以及OF,CF设置的内部机制。
MOV AL, 01H
MOV BL, 80H
SUB AL, BL
= 1 - (-128)
MOV AL, 01H
MOV BL, 80H
ADD AL,BL
= 1 + (-128)
是的,第一个的OF还好理解,因为超出了有符号数的表示范围,关键是CF不好理解,所以想问一下这个减法是怎么完成的。
01h - 80h 有借位, cf置1
那可不可以这样理解: 做减法时先看原码,如有借位则CF置1,再变成补码做加法.
也可以这样理解
浙公网安备 33010602011771号