MAC-1程序集递归

时间:2015-01-18 12:31:30

标签: 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

但我无法弄清楚如何调用递归。

1 个答案:

答案 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