1.无符号数运算
只有相加才有可能溢出 ,以及小减大肯定溢出,大减小不会溢出
相加前在编码前加个0,作为符号位.如果结果的符号为1,则溢出.
举例,12+7=19(溢出)
01100+00111=10011
2.有符号数运算
两个异号数相加或两个同号数相减,其结果不会溢出 .仅当两个同号数相加或两个异号数相减 ,才有可能发生溢出的情况.
今以4位二进制补码整数加法运算为例说明如下:
(前注,4位二进制只能表示-8~7,所以必需在前面加个符号位)
9+5=14
01001+00101=01110
(-9)+(-5)=-14
10111+11011=110010
12+7=19(溢出)
01100+00111=10011
(-12)+(-7)=-19(溢出)
10100+11001=101101
14-1=13
01110+11111=101101
-14+1=-13
10010+00001=10011
判别方法:当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出。
真实案例:
mov bx,9048H ;bx=9048H,即bh=90H,bl=48H
sub bh,bl ;bh=48H,bl=48H,即bx=4848H
;CF=0 OF=1
解释:无符号运算,大数减小数,所以不溢出,所以CF=0;
有符号运算,90-48=10010000-01001000=10010000+10111000=101001000(必须转成补码加法,才能使用该方法判断,且寄存器bh,bl中的最高位即为符号位)