【摘要】:子程序是具有某种功能的独立程序段,从结构上看,它与一般的程序没有多大的区别,唯一的区别是在子程序末尾有一条子程序返回指令,其功能是当子程序执行完后能自动返回到主程序中去。当子程序执行完毕,即将返回主程序之前,再将这些内容取出,送到累加器或原来的工作寄存器中,这一过程称为恢复现场。另外,子程序中如含有转移指令,应尽量用相对转移指令。
子程序是具有某种功能的独立程序段,从结构上看,它与一般的程序没有多大的区别,唯一的区别是在子程序末尾有一条子程序返回指令(RET),其功能是当子程序执行完后能自动返回到主程序中去。
在编写子程序时要注意以下几点:
1)要给每个子程序赋一个名字,实际上是子程序入口地址的符号。
2)明确入口条件、出口条件。所谓入口条件,表明子程序需要哪些参数,放在哪个寄存器和哪个内存单元;出口条件则表明于程序处理的结果是如何存放的。(www.daowen.com)
3)注意保护现场和恢复现场。在执行子程序时,可能要使用累加器或某些工作寄存器。而在调用子程序之前,这些寄存器中可能存放有主程序的中间结果,这些中间结果在主程序中仍有用,这就要求在子程序使用累加器和这些工作寄存器之前,要将其中的内容保护起来,即保护现场。当子程序执行完毕,即将返回主程序之前,再将这些内容取出,送到累加器或原来的工作寄存器中,这一过程称为恢复现场。
保护现场通常用堆栈来进行。在需要保护现场的情况下,编写子程序时,要在子程序的开始部分使用进栈指令PUSH,把需要保护的寄存器内容压入堆栈。当子程序执行完后,在返回指令RET的前面应使用出栈指令POP,把堆栈中保护的内容弹出到原来的寄存器,要注意,由于堆栈操作是“先入后出”。因此,先压入堆栈的参数应该后弹出,才能保证恢复原来的数据。
为了做到子程序有一定的通用性,子程序中的操作对象,尽量用地址或寄存器形式,而不用立即数形式。另外,子程序中如含有转移指令,应尽量用相对转移指令。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
有关单片机原理及接口技术的文章