问答题 在某些计算机中,调用子程序的方法是这样实现的:转子指令将返回地址存入子程序的第一个字单元,然后从第二个字单元开始执行子程序,请回答下列问题:
1.为这种方法设计一条从子程序转到主程序的返回指令。
2.在这种情况下,怎么在主、子程序间进行参数的传递?
3.上述方法是否可用于子程序的嵌套?
4.上述方法是否可用于子程序的递归(即某个子程序自己调用自己)?
5.如果改为用堆栈方法,是否可实现(4)所提出的问题?
【正确答案】
【答案解析】(1)返回指令常称为零地址指令,返回地址保存在堆栈中,执行返回指令时自动从堆栈中弹出。而目前返回地址是保存在子程序第一个单元中,所以此时返回指令不能再是零地址指令了,而应当是一地址指令。可如下设计:
JMP
@
子程序首址
间接寻址可找到返回地址,然后无条件转移到返回的位置。
(2)在这种情况下,可利用寄存器或主存单元进行主、子程序之间的参数传递。
(3)可以用于子程序的嵌套(多重子程序),因为每个返回地址都存放在调用的子程序的第一个单元中。
(4)不可以用于子程序的递归,因为当某个子程序自己调用自己时,子程序的第一个单元的内容将被破坏。
(5)如果改为堆栈方法.可以实现子程序的递归,因为堆栈具有先进后出的功能。