单片机原理与应用第4章 汇编语言程序设计.pptVIP

单片机原理与应用第4章 汇编语言程序设计.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.5 子程序设计 在实际程序中,常常会多次进行一些相同的计算和操作。如数制转换、函数式计算等。如果每次都从头开始编制一段程序,不仅麻烦,而且浪费存储空间。因此对一些常用的程序段,以子程序的形式,事先存放在存储器的某一区域,当主程序在运行过程中,需要用子程序时,只要执行调用子程序的指令,使程序转至子程序。子程序处理完毕,返回主程序,继续进行以后的操作。 调用子程序有几个优点: (1)避免对相同程序段的重复编制。 (2)简化程序的逻辑结构,同时也便于程序调试。 (3)节省存储器空间。 MCS-51指令系统中,提供了两条调用子程序指令ACALL、LCALL和一条返回主程序的指令RET。 * 4.5.1 工作寄存器或累加器传递参数 此方法是把入口参数或出口参数存放在工作寄存器或累加器中。使用这种方法程序最简单,运算速度也最高。它的缺点是工作寄存器数量有限,不能传递太多的数据;主程序必须先把数据送到工作寄存器;参数个数固定,不能由主程序任意改变。 例4-20 请编出能把20H单元内两个BCD数变换成相应ASCII码并放在21H(高位BCD数的ASCII码)和22H(低位BCD数的ASCII码)单元的程序。 根据ASCII表,0~9的BCD数和它们的ASCII码之间仅相差30H。因此,仅需把20H单元中两个BCD数拆开,分别和30H相加就行了。 * 4.5.1 工作寄存器或累加器传递参数 ORG 0000H ASCH:MOV R0,#22H MOV @R0,#00H MOV A,20H XCHD A,@R0 ORL 22H,#30H SWAP A ORL A,#30H MOV 21H,A SJMP $ END * 4.5.2 用指针寄存器传递参数 由于数据一般存放在存储器中,而不是工作寄存器中,故可用指针来指示数据的位置,这样可以大大节省传递数据的工作量,并可实现可变长度运算。一般如参数在内部RAM中,可用R0或R1作指针。可变长度运算时,可用一个寄存器来指出数据长度,也可在数据中指出其长度(如使用结束标记符)。 例4-21 将R0和R1指出的内部RAM中两个3字节无符号整数相加,结果送R0指出的内部RAM中。入口时,R0、R1分别指向加数和被加数的低位字节,出口时R0指向结果的高位字节。利用MCS-51的带进位加法指令,可以直接编写出程序。 * 4.5.2 用指针寄存器传递参数 ORG 0000H NADD: MOV R7,#3 CLR C NADD1:MOV A,@R0 ADDC A,@R1 MOV @R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET END * 4.5.3 用堆栈传递参数 堆栈可以用于传递参数。调用时,主程序可用PUSH指令把参数压入堆栈中。之后子程序可按堆栈指针访问堆栈中的参数,同时可把结果参数送回堆栈中。返回主程序后,可用POP指令得到这些结果参数。这种方法的优点是简单,能传递大量参数,不必为特定的参数分配存储单元。使用这种方法时,由于参数在堆栈中,故大大简化了中断响应时的现场保护。 * 4.5.3 用堆栈传递参数 例4-22 一位十六进制数转换为ASCII码子程序。 子程序HASC把堆栈中的一位十六进制数变成ASCII码。它先从堆栈中读出表格中存放的数据,然后用它的低4位去访问一个局部的16项的ASCII码表,把得到的ASCII码放回堆栈中,然后返回。它不改变累加器的值。可以按不同的情况调用这个程序。 ORG 0000H HASC:MOV R0,SP DEC R0 DEC R0 XCH A,@R0

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档