首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

新手求教递归有关问题

2012-03-15 
新手求教递归问题Factorial procpush ebpmov ebp,espmov eax,[ebp+8]cmp eax,0ja L1mov eax,1jmp L2L1: de

新手求教递归问题
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.

初学不对之处请原谅!!! 

热点排行