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