基于AT89S51子程序的设计

在实际的程序设计中,常常将那些需多次应用的、完成相同的某种基本运算或操作的程序段从整个程序中独立出来,单独编成一个程序段,需要时通过子程序调用指令进行调用 。这样的程序段称为子程序 。
采用子程序能使整个程序结构简单,缩短程序的设计时间,减少占用的程序存储空间 。调用子程序的程序称为主程序或调用程序 。
子程序在程序设计中非常重要,应熟练掌握子程序的设计方法 。
1.子程序的设计原则和应注意的问题
在编写子程序时应注意以下问题:
(1)子程序的第一条指令的地址称为子程序的入口地址,该指令前必须有标号 。
(2)主程序调用子程序,是通过主程序或调用程序中的调用指令来实现的 。在指令集中,有如下两条子程序调用指令:
①绝对调用指令ACALLaddrll 。这是一条双字节指令,addrll指出了调用的目的地址,PC指针中16位地址中的高5位不变,这意味着被调用的子程序的首地址与绝对调用指令的下一条指令的高5位地址相同,即只能在同一个2KB区内 。
②长调用指令LCALLaddr16 。这是一条三字节指令,addr16为直接调用的目的地址,也就是说,子程序可放置在64KB程序存储器区的任意位置 。
【基于AT89S51子程序的设计】(3)子程序结构中必须用到堆栈,堆栈通常用来保护断点和现场保护 。
(4)子程序返回主程序时,最后一条指令必须是RET指令,它的功能是把堆栈中的断点地址弹出送人PC指针中,从而实现子程序返回主程序断点处继续执行主程序 。
(5)子程序可以嵌套,即主程序可以调用子程序,子程序又可以调用另外的子程序 。
2.子程序的基本结构
综上所述,典型的子程序的基本结构如下:
 
注意,上述子程序结构中,现场保护与现场恢复不是必需的,要根据实际情况而定 。

    推荐阅读