首页 新闻 会员 周边

汇编语言两种方法保存调用者栈帧的不同

0
悬赏园豆:50 [待解决问题]

题目为编写一个子程序名为fact,并用堆栈传递参数的方法求一个数的阶乘

主程序中片段如下
...
push eax
call fact
pop eax
...

以下是我的两种编写方式,主要不同之处在于ebp与eax进栈顺序的不同
1.
fact proc

   push eax          ;eax先进栈,ebp后进栈
   push ebp
   mov ebp,esp
   mov eax,[ebp+10]

   cmp eax,0         ;等于0直接将ax赋值1
   jne fact1            ;不等于0的话进入递归
   inc eax
   jmp fact2

fact1: dec eax
push eax
call fact ;递归调用子程序
pop eax
mul word [ebp+10]

fact2: mov [ebp+10],eax
pop ebp
pop eax
ret

fact proc

   push ebp            ;ebp先进栈,eax后进栈
   mov ebp,esp
   push eax
   mov eax,[ebp+6]

   cmp eax,0
   jne fact1            ;不等于0的话进入递归
   inc eax
   jmp fact2

fact1: dec eax
push eax
call fact ;递归调用子程序
pop eax
mul word [ebp+6]

fact2: mov [ebp+6],eax
pop eax
pop ebp
ret

想请教一下为什么第一种成功了,而第二种失败呢?

WangWangDui的主页 WangWangDui | 初学一级 | 园豆:152
提问于:2021-10-31 19:12
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册