- 1、本文档共49页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 汇编语言程序设计.ppt
子程序的末尾应有RET指令,以便正确返回主程序或调用程序的断点处,继续执行。子程序调用与返回示意见图4.15(a)。 (3)现场保护与恢复 除了在主程序中完成外,也常常在执行子程序的最前面完成保护现场,在返回之前完成恢复现场。例如: SUB1: PUSH ACC ;保护现场,先压入ACC PUSH DPH ;再压入DPH PUSH DPL ;后压入DPL …… ; POP DPL ;恢复现场,先弹出DPL POP DPH ;再弹出DPH POP ACC ;后弹出ACC RET * MCS-51单片机原理与应用 * 5.4.1 子程序的结构与参数传递 2 对于PC值的断点保护和恢复是自动完成的,即由执行LCALL、ACALL指令时将断点压入堆栈保护,由执行RET指令时将断点弹出堆栈恢复。 (4)子程序的参数传递形式 在调用子程序时,有时需要传送一些参数给子程序中相应的变量,这些数据称入口参数。子程序执行完后有时也要返回一些结果给调用程序,这些结果数据称出口参数。这种调用程序和子程序之间的信息传送称为参数传递。子程序的资源要为所有调用程序共享,其处理的数据多以变量的形式出现,参数传送方式有: ① 寄存器传送:传送数据保存在累加器或工作寄存器中被共享, 一般无需现场保护,传送速度快,参数少时用合适。参看例5.9。 * MCS-51单片机原理与应用 * 5.4.1 子程序的结构与参数传递 3 ② 数据指针传送:传送的数据Ri或DPTR,使这些指针指向要传送数据的RAM区的数据表,通过间接寻址方式传送数据,在参数多时使用比较合适。 ② 堆栈传送:以堆栈为中介,共享数据。注意不要与现场保护内容发生冲突,在子程序嵌套时常用。 * MCS-51单片机原理与应用 * 5.4.1 子程序的结构与参数传递 3 在主程序中,正对入口条件要安排相应指令,提供相应的入口数据;正对出口条件也要安排相应指令,处理子程序提供的出口数据。在需要保护现场的程序中,要正确地设置栈指针。为保证子程序的通用性,不宜采用立即数,尽量采用符号地址或寄存器;尽量采用相对转移指令,使指令执行不受地址影响。调用子程序节省了存储单元,但增加了运行时间。 例5.9 试用子程序方法重做例5.3。 解:算法同前,BCD码→ASCII码编成一子程序BTOA, 供调用。 操作功能:将A中低4位BCD码转换成ASCII,结果仍在A中。 入口条件:要转换的BCD码在A低4位。 出口条件:转换后的ASCII在A中。 汇编源程序如下: * MCS-51单片机原理与应用 * 5.4.2 子程序设计举例 1 ORG 0030H START: MOV 30H,#56H;(30H) = 56H,在30H存放两位BCD码 MOV A,30H ;A = 56H SWAP A ;A高低4位交换后,A = 65H ACALL BTOA ;调用BTOA子程序 MOV 31H,A ;高4位ASCII存入31H XCH A,30H ;A = 56H ACALL BTOA ;调用BTOA子程序 MOV 30H,A ;低4位ASCII存入30H SJMP $ BTOA: ANL A,#0FH ;屏蔽A中高4位,A= 05H ORL A,#30H ;A中高4位加30H,A= 35H RET END 在Keil μVision3上用F11跟踪运行,得到的结果如图4.12所示。 * MCS-51单片机原理与应用 * 5.4.2 子程序设计举例 2 例5.10 试用子程序方法编程:求片内RAM单元30H~3FH中存放的8位无符数之和,并按“高对低,低对高”方式存人40H和41H单元中,不考虑高8位进位。 解:把求多字节8位无符数之和编写为名为NBAD子程序,其算法流程如图5.9(a)。对NBAD子程序说明如下: 操作功能:求片内RAM区中存放的N个8位无符数之和。 * MCS-51单片机原理与应用 * 5.4.2 子程序设计举例 3 入口条件:长度N在R2中,参与运算单元的首址在R0中。 出口条件:运算结果单元的首址在R1中。 主程序只对出、入口条件进行处理,完整的汇编源程序如下: ORG 0030H START: MOV R0,#30H ;R0指向30H,源首址 MOV R1
文档评论(0)