当前位置: 代码迷 >> 汇编语言 >> 新手求教递归有关问题
  详细解决方案

新手求教递归有关问题

热度:6496   发布时间:2013-02-26 00:00:00.0
新手求教递归问题
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.

初学不对之处请原谅!!! 
  相关解决方案