Factorial proc
push ebp
mov ebp,esp
mov eax,[ebp+8]
cmp eax,0
ja L1
mov eax,1
jmp L2
L1: dec eax
push eax
call Factorial
ReturnFact:
mov ebx,[ebp+8]
mul ebx
L2: pop ebp
ret 4
Factorial endp
新手求下教递归问题
上面的是一个价乘的递归
不是如果eax等于0的话就转到L2处返回了,而当eax不等于0时就call回去调用本程序自身了吗?
哪ReturnFact处是什么时候被使用到的呢?又是如何使用的呢?
------解决方案--------------------------------------------------------
当Factorial被调用时,call指令后面一条指令的偏移地址被压入堆栈,也就是标号ReturnFact:.
当eax等于0的话就转到L2处,先执行pop ebp指令,恢复ebp的值,接着执行ret 4指令返回,ret指令从堆栈中弹出地址
(弹出的是标号ReturnFact的地址)并送到指令指针寄存器中,CPU总是执行指令指针寄存器EIP所指向的内存地址处的指
令这样就执行了ReturnFact.
初学不对之处请原谅!!!