题目为编写一个子程序名为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
想请教一下为什么第一种成功了,而第二种失败呢?