这个OF代表的溢出指的是如果把数据当成有符号数的话,结果如果超出能表示的范围的话,则结果溢出
那么多少是溢出呢?
首先看一下有符号数能表示的范围
在把数据看成有符号数的情况下,数据是被看作补码的,00000000B-011111111B为正数其值和原来的值一样,10000000B-11111111B为负数,10000000B最小,是-128,11111111B最大,是-1
所以说如果把数据看成是有符号数的话,在8位的情况下能表示的范围是-128~127
所以楼主的10000000B+10000000B如果看成是有符号数的话,是-128-(-128)=-256,这个-256小于-128,超出了8位有符号数所能表示的范围,所以发声了溢出
mov al,80h;执行后保持前面的标志寄存器的值
add al,80h
作为无符号时,结果al为'1'00H当然进位了CF=1
作为无符号时,80H>7FH 即80H作为补码要看作-128
add al,80H后 -128+(-128)=-256<-128 所以溢出OF=1
反正你就记住,加错了就会有CF/OF
如果结果对于无符号不对CF=1
如果结果对于有符号不对OF=1
80h-〉有符号= -128
-128 + -128 应当= -256
显然-256是放不到al里面的
-------------------------------------------
CF的算法不介绍了,OF这样计算
1000 0000
+ 1000 0000
-------------
1 0000 0000
进位(两位)为01,10时,OF=1 (本例为10)
进位(两位)为00,11时,OF=0
---------------------------------
如果两个数相加,计算两个进位,前一个是CF,后面一个就是最高位
如果最高位和CF相同OF=0,否则OF=1
1100 0000
+ 1100 0000
----------------
1 1000 0000 (本例为 11)
其他的自己推,吧,反正就是很简单
OF不是进位CF,而是“CF”与“次高位向最高位进位”的“异或”,你算一算是不是=1?