📄 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 + -