- 1、本文档共84页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§2.11 汇编语言程序设计方法 四.子程序设计和参数传递方法 1.子程序的基本结构 保护现场:保护子程序将要用到的有关寄存器的内容,使得子程序调用更方便安全。一般可将需要保护的内容压入堆栈,或采用改变工作寄存器区。 程序主体:是子程序为完成有关功能而编制的程序段。 恢复现场:若保护现场是用压入堆栈,则恢复现场要注意先进后出。 返回:采用返回指令将程序返回到原先调用子程序的地方。 ? 开始 保护现场 程序主体 恢复现场 返回 §2.11 汇编语言程序设计方法 三.子程序设计和参数传递方法 2.子程序的参数 入口参数:子程序入口地址,被处理数据存放的位置,影响哪些寄存器。 出口参数:有关结果数据的存放位置,有关指针的内容。 3.用工作寄存器或累加器来传递参数 例5.7 将十六进制数的ASCII码转换成十六进制数。 1)根据ASCII码与16进制数之间的关系,程序框图如下:图6-6 2)被转换的数据在R0中。 3)编制程序 0~9 ? 30H~39H;A~F ? 41H~46H ? §2.11 汇编语言程序设计方法 ASCH:PUSH PSW PUSH ACC CLR C MOV A, R0 SUBB A,#30H CJNE A,#10,$+3 JC AH10 SUBB A,#07 AH10: MOV R0,A POP ACC POP PSW RET ? §2.11 汇编语言程序设计方法 三.子程序设计和参数传递方法 4.用存储器来传递参数 例5.8 将(R0)和(R1)指出的内部RAM中两个3字节无符号数相加,结果送(R0)指出的内部RAM中。 : R0— R1— 入口参数: (R0)和(R1)分别指向加数和被加数的低位字节的内存地址。 出口参数: (R0)指向结果的高位字节的内存地址。 §2.11 汇编语言程序设计方法 编制程序如下: NADD: PUSH ACC PUSH PSW MOV R7, #3 CLR C NADD1: MOV A, @R0 ADDC A, @R1 MOV @R0, A DEC R0 DEC R1 DJNZ R7, NADD1 INC R0 POP PSW POP ACC RET ? §2.11 汇编语言程序设计方法 三.子程序设计和参数传递方法 5.用堆栈来传递参数 例5.9 将一位十六进制数转换成ASCII码 入口参数:调用该子程序前,已将一位16进制数压入堆栈。 出口参数:将转换好了的ASCII码存放在原来16进制数的堆栈位置。 HASC: MOV R0, SP DEC R0 DEC R0 XCH A, @R0 ANL A, #0FH ADD A, #2 MOVC A, @A+PC XCH A, @R0 RET DB ‘0123456789’ DB ‘ABCDEF’ ? 7 PCL PCH (SP) (SP+1) (SP+1) §2.11 汇编语言程序设计方法 三.子程序设计和参数传递方法 5.用堆栈来传递参数 例5.10 把内部RAM中50H,51H的双字节十六进制数转换成4位ASCII码,存放于(R1)指向的4个内部RAM单元。数据存放的方法如下图所示: ? 50H 51H (R1) §2.11 汇编语言程序设计方法 编制程序如下:利用例9
文档评论(0)