从上述N!的递归子程序中可以看出,由于使用了STRUC伪操作,程序的结构更加清晰,也避免了计算参量地址时可能出现的错误。
左面给出了不用STRUC伪操作编制的求N!的递归子程序。
在编制子程序时,特别是在编制嵌套或递归子程序时,堆栈的使用是十分频繁的。在这里顺便说明一下,在堆栈使用过程中,应该注意有关堆栈溢出的问题。
由于堆栈区域是在堆栈定义时就确定了的,因而堆栈工作过程中有可能产生溢出。堆栈溢出有两种情况可能发生:如堆栈已满,但还想再存入信息,这种情况称为堆栈上溢;另一种情况是,如堆栈已空,但还想再取出信息,这种情况称为堆栈下溢。不论上溢或下溢,都是不允许的。因此在编制程序时,如果可能发生堆栈溢出,则应在程序中采取保护措施。这可以通过给SP规定上、下限,在进栈或出栈操作前先做SP和边界值的比较,如溢出则作溢出处理,以避免破坏其他存储区或使程序出错的情况发生。
|