您的位置:首页 > 其它

汇编语言中加减法运算的溢出处理

2014-01-20 11:22 519 查看
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中的最高位即为符号位)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: