实验三、多字节、多进制加减运算实验

实验三、多字节、多进制加减运算实验

ID:14277474

大小:50.50 KB

页数:4页

时间:2018-07-27

实验三、多字节、多进制加减运算实验_第1页
实验三、多字节、多进制加减运算实验_第2页
实验三、多字节、多进制加减运算实验_第3页
实验三、多字节、多进制加减运算实验_第4页
资源描述:

《实验三、多字节、多进制加减运算实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验三、多字节、多进制加减运算实验一、实验目的1.学习多字节压缩BCD码加减法运算的程序设计2.学习单字节有符号数加减运算的程序设计二、实验要求1.编写通用4字节压缩BCD码的加、减法运算程序2.编写通用单字节有符号二进制数加、减法运算程序三、实验原理对于简单的8位加减可以直接调用指令就可以了。例如加法可以使用指令ADD以及带进位加ADDC,但单字节加减法只能在256之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数据。该实验介绍单片机BCD码多字节加、减运算通用程序的设计。1.多字节无符号压缩BCD

2、码加法运算假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计算结果的地址于被加数相同。◆入口参数:R0:被加数地址指针;R1:加数地址指针;len:字节数。◆出口参数:@R0:计算结果;rLen:计算结果字节数。◆使用资源:ACC,R0、R1,内部RAM单元len、rlen及存放被加数、加数、计算结果的内存单元。示例程序如下:ADDl:PUSHPSW;保护标志寄存器内容CLRC;进位位清0MOVrlen,#00H;和的字节数先清0ADD:MOVA,@R0;取被加数ADDA,@

3、R1;求和DAA;十进制调整MOV@R0,A;保存INCR0;地址增1INCR1INCrlen;字节数增1DJNZlen,ADD;所有字节未加完继续,否则向下执行JNCADD20;和的最高字节无进位转ADD20MOV@R0,#01H;和的最高字节地址内容为01HINCrlenADD20:POPPSWRETEND多字节加法运算一般是按从低字节到高字节的顺序进行的,所以必须考虑低字节向高字节的进位情况,被加数和加数的压缩BCD码,最大不超过99,而99+99+1(进位)=199,此时不需要使用ADDC指令,但当两字节当最

4、低两字节相加后,必须使用“DAA”进行十进制调整,调整后产生进位。而最高两字节相加后应考虑是否有进位。若有进位,应向和的最高位字节地址写入01H,这时和数将比加数或被加数多出一个字节。2.单字节带符号数加法运算编程范例:两个8位二进制带符号数加法,被加数和加数分别存于BLK和BLK+1单元,和超过8位要占两个单元,设为SUM和SUM+1单元。解:两个带符号数的加法是作为补码加法处理的。由于和超过8位,因此,和就是一个16位带符号数,符号位在16位数的最高位。为此,直接相加进位是不够的,还要做一些处理。例如-65和-6

5、5相加,若直接求和产生溢出,即使扩展到16位,结果也不正确。如:-651011111lB+)-6510111111B000000010111111OB现在这个16位数的最高位为0,两个负数相加变为正数,显然是错误的。处理的方法是先将8位带符号数扩展成16位带符号数,然后再相加。若是8位正数,则高8位扩展为00H;若是8位负数,则高8位扩展为0FFH。这样处理后,再按双字节相加,就可以得到正确的结果。如上例,由于是负数,高8位应是全1,然后再加:-651111111110111111B+)-6511111111101l

6、1111B1111111101111110B,最高位的进位丢失不计。换算成真值为—130,结果正确。在编程时,判别加数和被加数的符号位,再决定是否要将高8位改为0FFH。程序如下:BLKDATA30HSUMDATA40HMOVR0,#BLK;R0指向被加数MOVR1,#SUM;R1指向和MOVR2,#0;高8位先设为0MOVR3,#0MOVA,@R0;取出被加数JNBACC.7,N1;若是正数转移到N1MOVR2,#0FFH;若是负数高8位为全1N1:INCR0;修改即指针MOVB,@R0;取加数到BJNBB.7,N

7、2;若是正数转移N2MOVR3,#0FFH;若是负数高8位为全1N2:ADDA,B;低8位相加.MOV@R1,A;存低8位和INCR1;修改R1指针MOVA,R2;准备加高8位ADDCA,R3;高8位相加MOV@R1,A;存高8位和SJMP$END3.多字节无符号压缩BCD码减法运算为了使用“DAA”指令对十进制减法进行调整,必须采用对减数求补相加的方法,以9AH为模减去减数即得到减数的补数。设被减数低字节地址存在R1,减数低字节地址存在R0,字节数存在len;差的低字节地址存在R0,差的字节数存在rlen。u入口参

8、数:R0:减数地址指针;R1:被减数地址指针;len:字节数u出口参数:R0:差的地址指针R3:差的字节数u使用资源:A,R0,R1,内部RAM单元范例程序如下:SUBCD:MOVrlen,#00H;差字节单元清0CLR07H;符号位清0CLRC;借位位清0SUBBCD:MOVA,#9AH;减数对模100求补SUBBA,@R0ADDA,@R1;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。