MAC-1 汇编递归
MAC-1 assembly recursion
如何在 MAC-1 汇编程序中调用递归函数?
在 C++ 中你会做这样的事情:
int func(int num)
{
if(num == 0) return 1;
return num * func(num-1);
}
我知道如何使用
调用函数
CALL
以及如何把参数压栈取栈,我也有自己做的乘法指令,所以
MUL 6
会做:
ac = ac * 6
但我不知道如何调用递归。
I cant figure out how to call recursive
没什么可说的。您只需调用您所在的同一函数,然后将当前调用的所有内容保存在堆栈上。
例如(伪代码):
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
如何在 MAC-1 汇编程序中调用递归函数?
在 C++ 中你会做这样的事情:
int func(int num)
{
if(num == 0) return 1;
return num * func(num-1);
}
我知道如何使用
调用函数CALL
以及如何把参数压栈取栈,我也有自己做的乘法指令,所以
MUL 6
会做:
ac = ac * 6
但我不知道如何调用递归。
I cant figure out how to call recursive
没什么可说的。您只需调用您所在的同一函数,然后将当前调用的所有内容保存在堆栈上。
例如(伪代码):
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