- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多字节、多进制加法运算实验报告
多字节、多进制加减运算学生:何绍金学号:201203870408专业班级:自动化1202指导老师:杨东勇2014年12月一、实验目的1. 学习多字节压缩 BCD 码加减法运算的程序设计;2. 学习单字节有符号数加减运算的程序设计。二、实验设备统一电子开发平台三、实验要求1.编写通用 4 字节压缩 BCD 码的加、减法运算程序;2.编写通用单字节有符号二进制数加、减法运算程序;四、实验原理(单字节带符号数加法运算)对于简单的8 位加减可以直接调用指令就可以了。例如加法可以使用指令ADD 以及带进位加ADDC,但单字节加减法只能在256 之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数据。该实验介绍单片机BCD 码多字节加、减运算通用程序的设计。五、实验过程1.多字节无符号压缩BCD 码加法运算假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计算结果的地址于被加数相同。(1)入口参数:R0:被加数地址指针;R1:加数地址指针;len:字节数。(2)出口参数:@R0:计算结果;rLen:计算结果字节数。(3)使用资源:ACC,R0、R1,内部RAM 单元len、rlen 及存放被加数、加数、计算结果的内存单元。示例程序如下:;多字节无符号压缩BCD 码加法运算rlen data 30h; 存放计算结果字节数len data 31h; 存放相加字节数; r0 定位40h,r1 定位50h; 此处的程序的问题是前面字节的进位没有处理,; 只是对最后字节相加处理了进位ORG 0000h;ADDl: PUSH PSW ;保护标志寄存器内容CLR C ;进位位清0MOV rlen,#00H ;和的字节数先清0ADD: MOV A,@R0 ;取被加数ADD A,@R1 ;求和DA A ;十进制调整MOV @R0,A ;保存INC R0 ;地址增1INC R1INC rlen ;字节数增1DJNZ len,ADD ;所有字节未加完继续,否则向下执行JNC ADD20 ;和的最高字节无进位转ADD20MOV @R0,#01H ;和的最高字节地址内容为01HINC rlenADD20: POP PSWRETEND多字节加法运算一般是按从低字节到高字节的顺序进行的,所以必须考虑低字节向高字节的进位情况,被加数和加数的压缩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 1B0 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 1B1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0B,最高位的进位丢失不计。换算成真值为—130,结果正确。在编程时,判别加数和被加数的符号位,再决定是否要将高8 位改为0FFH。程序如下:BLK DATA 30HSUM DATA 40HORG 0000hMAIN:MOV R0,#BLK ;R0 指向被加数MOV R1,#SUM ;R1 指向和MOV R2,#0 ;高8 位先设为0MOV R3,#0MOV A,@R0 ;
您可能关注的文档
最近下载
- 中式烹调师高级工理论知识练习题库(附参考答案).docx
- 中央厨房卫生规范与管理指南.docx VIP
- 2025年人工智能工程师(高级)题库.docx VIP
- 社会团体成立登记表.docx
- MITSUBISHI三菱MDS-EM EMH系列规格说明书.pdf
- 高血压科普健康宣教ppt课件.pptx VIP
- 2025入党积极分子发展对象考试题库(含答案).pdf VIP
- YD-T 4244-2023电信网和互联网数据分类分级技术要求与测试方法.pdf VIP
- 2025年新版成人考试模拟真题及答案.doc VIP
- 0523S01019-理解当代中国:汉英翻译-2023版人才培养方案课程教学大纲.docx VIP
文档评论(0)