利用汇编子程序结构,编程计算:S=1!+2!+3!……+7!
请,程序能顺利通过汇编,连接,运行!
data segment
A dw ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ax,0
mov cx,7 ;可以改为1到6
q1:
call zzz
add ax,word ptr[A]
loop q1
call Dec_ASCII
mov ah,4ch
int 21h
;*****************
zzz proc
push ax
push bx
push cx
push dx
mov ax,cx
next1:
dec cx
jz next2
mul cx
jmp next1
next2:
mov word ptr[A],ax
pop dx
pop cx
pop bx
pop ax
ret
zzz endp
;******************
;**************************************************************************
; 功能:把AX中的二进制无羡散符号数兄握氏转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换皮毕后的ASCII码数字
Dec_ASCII Proc Near
push ds
push cs
pop ds
push cs
pop es
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[7]
mov BYTE ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
mov dx,di;可以用push di
; pop dx替代
mov ah,9
int 21h
pop di
pop bx
pop dx
pop ds
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
;***************************************************************************
code ends
end start
编好了,我调试了能用,并且能把结果显示在屏幕上,你改下循环次数凳埋誉CL的值液型,枣段就是S=1!+2!+3!……+N!
code segment
assume cs:code
start:mov al,1
mov dx,0
xor cx,cx
mov cl,7
mov bl,1
abc:mov al,bl
mul bl
add dx,ax
inc bl
loop abc
mov ax,dx
mov bx,100
cwd
div bx
push dx
add al,30h
mov dl,al
mov ah,02h
int 21h
pop ax
mov bl,10
div bl
mov bl,ah
add al,30h
mov ah,02h
mov dl,al
int 21h
add bl,30h
mov dl,bl
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end start
5以内的阶乘可以考虑(《256),以上的就算了,要用到多字节乘法,灶罩运写程序会死脑细胞的。
再说了如果要程序能顺利通过汇隐梁编,连接,运行!
别人一般开50-100分,真的,脑细胞很值钱的闷粗
阶乘没有公式,要一个一个的算,
20以内的数的阶乘
阶乘一般很难计算,因为积都很大。
1!=1,
2!=2,
3!=6,
4!=24,
5!=120,
6!=720,
7!=5040,
自己埋租携多看书吧。。这种题不难,不过出这题目的是无聊的人。。汇型衫编算阶弯伏乘。。无语。。
两个循环就可以了。注意要保存cx的值。