更正:以下所指ebx应改为eax。
EBX指“基地址”寄存器,在内存寻址时存放基地址;、
EAX是累加器(accumulator),一般用来保存函数的返回值。
首先说说递归的实现和栈的关系吧,这里引入一个著名的尾递归-斐波那契数列的实现,我用的是C语言编写该函数,
int Fib(int n)
{
if(i==1||i==2)
return 1;
return Fib(i-1)+Fib(i-2);
}
我们不妨把函数Fib和return语句中调用的函数看作是不同的函数(只是具有了相同的名称),那么就涉及到了函数调用的知识,我们知道,在函数调用的过程中(比如A函数中调用了B函数),编译器就会把A函数的参数,局部变量及返回地址压入栈中存储,再进行B函数的调用。这里用汇编的思想解释会比较生动,如下图所示,假设传入参数为5