;计算阶乘 (Fact.asm)
include irvine32.inc
.code
main PROC
push 5 ;计算5!,将参数保存在栈中
call Factorial ;计算阶乘(EAX)
call WriteDec ;显示结果
call Crlf ;
call WaitMsg ;
exit ;
main ENDP
;-----------------------------------------------
Factorial PROC
;计算阶乘
;接收[ebp+8]=n,需计算的数字
;返回:eax=n!
;-----------------------------------------------
push ebp
mov ebp,esp ;
mov eax,[ebp+8] ;获取n
cmp eax,0 ;是,继续
ja L1 ;否,返回1
mov eax,1 ;
jmp L2 ;
L1:
dec eax ;
push eax ;计算fact(n-1)
call Factorial ;
;每一次递归调用返回时
;都要执行下面的指令
ReturnFact:
mov ebx,[ebp+8] ;获取n
mul ebx ;EDX:EAX=EAX*EBX
L2:
pop ebp ;返回EAX
ret 4 ;清除堆栈
Factorial ENDP
END main
048.计算阶乘函数
最新推荐文章于 2023-03-13 07:54:22 发布