汇编语言中加减法运算的溢出处理
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中的最高位即为符号位)
只有相加才有可能溢出 ,以及小减大肯定溢出,大减小不会溢出
相加前在编码前加个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中的最高位即为符号位)
相关文章推荐
- 数据处理的两个基本问题01 - 零基础入门学习汇编语言38
- 数据处理的两个基本问题03 - 零基础入门学习汇编语言40
- 【80X86汇编语言学习】【字符串处理】字符串操作举例strcat
- 汇编语言学习笔记 第四节:逻辑运算指令
- 数据处理的两个基本问题01 - 零基础入门学习汇编语言38
- 汇编语言: 串处理指令
- 汇编语言学习(调试一个缓存溢出的程序)
- 80x86 汇编语言编程:斐波那契数列--大数处理
- 在所有当代计算机中,至少有部分中断处理程序是用汇编语言写的。
- 32位汇编语言学习笔记(3)--leal和算术运算指令
- 【汇编语言】Arm处理器之中断处理
- MASM汇编语言笔记(三)数据传送和算术运算
- 汇编语言 王爽 实验十 解决除法溢出问题
- 【80X86汇编语言学习】【字符串处理】字符串操作指令REP
- 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
- <学习笔记>王爽汇编语言__处理数据的两个基本问题
- 汇编语言中溢出和进位的区别
- 汇编语言 实验12 编写0号中断的处理程序
- 定点加减运算(补码加减法及溢出检测)
- 王爽 汇编语言 第三版 实验12 编写0号中断的处理程序