⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n阶乘.asm

📁 用汇编语言实现N!的运算
💻 ASM
字号:
STACKSG	SEGMENT	STACK'S'
	DW 128	DUP('ST')
SACKSG	ENDS

DATA	SEGMENT
N_VAL	DW	3					;定义N的值
RESULT	DW?						;结果
DATA	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA,SS:STACKSG
FRAME	STRUC						;定义帧结构
SAV_BP	DW?						;保存BP的值
SAV_CS_IP DW 2 DUP(?)					;保存返回地址
N	DW?						;当前N的值
RESULT_ADDR	DW?					;结果地址
FRAME	ENDS
MAIN	PROC	FAR
	MOV	AX,DATA
	MOV	DS,AX
	LEA	BX,RESULT
	PUSH	BX					;结果地址入栈
	PUSH	N_VAL					;N值入栈
	CALL	FAR PTR FACT				;调用子程序
R1:	MOV	AX,4C00H
	INT	21
MAIN	ENDP

FACT	PROC	FAR
	PUSH	BP
	MOV	BP,SP					;BP指向帧基地址
	PUSH	BX
	PUSH	AX
	MOV	BX,[BP].RESULT_ADDR			;取帧中的结果地址
	MOV	AX,[BP].N				;取帧中的N值
	CMP	AX,0
	JE	DONE
	PUSH	BX					;为下一次调用压入结果地址
	DEC	AX
	PUSH	AX					;为下一次调用压入(N-1)的值
	CALL	FAR PTR FACT
R2:	MOV	BX,[BP].RESULT_ADDR			;取结果地址
	MOV	AX,[BX]					;取中间结果(N-1)!
	MUL	[BP].N					;N*(N-1)
	JMP	SHORT RETURN
DONE:	MOV	AX,1					;0!=1
RETURN:	MOV	[BX],AX					;存中间结果
	POP	AX
	POP	BX
	POP	BP
	RET	4
FACT	ENDP
CODE	ENDS
	END	MAIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -