x86汇编中的递归函数

时间:2011-05-30 01:57:46

标签: assembly

 int stirling(int n,int k)
  {

     if((n==0)&&(k==0))
           return 1;

     else if((n>=1)&&(k>0))
             return stirling(n-1,k-1)-(n-1)*stirling(n-1,k);

     else if(n>0)
            return 0;

    return 0;           
  }

我试图在x86程序集中编写该函数,但我无法弄清楚如何调用函数return stirling(n-1,k-1)-(n-1)*stirling(n-1,k);

任何人有想法或可以帮助我这样做吗?

感谢。

1 个答案:

答案 0 :(得分:2)

与调用此函数的任何其他函数没有什么不同。绝对没有什么特别的递归,只需像往常一样实现C.

n和k基本上是局部变量,您需要本地存储这些变量的当前实例。堆栈是一个很好的地方。或者在调用任何函数时保留在堆栈上的寄存器。 (这里再说一点,没有什么特别的,解决方案与递归无关,而是C的标准实现。)

ldr r0,[sp-#N_OFFSET]
sub r0,#1
ldr r1,[sp-#K_OFFSET]
sub r1,#1
bl stirling
ldr r1,[sp-#N_OFFSET]
sub r1,#1
sub r4,r0,r1
ldr r0,[sp-#N_OFFSET]
sub r0,#1
ldr r1,[sp-#K_OFFSET]
push r4
bl stirling
pop r4
signed multiply r0=r4*r0
clean up stack for return
bx lr

不,那不是x86汇编程序,我会让你翻译成x86。如果这是作业,请标记为这样或提及它不是问题中的作业。