用主程序调用子程序形式,汇编语言编程实现n!=1!+2!+3!+4!+5!

请高手会的,发我邮箱[email protected],谢谢~~~是一段完整的编程

写一段能够计算x!并存回某寄存器,ret,然后在主程序里call它,返回后累加。
由于(1 !) + (2 !) + (3 !) + (4 !) + (5 !) = 153,大小小于机器字长,可直接存在寄存器里。追问

我需要的是完整的编程,谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-22
需要显示吗?追问

最好可以显示

追答

;--------------------------------------------
DATA SEGMENT
OUTPUT_TIPS DB 10, 13, "1! + 2! + 3! + 4! + 5! = $"
NNN DW 1
DATA ENDS
;--------------------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;----------------------------------
MOV BX, 2 ;0、1 的阶乘都是 1
LOP:
MOV AX, BX
MOV CX, AX
CALL FACTOR ;用递归方法计算阶乘
ADD AX, NNN
MOV NNN, AX
INC BX
CMP BX, 6
JNE LOP
MOV AX, NNN
;----------------------------------
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
;--------------------------------------------

用递归的方法计算阶乘,是任何一本汇编语言教材都必讲的内容。
这样的书,做而论道看过不少了,没有一本能看得上眼的。
做而论道在这里给出的递归求阶乘程序,比任何一本书上的程序都简短,思路都更加清晰。
不信,大家找找书,对比看一下。

本回答被提问者采纳
相似回答