data segment
note db "please input a number(0~8):$"
crlf db 13,10,'$'
result db "!= $"
n db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,note
mov ah,09
int 21h
call input
call factor
call dipcrlf
call output
mov ah,4ch
int 21h
;输入0—8中任意一个数
input proc near
mov ah,01h
int 21h
mov n,al
sub al,30h
mov ah,0
ret
input endp
;求n的阶乘
factor proc near
push ax
dec ax
jnz next
pop ax
jmp exit
next:
call factor
pop cx
mul cx ;注意不能用cl,因为当n比较大时(n-1)!可能大于一个字节。
exit: ret
factor endp
output proc near
push ax
push dx
mov dl,n
mov ah,02
int 21h
lea dx,result
mov ah,09
int 21h
pop dx
pop ax
mov cx,10000
mov dx,0
div cx
;商在ax,余数在dx
xchg ax,dx
;交换后商在dx
call dipletter
;xchg ax,dx
mov dx,0
mov cx,1000
div cx
xchg ax,dx
call dipletter
;xchg ax,dx
mov dx,0
mov cx,100
div cx
xchg ax,dx
call dipletter
;xchg ax,dx
mov dx,0
mov cx,10
div cx
xchg ax,dx
call dipletter
xchg ax,dx
call dipletter
call dipcrlf
ret
output endp
;输出字符
dipletter proc near
push ax
push dx
add dl,30h
mov ah,02
int 21h
pop dx
pop ax
ret
dipletter endp
;输出回车换行
dipcrlf proc near
push dx
push ax
lea dx,crlf
mov ah,09
int 21h
pop ax
pop dx
ret
dipcrlf endp
code ends
end start
汇编求N的阶乘
最新推荐文章于 2021-11-09 13:00:32 发布