📜  子例程,子例程嵌套和堆栈存储器

📅  最后修改于: 2021-06-28 15:31:40             🧑  作者: Mango

1.子程序–
在程序中重复使用的一组指令可以称为子例程。该指令只有一个副本存储在存储器中。当需要子例程时,可以在执行特殊程序期间将其多次调用。调用子例程指令将调用子例程。返回子例程时应格外小心,因为可以从内存的其他位置调用子例程。

PC的内容必须通过调用子例程指令保存,以正确返回到调用程序。

图–程序中子程序的过程

子例程链接方法是计算机调用并返回子例程的一种方式。子例程链接的最简单方法是将返回地址保存在特定位置,例如可以称为链接寄存器调用子例程的寄存器。

2.子例程嵌套–
子例程嵌套是一种常见的编程实践,其中一个子例程调用另一个子例程。

图–子例程调用另一个子例程

从上图中,假设子程序1调用子程序2时,子程序2的返回地址应保存在某个地方。因此,如果链接寄存器存储了子程序1的返回地址,则该地址将被子程序2的返回地址(破坏/覆盖)。因为最后一个调用的子程序是要返回的第一个子程序(后进先出格式)。因此,堆栈数据结构是存储子例程的返回地址的最有效方法。

图–子例程的返回地址存储在堆栈存储器中

3.堆栈内存–
堆栈是一种基本的数据结构,可以在内存中的任何位置实现。它可以用来存储以后在程序执行中可能需要的变量。在堆栈中,第一个放入的数据将最后从堆栈中取出。因此,最后添加的数据将是第一个从堆栈中取出的数据(后进先出)。

图–具有数据A,B和C的堆栈存储器

因此,从上图中开始,先添加A,然后添加B&C。先删除C,然后再删除B&A。