DATA SEGMENT
INPUT_TIPS DB 10, 13, "INPUT THE N (0~8): $"
OUTPUT_TIPS DB 10, 13, "THE N! IS : $"
DATA ENDS
;--------------------------------------------
STACK SEGMENT
;INPUT STACK SEGMENT CODE HERE
DB 256 DUP(?)
STACK ENDS
;--------------------------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX, DATA
MOV DS, AX
;----------------------------------
MOV DX, OFFSET INPUT_TIPS
MOV AH, 9 ;显示字符串.
INT 21H
MOV AH, 1 ;输入到 AL
INT 21H
CMP AL, '0'
JB EXIT
CMP AL, '8'
JA EXIT
SUB AL, '0'
MOV AH, 0
CMP AX, 0 ;是 0 吗?
JNZ CMP_1
MOV AX, 1 ;是 0 就去显示 1
JMP DISP
CMP_1:
CMP AX, 1 ;是 1 吗?
JZ DISP ;是 1 就去显示 1
MOV CX, AX ;非 0 非 1,就是其它数字,那么
CALL FACTOR ;就用递归的方法去计算阶乘
;----------------------------------
DISP:
PUSH AX
MOV DX, OFFSET OUTPUT_TIPS
MOV AH, 9 ;显示字符串.
INT 21H
POP AX
MOV BX, 10
MOV CX, 0
L1:
MOV DX, 0
DIV BX
PUSH DX
INC CX
AND AX, AX
JNZ L1
L2:
POP DX
ADD DL, 48
MOV AH, 2
INT 21H
LOOP L2
;----------------------------------
EXIT:
MOV AH, 4CH
INT 21H
;==================================
FACTOR PROC NEAR ;阶乘.
DEC CX ;CX=2~8
CMP CX, 1 ;=1 ?
JE FACTOR_E ;为1就退出
PUSH CX ;非1压栈保存
CALL FACTOR ;递归调用,把CX一次次的减一
POP CX ;弹出一个个递减的数值
MUL CX ;乘到AXc语言用递归函数求n的阶乘
FACTOR_E:
RET ;AX=(2~8)!
FACTOR ENDP ;简洁明了,无与伦比
;==================================
CODE ENDS
END START
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论