概述
用汇编语言编一程序从键盘上接收一个数值 N,利用递归方法求 N!,并将结果在屏幕显示。
提问时间:2011-12-15 19:15 | 悬赏分:5 |
;============================================
最佳答案:
;为了简化,数字就不弄太大的了。
;如果把 N! 限定在 65535 之内,N 就不能大于 8。
;其实,让计算机来算更大的数,也是可以的,只不过是时间问题。
;程序如下:
;--------------------------------------------
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 ;乘到AX
FACTOR_E:
RET ;AX=(2~8)!
FACTOR ENDP ;简洁明了,无与伦比
;==================================
CODE ENDS
END START
;--------------------------------------------
程序运行时的屏幕显示如下:
C:MASM>JIE_CH
INPUT THE N (0~8): 0
THE N! IS : 1
C:MASM>JIE_CH
INPUT THE N (0~8): 2
THE N! IS : 2
C:MASM>JIE_CH
INPUT THE N (0~8): 3
THE N! IS : 6
C:MASM>JIE_CH
INPUT THE N (0~8): 5
THE N! IS : 120
C:MASM>JIE_CH
INPUT THE N (0~8): 4
THE N! IS : 24
C:MASM>JIE_CH
INPUT THE N (0~8): 8
THE N! IS : 40320
C:MASM>JIE_CH
INPUT THE N (0~8): 7
THE N! IS : 5040
C:MASM>JIE_CH
INPUT THE N (0~8): 6
THE N! IS : 720
C:MASM>
;============================================
回答时间:2011-12-18 18:43
向TA求助 回答者: 做而论道 | 十五级 采纳率:43% 名人 达人
提问者对于答案的评价:谢谢
原题网址:http://zhidao.baidu.com/question/355004190.html
原题网址:http://zhidao.baidu.com/question/355582968.html
;============================================
后记:
用递归的方法计算阶乘,是任何一本汇编语言教材都必讲的内容。
这样的书,做而论道看过不少了,没有一本能看得上眼的。呵呵,又有些自大了,应该谦虚一些嘛,只是有些忍不住...
做而论道在这里给出的递归求阶乘程序,比任何一本书上的程序都简短,思路都更加清晰。
不信,大家找找书,对比看一下。
做而论道也希望有网友写出更高明的递归程序,放在留言中,供大家参考。
;============================================
最后
以上就是俏皮日记本为你收集整理的用80x86汇编语言编程--用递归方法求阶乘的全部内容,希望文章能够帮你解决用80x86汇编语言编程--用递归方法求阶乘所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复