如何在MAC-1汇编程序中调用递归函数?
在c ++中你会做类似的事情:
int func(int num)
{
if(num == 0) return 1;
return num * func(num-1);
}
我知道如何使用
调用函数CALL
以及如何在堆栈上加载参数并接受它,我也有自己做的乘法指令,所以
MUL 6
会做:
ac = ac * 6
但我无法弄清楚如何调用递归。
答案 0 :(得分:2)
我无法弄清楚如何调用递归
没有太大的意义。你只需调用你所在的同一个函数,并保存当前调用的所有内容。
例如(伪代码):
n=3, CALL func
(n==3): PUSH n, n--, CALL func
(n==2): PUSH n, n--, CALL func
(n==1): PUSH n, n--, CALL func
(n==0): ac=1, RET
POP n, ac *= n, RET
POP n, ac *= n, RET
POP n, ac *= n, RET