网站大量收购独家精品文档,联系QQ:2885784924

微机原理与应用:第二十一讲 汇编语言经典程序设计举例上.ppt

微机原理与应用:第二十一讲 汇编语言经典程序设计举例上.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二十一讲 汇编语言经典程序设计上 * 4.3.5 经典程序设计举例 例4-17:编一子程序,完成两双字节补码相减。设减数和被减数分别存放在R2R3和R4R5中,运算的结果存放在R6R7中。若运算结果发生溢出,使00H位单元=1;反之,使00H位单元=0。 * 1、双字节补码减法程序设计 一、数据运算程序设计 程序编制 ;双字节补码减法子程序 ;入口参数:子程序名COMSUB,减数和被减数分别存放在0区寄存器R2R3和R4R5中。 ;出口参数:运算的结果存放在0区寄存器R6R7中。若运算结果发生溢出,00H位单元=1;反之,00H位单元=0。 FLAG BIT 00H; 定义设置溢出标志位。 COMSUB:PUSH PSW; 保护现场。 PUSH ACC; 保护现场。 CLR C; 清Cy位。 MOV A, R5; 取补码数据的低8位于ACC。 SUBB A, R3; 补码数据的低8位相减。 MOV R7, A; 存放补码数据的低8位相减的结果。 * 程序编制续 MOV A, R4; 取补码数据的高8位于ACC。 SUBB A, R2; 补码数据的高8位相减,并减借位。 MOV R6, A; 存放补码数据的高8位相减的结果。 MOV C, OV; 将溢出位的状态传入Cy。 MOV FLAG, C; 将数据运算可能产生的溢出位传入00H位。 POP ACC; 恢复现场。 POP PSW; 恢复现场。 RET; 子程序返回。 * 2、双字节补码求补程序设计 例4-18:编一子程序,完成一双字节补码求补。设补码存放在R2R3中,将求补的结果存放在R4R5中。 解:本子程序的任务是双字节补码求补,求补概念与第一章所阐述的补码概念有所不同,所谓求补就是,无论该数据正负,均对该数据进行求补操作,具体操作是对该数据先求反,再加1。 * 程序编制 ;双字节补码求补子程序 ;入口参数:子程序名COMPL,补码存放在0区寄存器R2R3中。 ;出口参数:求补的结果存放在0区寄存器R4R5中。 COMPL: PUSH PSW; 保护现场。 PUSH ACC; 保护现场。 MOV A,R3; 取补码的低8位于ACC。 CPL A ;补码数据的低8位取反 ADD A,#1; 补码数据的低8位取反后再加1。 MOV R5,A; 存放补码数据的低8位处理的结果。 MOV A,R2; 取补码的高8位于ACC。 CPL A; 补码数据的高8位取反。 ADDC A,#0; 加上低8位处理时产生的进位。 * 程序编制续 MOV R4,A; 存放补码数据的高8位运算的结果。 POP ACC; 恢复现场。 POP PSW; 恢复现场。 RET; 子程序返回。 * 二、查表程序设计 所谓表格是指在程序存储器中定义一组有序的数据(常数)。根据x与y的不同特点,查表程序有几种不同的类型。 1、线性查表,根据序号i求ai值 所谓线性查表是指在查表中, x为序号i,i={0,1,2,…n},根据i查找y;设y为ai,是预先存放在程序存储器表格中的数据。数据ai在表格中的地址(位置)可由下式给出: addr(ai) = addr(a0) + i×L (4-1) addr(a0)是数据表格的首地址,L是表格中数据的字节数。 * 表格在内存中的情况 ai为单字节 ai为双字节 * 内存地址 内存内容 addr(a0)+n-1 an-1 addr(a0)+n-2 an-2 ┆ ┆ ┆ ┆ ┆ ┆ addr(a0)+i ai ┆ ┆ ┆ ┆ ┆ ┆ addr(a0)+1 a1 addr(a0)+0 a0 内存地址 内存内容 addr(a0)+(n-1)+×2 a(n-1)L addr(a0)+(n-2)+×2 a(n-2)H ┆ ┆ ┆ ┆ addr(a0)+i×2+1 aiL addr(a0)+i×2 aiH ┆ ┆ ┆ ┆ ┆ ┆ addr(a0)+1 a0L addr(a0)+0 a0H 例4-19 编制一子程序,将一个16进制数转换成相应的ASCII码。需转换的十六进制数放在寄存器R5中,转换好的ASCII码也放在R5中。 解:本例中的问题恰好与例4-12的问题相反,是将十六进制数转换成相应的ASCII码。这里十六进制数是x,具有序号的特点,ASCII码是y,因此求ASCII码的算法如程序流程图4-8所示。 * 程序流程图和程序 ; 十六进制数转换成ASCII码子程序 ;入口参数:子程序名HAC,需转换的十六进制数放在0区寄存器R5中。 ;出口参数:转换好的ASCII码也放在0区寄存器R5中。 HAC: PUSH PSW; 保护现场。 PUSH ACC; 保护现场。 PUSH DP

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档