⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n!.asm

📁 用汇编语言实现的n!程序。最多可算到8!
💻 ASM
字号:
stack segment para stack 'stack'
	top db 150 dup(?)
stack ends

data segment
buff	db	100	dup(?)
order	dw	10000,1000,100,10,1
data ends

code segment
	assume cs:code,ds:data

inputc	proc	near
;入口参数:无
;功能:从键盘读入一个字母
;出口参数:DL中为键盘输入字的ASCII码值
	push	ax
	mov	ah,01h
	int	21h
	mov	dx,0
	mov	dl,al
	pop	ax
	ret
inputc	endp

input	proc	near
;入口参数:无
;功能:从键盘读入数字n
;出口参数:BX中为读入的数字n
	push	ax
	push	cx	
	mov	ax,0
loop1:	call	inputc
	cmp	dl,30h
	jb	exit2
	cmp	dl,39h
	ja	exit2
	sub	dl,30h
	mov	bx,0
	mov	bl,dl
	mov	cl,10
	mul	cl
	add	ax,bx
	jmp	loop1
exit2:	mov	bx,ax
	pop	cx
	pop	ax
	ret
input	endp	
	
bin2dec proc	far
;入口参数:DX存放要输出的数字
;功能:输出5位十进制数
;出口参数:无
	push	cx
	push	bx
	mov	cx,5
	mov	bx,0
	lea	si,order

loop3:	sub	dx,[si]
	jb	loop4
	inc	bl;存放某位数字
	jmp	loop3
loop4:	add	dx,[si]
	cmp	bl,0
	je	loop7
loop5:	push	dx
	mov	dl,bl
	or	dl,30h
	mov	ah,2
	int	21h
	pop	dx
	mov	bh,1;标志是否已经有数字输出
	jmp	loop8
loop7:	cmp	bh,1
	je	loop5
loop8:	add	si,2
	mov	bl,0
	loop	loop3
	cmp	bh,0
	jne	loop9;为0时输出0
	mov	dl,'0'
	mov	ah,2
	int	21h
loop9:	pop	bx
	pop	cx
	ret
bin2dec	endp

lfcr	proc	near
;入口参数:无
;功能:另起一行,从头输出
;出口参数:无
	push	ax
	push	dx
	mov	ah,02h
	mov	dl,0ah
	int	21h
	mov	dl,0dh
	int	21h
	pop	dx
	pop	ax
	ret
lfcr	endp	

fact	proc	near
;入口参数:BX中存着n
;功能:实现阶乘
;出口参数:BX中存放结果
	push	ax
	push	cx
	mov	ax,1
	mov	cx,bx
l1:	mul	cx
	loop	l1
	mov	bx,ax
	pop	cx
	pop	ax
	ret
fact	endp	



main	proc	near
;入口参数:无
;功能:做n阶乘(最大做到8)
;出口参数:无
	push	ds
	mov	ax,0
	push	ax
	mov	ax,data
	mov	ds,ax
	mov	ax,stack
	mov	ss,ax	

	call	input
	call	lfcr
	call	fact
	mov	dx,bx
	call	bin2dec

	mov	ah,4ch
	int	21h
main	endp
code	ends

end	main




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -