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

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

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三、多字节、多进制加减运算实验

实验三、多字节、多进制加减运算实验 一、实验目的 学习多字节压缩BCD码加减法运算的程序设计 学习单字节有符号数加减运算的程序设计 二、实验要求 1.编写通用4字节压缩BCD码的加、减法运算程序 2.编写通用单字节有符号二进制数加、减法运算程序 三、实验原理 对于简单的8位加减可以直接调用指令就可以了。例如加法可以使用指令ADD以及带进位加ADDC,但单字节加减法只能在256之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数据。该实验介绍单片机BCD码多字节加、减运算通用程序的设计。 1.多字节无符号压缩BCD码加法运算 假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计算结果的地址于被加数相同。 ◆ 入口参数: R0:被加数地址指针; R1:加数地址指针; len:字节数。 ◆ 出口参数: @R0:计算结果; rLen:计算结果字节数。 ◆ 使用资源:ACC,R0、R1,内部RAM单元len、rlen及存放被加数、加数、计算结果的内存单元。 示例程序如下: ADDl: PUSH PSW ;保护标志寄存器内容 CLR C ;进位位清0 MOV rlen,#00H ;和的字节数先清0 ADD: MOV A,@R0 ;取被加数 ADD A,@R1 ;求和 DA A ;十进制调整 MOV @R0,A ;保存 INC R0 ;地址增1 INC R1 INC rlen ;字节数增1 DJNZ len,ADD ;所有字节未加完继续,否则向下执行 JNC ADD20 ;和的最高字节无进位转ADD20 MOV @R0,#01H ;和的最高字节地址内容为01H INC rlen ADD20: POP PSW RET END 多字节加法运算一般是按从低字节到高字节的顺序进行的,所以必须考虑低字节向高字节的进位情况,被加数和加数的压缩BCD码,最大不超过99,而99+99+1(进位)=199,此时不需要使用ADDC指令,但当两字节当最低两字节相加后,必须使用“DA A”进行十进制调整,调整后产生进位。而最高两字节相加后应考虑是否有进位。若有进位,应向和的最高位字节地址写入01H,这时和数将比加数或被加数多出一个字节。 2.单字节带符号数加法运算 编程范例: 两个8位二进制带符号数加法,被加数和加数分别存于BLK和BLK+1单元,和超过8位要占两个单元,设为SUM和SUM+1单元。 解:两个带符号数的加法是作为补码加法处理的。由于和超过8位,因此,和就是一个16位带符号数,符号位在16位数的最高位。为此,直接相加进位是不够的,还要做一些处理。例如-65和-65相加,若直接求和产生溢出,即使扩展到16位,结果也不正确。如: -65 1 0 1 1 1 1 1 lB +) -65 1 0 1 1 1 1 1 1B 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 OB 现在这个16位数的最高位为0,两个负数相加变为正数,显然是错误的。 处理的方法是先将8位带符号数扩展成16位带符号数,然后再相加。若是8位正数,则高8位扩展为00H;若是8位负数,则高8位扩展为0FFH。这样处理后,再按双字节相加,就可以得到正确的结果。如上例,由于是负数,高8位应是全1,然后再加: -65 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1B +) -65 1 1 1 1 1 1 1 1 1 0 1 l 1 1 1 1B 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0B, 最高位的进位丢失不计。换算成真值为—130,结果正确。 在编程时,判别加数和被加数的符号位,再决定是否要将高8位改为0FFH。 程序如下: BLK DATA 30H SUM DATA 40H MOV R0,#BLK ;R0指向被加数 MOV R1,#SUM ;R1指向和 MOV R2,#0 ;高8位先设为

文档评论(0)

75986597 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档