第4课 汇编语言程序设计知识(BH).ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.3.4 子程序的设计及其调用 1.子程序概念 通常把这些基本操作功能编制为程序段作为独立的子程序, 以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继续执行下去。 2. 子程序的调用 所谓调用子程序,暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。 调用子程序应注意: (1)子程序占用的存储单元和寄存器。 (2)参数的传递。 (3)保护现场和恢复现场。 (4)嵌套调用与递归调用。如图4-9所示。 调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加 2, “LCALL”加 3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。  下一页 子程序的调用与返回 返回 RET LCALL SUB SUB 子程序的嵌套调用与返回 LCALL A RET RET LCALL B 子程序A 子程序B 返回 子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数;当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数的传递。 参数的传递的方法: 1. 利用累加器或寄存器 2. 利用存储器 3. 利用堆栈 保护现场和恢复现场:子程序执行过程中,常常要用到一些通用单元,如R0~R7,A,DPTR,PSW等。 保护现场:子程序要用到这些单元,因此把主程序中这些单元内容保存起来,通常用压栈操作。 恢复现场:执行完子程序返回主程序后,要恢复这些单元内容,通常用出栈操作。 返回 2.子程序设计举例 例4.3.12 编程实现F=X2 +Y2,设F,X,Y分别存于内部RAM的DTA,DTB,DTC单元中。例4.3.9 DTA EQU 30H DTB EQU 31H DTC EQU 32H 程序清单: ORG 0100H START: MOV A, DTA ACALL SQR MOV R1, A ;A X ;求X平方 ;暂存于R1 MOV DTC,A MOV A, DTB ACALL SQR ADD A, R1 SJMP $ SQR: MOV DPTR, #TAB MOVC A, @A+DPTR RET TAB: DB 0,1,4,9,16,25,36,49,64,81 END ORG 1000H ;A Y ;求Y平方 ;求平方和 ;存入DTC单元 ;查表子程序 在这种方式中,要把所要传送的参数存放在累加器A或工作寄存器R0~R7中。这就要在调用子程序之前,在主程序中将子程序所需要的参数送入累加器A或指定的工作寄存器中。而在子程序执行时,将参数从指定单元中取出,执行运算;子程序结束时,再用同样方法将结果传送回主程序。 当传送量比较大时,可以利用存储器实现参数的传递。在这种方式中,事先建立一个参数表,用指针指示参数表所在位置。 当参数表建立在内部RAM时,用R0或R1做地址指针;当参数表建立在外部RAM时,用DPTR做地址指针。 例4-3-13 将R0和R1指向的内部RAM 中两个3字节无符号整数相加,结果送到由R0指向的内部RAM中。入口时,R0和R1分别指向加数和被加数的低位字节;出口时,R0指向结果的高位字节。低字节在高地址,高字节在低地址。4-3-10 ORG 0100H NADD:MOV R7,#3 ;三字节加法 CLR C ; NADD1:MOV A,@R0 ;取加数低字节 ADDC A,@R1 ;被加数低字节加A MOV @R0,A ; DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET 4.3.5 位操作程序 【例4.9】 编写一程序,实现图4-12中的逻辑运算电路。其中P3.1、P1.1、P1.0分别是单片机端口线上的信息,RS0、RS1是PSW寄存器中的两个标志位,30H、31H是两个位地址,运

文档评论(0)

189****6140 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档