第四章 MCS-51汇编程序设计.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.3.7 分支转移程序设计 特点是程序中含有转移指令,转移指令又分为无条件转移和有条件转移,因此分支程序也可分为无条件分支转移程序和有条件分支转移程序。有条件分支转移程序按结构类型来分,又分为单分支转移结构和多分支转移结构。 一、分支转移结构 1.单分支转移结构 仅有两个出口,两者选一。 例4-11 求单字节有符号数的二进制补码 参考程序: CMPT: JNB Acc.7,RETURN;(A)>0,不需转换 MOV C,Acc.7 ;符号位保存 CPL A ;(A)求反,加1 ADD A,#1 ; 5. 中断服务程序 中断服务子程序是为响应请求某个中断源的中断请求服务的独立程序段,与子程序类似. 中断服务子程序与普通子程序的区别在于: ?必须以中断子程序返回指令RETI指令结束。 ?CPU执行中断服务程序的时机是随机的。 4.3.2 子程序的设计 一、子程序设计原则和应注意的问题 一种能完成某一特定任务的程序段。其资源要为所有调用程序共享。因此,子程序在结构上应具有独立性和通用性,在编写子程序时应注意以下问题: 1.子程序的第一条指令的地址称为子程序的入口地址。该指令前必须有标号。 2.主程序调用子程序 两条子程序调用指令: (1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16 3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序 6.在子程序调用时,还要注意参数传递的问题 二、 子程序的基本结构 MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序SUB ┇ ┇ SUB: PUSH PSW ;现场保护 PUSH ACC ; 子程序处理程序段 POP ACC ;现场恢复 POP PSW ; RET ;最后一条指令必须为RET 例4-3 单字节有符号数的加减法子程序(自己阅读) MAIN: … ;主程序入口 LCALL SUB1 ;调用减法子程序 … LCALL ADD1 ;调用加法子程序 … SUB1: MOV A,R3 ; CPL ACC.7 ;符号位取反 MOV R3,A ADD1:MOV A,R3 ACALL CMPT ;调用单字节求补子程序CMPT,加/减数求补 MOV R3,A MOV A,R2 ACALL CMPT ;调用CMPT ADD A,R3 JB OV,OVER ACALL CMPT1 ;调用单字节补转原子程序CMPT1 MOV R7,A OVER: RET … CMPT: … … RET CMPT1:… RET 本例中参数传递是通过累加器A完成的,主程序将被转换的数送到A中,子程序将A中的有符号数求补后存于A中,主程序再将结果放回原来的单元。 例4-4 4位BCD码的减法程序(自己阅读) 主程序通过地址寄存器R0和R1将参加运算的BCD码的地址传递给子程序,子程序则通过累加器将差传递给主程序。 4.3.3 查表程序设计 数据补偿、修正、计算、转换等各种功能,具有程序简单、执行速度快等优点。 查表就是根据自变量x,在表格中寻找y,使y=f(x)。 执行查表指令时,发出读程序存储器选通脉冲/PSEN。指令系统,给用户提供了两条极为有用的查表指令: ⑴ MOVC A,@A+DPTR ⑵ MOVC A,@A+PC 指令“MOVC A,@A+DPTR”完成把A中的内容作为一个无符号数与DPTR中的内容相加,所得结果为某一程序存储单元的地址,然后把该地址单元中的内容送到累加器A中。 指令“MOVC A,@A+PC”以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加后所得的数作为某一程序存储器单元的地址,根据地址取出程序存储器相应单元中的内容送到累加器A中。 指令执行完,PC的内容不发生变化,仍指向查表指令的下一条指令。 优点:预处理较少且不影响其它特殊功能寄存器的值,所以不必保护其它特殊功能寄存器的原先值 缺点:在于该表格只能存放在这条指令的地址X3X2X1X0以下的00~FFH之中。表格所在的程序空间受到了限制。表格长度不能超过256个字节,且表格只能存放于MOVC A,@A+PC指令以下的256个单元中。 例4-5 子程序的功能为:根据累加器A中的数x(0~9之间)查x的平方表y,根据x的值

文档评论(0)

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

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

1亿VIP精品文档

相关文档