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

📄 hanoi.asm

📁 用汇编语言写的汉偌塔程序.用汇编语言写的汉偌塔程序.
💻 ASM
字号:
;hanoi
;注释声明:
;			1.hanoi(x,y,z,n)表示有n个盘子从x移动到z,经过y

;			2.print("x-->y")表示输出:x-->y
.model small
.data
	msg1	db	'-->$'
	msg2	db	'Please enter the number of disk:$'
.stack	300h
.code
	;*************************************************************
main proc far
start:
	mov		ax,@data
	mov		ds,ax

	;显示提示信息
	lea		dx,msg2
	mov		ah,09h
	int		21h	
	
	;输入盘子的个数
	call		decibin
	call 		crlf
	;给参数赋值
	sub 		ah,ah
	mov		al,'A'			;x
	push 	ax
	mov		al,'B'			;y
	push 	ax
	mov		al,'C'			;z
	push 	ax
	
	push 	bx				;n

	call 		hanoi

	mov		ax ,4c00h
	int		21h
main endp
;*************************************************************
hanoi proc near pascal uses ax bx cx dx, x:word,y:word,z:word,n:word	
	mov		ax,n
	cmp		ax,1
	jnz		next	;判断盘子数目是否为1
	
	;盘子数=1
	;----------pirnt("x-->z")----------------
	;输出x
	mov		ax,x		
	mov		dl,al
	mov		ah,2
	int		21h

	;输出-->
	lea		dx,msg1
	mov		ah,09h
	int		21h

	;输出z
	mov		ax,z
	mov		dl,al
	mov		ah,2
	int		21h

	;换行
	call crlf

	ret	
;盘子数>1
next:    
	;------------hanor(x,z,y,n-1)--------------
	;初始化子调用  
	mov		ax,x		
	push 	ax
	mov		ax,z
	push 	ax
	mov		ax,y
	push 	ax

	mov		bx,n
	dec 		bx
	push 	bx
	;保存变量
	mov		ax,x
	mov		bx,n
	mov		cx,y
	mov		dx,z
	
	call 		hanoi
	
	mov		x,ax
	mov		n,bx
	mov		y,cx
	mov		z,dx
	;--------------print("x-->z")----------------
	;输出x	
	mov		ax,x		
	mov		dl,al
	mov		ah,2
	int		21h

	;输出-->
	lea		dx,msg1
	mov		ah,09h
	int		21h

	;输出y
	mov		ax,z
	mov		dl,al
	mov		ah,2
	int		21h
	
	call crlf
	;----------------hanoi(y,x,z,n-1)-------------
	mov 		ax,y		
	push 	ax
	mov		ax,x
	push 	ax
	mov		ax,z
	push 	ax
	mov 		ax,n
	dec 		ax
	push 	ax
		
	call 		hanoi
	
	;-------------------end--------------------------
	ret	
hanoi endp
;*************************************************************
;从键盘输入数字
decibin	proc near
		mov		bx,0
	
	newchar:
		mov		ah,1
		int		21h
		sub		al,30h
		jl			exit
		cmp		al,9d
		jg			exit
		cbw

		xchg 	ax,bx
		mov		cx,10d
		mul		cx
		xchg 	ax,bx

		add		bx,ax
		jmp		newchar
	exit:
		ret
decibin	endp
	;*************************************************************
	;换行
crlf 	proc 	near
		mov		dl,0dh
		mov		ah,2
		int		21h

		mov		dl,0ah
		mov		ah,2
		int		21h

		ret
crlf endp
	end start

⌨️ 快捷键说明

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