首页 理论教育 子程序设计:参数传递与堆栈技术

子程序设计:参数传递与堆栈技术

时间:2023-10-22 理论教育 版权反馈
【摘要】:保护现场通常在进入子程序的开始时,由堆栈完成。例如:3.子程序的参数传递主程序在调用子程序时传送给子程序的参数和子程序结束后送回主程序的参数统称为参数传递。

子程序设计:参数传递与堆栈技术

子程序:能够完成确定任务,并能为其他程序反复调用的程序段称为子程序。

特点:子程序可以多次重复使用,避免重复性工作,缩短整个程序,节省程序存储空间,有效地简化程序的逻辑结构,便于程序调试。

主程序:调用子程序的程序称为主程序或调用程序。

1.子程序的调用与返回

主程序调用子程序的过程:在主程序中需要执行这种操作的地方执行一条调用指令(lcall或acall),转到子程序,而完成规定的操作后,再在子程序最后应用ret返回指令返回到主程序断点处,继续执行下去。

(1)子程序的调用

1)子程序的入口地址:子程序的第一条指令地址称为子程序的入口地址,常用标号表示。

2)程序的调用过程:单片机收到acall或lcall指令后,首先将当前的pc值(调用指令的下一条指令的首地址)压入堆栈保存(低8位先进栈,高8位后进栈),然后将子程序的入口地址送入pc,转去执行子程序。

(2)子程序的返回

1)主程序的断点地址:子程序执行完毕后,返回主程序的地址称为主程序的断点地址,它在堆栈中保存。

2)子程序的返回过程:子程序执行到ret指令后,将压入堆栈的断点地址弹回给pc(先弹回pc的高8位,后弹回pc的低8位),使程序回到原先被中断的主程序地址(断点地址)去继续执行。

注意:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。reti指令与ret指令相似,区别在于ret是从子程序返回,reti是从中断服务程序返回。

2.保存与恢复寄存器内容

(1)保护现场 主程序转入子程序后,保护主程序的信息不会在运行子程序时丢失的过程称为保护现场。保护现场通常在进入子程序的开始时,由堆栈完成。例如:

978-7-111-46285-9-Chapter03-89.jpg

(2)恢复现场 从子程序返回时,将保存在堆栈中的主程序的信息还原的过程称为恢复现场。恢复现场通常在从子程序返回之前将堆栈中保存的内容弹回各自的寄存器。例如:

978-7-111-46285-9-Chapter03-90.jpg

3.子程序的参数传递

主程序在调用子程序时传送给子程序的参数和子程序结束后送回主程序的参数统称为参数传递。

入口参数:子程序需要的原始参数。主程序在调用子程序前将入口参数送到约定的存储器单元(或寄存器)中,然后子程序从约定的存储器单元(或寄存器)中获得这些入口参数。

出口参数:子程序根据入口参数执行程序后获得的结果参数。子程序在结束前将出口参数送到约定的存储器单元(或寄存器)中,然后主程序从约定的存储器单元(或寄存器)中获得这些出口参数。

传送子程序参数的方法:

1)应用工作寄存器或累加器传递参数。优点是程序简单、运算速度较快,缺点是工作寄存器有限。(www.xing528.com)

2)应用指针寄存器传递参数。优点是能有效节省传递数据的工作量,并可实现可变长度运算。

3)应用堆栈传递参数。优点是简单,能传递的数据量较大,不必为特定的参数分配存储单元

978-7-111-46285-9-Chapter03-91.jpg

图3-16 子程序的嵌套

4)利用位地址传送子程序参数。

4.子程序的嵌套

在子程序中若再调用子程序,称为子程序的嵌套。mcs51系列单片机允许多重嵌套。如图316所示。

5.编写子程序时应注意的问题

1)子程序的入口地址一般用标号表示,标号习惯上以子程序的任务命名。例如,延时子程序常以delay作为标号。

2)主程序通过调用指令调用子程序,子程序返回主程序之前,必须执行子程序末尾的一条返回指令ret。

3)单片机能自动保护和恢复主程序的断点地址。但对于各工作寄存器、特殊功能寄存器和内存单元的内容,则必须通过保护现场和恢复现场实现保护。

978-7-111-46285-9-Chapter03-92.jpg

图3-17 例3-10 程序流程

4)子程序内部必须使用相对转移指令,以便子程序可以放在程序存储器64kb存储空间的任何子域并能被主程序调用,汇编时生成浮动代码。

5)子程序的参数传递方法同样适用于中断服务程序。

例3-10】 编制程序实现ca2b2,(ab均为1位十进制数)。

解:计算某数的二次方可采用查表的方法实现,并编写成子程序。只要两次调用子程序并求和,就可得运算结果。设ab分别存放于片内ram的30h,31h两个单元中,结果c存放于片内ram的40h单元。程序流程如图3-17所示。

主程序如下:

978-7-111-46285-9-Chapter03-93.jpg

求二次方子程序如下(采用查二次方表的方法):

978-7-111-46285-9-Chapter03-94.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈