048.计算阶乘函数

;计算阶乘	(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值