主题:小看一下,解决的话有分加哦~!!!
xiaohaokof
[专家分:1760] 发布于 2005-10-11 18:47:00
用子程序结构编制计算:S=1!+2!+3!+4!+5!+6!+7!
各位老鸟们,兄弟姐妹们,快来帮忙啊。
小弟先谢谢了,!!!!!!!!!!!!!11
回复列表 (共3个回复)
沙发
LO几又VE [专家分:14490] 发布于 2005-10-12 17:26:00
好久没接触汇编了 手都生了
以下是我原来课程设计里的一个计算N!的子程序
相信有了它再求S=1!+2!+3!+4!+5!+6!+7!就不是什么难题了
;fact.asm
;功能:递归计算n!
;入口:n入栈
;出口:ax为n!的结果
;破坏寄存器:无
fact proc near
push bp
mov bp,sp
push bx
push dx
mov bx,[bp+4]
cmp bx,1
jg f1 ;参数n>1转
mov ax,1 ;最简单情况,把结果放到ax中
jmp f2
f1: mov dx,bx
dec dx ;计算n-1
push dx ;n-1入栈,准备递归调用
call fact ;递归调用结果从ax带回
pop dx ;丢弃调用前入栈的参数
mul bx ;ax*bx,在ax中的积作为拼装结果
f2: pop dx
pop bx
pop bp
ret
fact endp
板凳
erping [专家分:3660] 发布于 2005-10-12 17:40:00
;这个程序缺少一个输出结果的过程。
.model small
.stack
.code
_main:
xor si, si ;最终结果保存在 si 中
mov cx, 1
_cmp_cl_7:
cmp cx, 7
jg _exit_
xor dx, dx
mov ax, 1
mov bx, 1
_cmp_bl_cl:
cmp bx, cx
jg _add_si_ax
mul bx
inc bx
jmp _cmp_bl_cl
_add_si_ax:
add si, ax
inc cx
jmp _cmp_cl_7
_exit_:
mov ax, 4c00H
int 21H
end _main
3 楼
jiangfeng [专家分:110] 发布于 2006-11-09 00:07:00
太简单拉
我来回复