第四章汇编程序设计详解.pptVIP

  • 6
  • 0
  • 约 38页
  • 2016-03-09 发布于湖北
  • 举报
二、现场保护与恢复 在子程序执行过程中常常要用到单片机的一些通用单元,如工作寄存器R0~R7、累加器A、数据指针DPTR,以及有关标志和状态等。而这些单元中的内容在调用结束后的主程序中仍有用,所以需要进行保护,称为现场保护。在执行完子程序,返回继续执行主程序前恢复其原内容,称为现场恢复。保护与恢复的方法有以下两种: 在主程序中实现; 在子程序中实现。 1、在主程序中实现 示例如下: PUSH PSW ;保护现场 PUSH ACC ; PUSH B ; MOV PSW,#10H ;换当前工作寄存器组 LCALL addr16 ;子程序调用 POP B ;恢复现场 POP ACC ; POP PSW ; … … 其特点是结构灵活。 2、在子程序中实现 示例如下: SUB1:PUSH PSW ;保护现场 PUSH ACC ; PUSH B ; … … MOV PSW,#10H ;换当前工作寄存器组 … … POP B ;恢复现场 POP ACC ; POP PSW ; RET 其特点是程序规范、清晰。 注意,无论哪种方法保护与恢复的顺序要对应。 三、参数传递 由于子程序是主程序的一部分,所以,在程序的执行时必然要发生数据上的联系。在调用子程序时,主程序应通过某种方式把有关参数(即子程序的入口参数)传给子程序,当子程序执行完毕后,又需要通过某种方式把有关参数(即子程序的出口参数)传给主程序。 1、利用累加器或寄存器 在这种方式中,要把预传递的参数存放在累加器A或工作寄存器R0~R7中。即在主程序调用子程序时,应事先把子程序需要的数据送入累加器A或指定的工作寄存器中,当子程序执行时,可以从指定的单元中取得数据,执行运算。反之,子程序也可以用同样的方法把结果传送给主程序。 例 编写程序,实现c=a2+b2 。设a,b,c分别存于通用寄存器组1的R0 、 R1 、 R2 三个单元中。程序段如下: START: SETB RS1 CLR RS0 ;选择1组寄存器 MOV A,R0 ;取a ACALL SQR ;调用查平方表 MOV R3,A ;a2 暂存于R3中 MOV A, R1 ;取b ACALL SQR ;调用查平方表 ADD A,R3 ;a2+b2 存于A中 MOV R2,A ;存结果 SJMP $ SQR :MOV DPTR,#TAB ;子程序 MOVC A,@A+DPTR ;取得表值由A内容决定 RET TAB :DB 0,1,4,9,16 ,25,36,49,64,81 2、利用存储器 当传送的数据量比较大时,可以利用存储器实现参数的传递。在这种方式中,事先要建立一个参数表,用指针指示参数表所在的位置。当参数表建立在内部RAM时,用R0或R1作参数表的指针。当参数表建立在外部RAM时,用DPTR作参数表的指针。 实现程序: NADD: MOV R7,#3 ;三字节加法 CLR C NADD1: MOV A,@R0 ;取加数低字节 ADDC A,@R1 ;被加数低字节加A MOV @R0,A ; DEC R0 DEC R1 DJNZ R

文档评论(0)

1亿VIP精品文档

相关文档