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

📄 hanoi.asm

📁 C编译器,在VC6.0环境下开发
💻 ASM
字号:
extrn	func_putint		:proc
extrn	func_putchar		:proc
extrn	func_getch		:proc
extrn	func_getche		:proc

_data	segment
	str_2	db	"move sequence :", 0
	str_1	db	"Please input disk number :", 0
	str_0	db	"-->", 0
_data	ends

_text	segment
	assume cs:_text	,ds:_data	
func_puts	proc	near
	push	bp
	mov	bp,	sp
	sub	sp,	2
	mov	word ptr [bp-2],	0
bb_label_1:
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	or	ax,	ax
	jz	bb_label_2
	jmp	bb_label_3
bb_label_4:
	jmp	bb_label_1
bb_label_3:
	mov	ax,	word ptr [bp-2]
	push	ax
	inc	word ptr [bp-2]
	mov	si,	cx
	pop	cx
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	push	ax
	call	func_putchar
	add	sp,	1
	jmp	bb_label_4
bb_label_2:
bb_label_0:
	mov	sp,	bp
	pop	bp
	ret
func_puts	endp
func_putln	proc	near
	push	bp
	mov	bp,	sp
	mov	ax,	10
	push	ax
	call	func_putchar
	add	sp,	1
	mov	ax,	13
	push	ax
	call	func_putchar
	add	sp,	1
bb_label_5:
	mov	sp,	bp
	pop	bp
	ret
func_putln	endp
func_getint	proc	near
	push	bp
	mov	bp,	sp
	sub	sp,	4
	mov	word ptr [bp-2],	0
bb_label_7:
	mov	ax,	1
	or	ax,	ax
	jz	bb_label_8
	call	func_getche
	push	ax
	pop	ax
	mov	byte ptr [bp-3],	al
	mov	dx,	13
	mov	al,	byte ptr [bp-3]
	mov	ah,	0
	cmp	ax,	dx
	je	bb_label_9
	xor	ax,	ax
	jmp	bb_label_10
bb_label_9:
	mov	ax,	1
bb_label_10:
	push	ax
	pop	ax
	or	ax,	ax
	jz	bb_label_11
	jmp	bb_label_8
	jmp	bb_label_12
bb_label_11:
bb_label_12:
	mov	dx,	10
	mov	ax,	word ptr [bp-2]
	imul	dx
	push	ax
	mov	dl,	byte ptr [bp-3]
	mov	dh,	0
	pop	ax
	add	ax,	dx
	push	ax
	mov	dl,	48
	mov	dh,	0
	pop	ax
	sub	ax,	dx
	push	ax
	pop	ax
	mov	word ptr [bp-2],	ax
	jmp	bb_label_7
bb_label_8:
	mov	ax,	word ptr [bp-2]
	jmp	bb_label_6
bb_label_6:
	mov	sp,	bp
	pop	bp
	ret
func_getint	endp
func_gets	proc	near
	push	bp
	mov	bp,	sp
	sub	sp,	2
	mov	word ptr [bp-2],	-1
bb_label_14:
	mov	ax,	word ptr [bp-2]
	push	ax
	inc	word ptr [bp-2]
	pop	ax
	call	func_getche
	push	ax
	pop	ax
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	byte ptr [bx],	al
	push	ax
	pop	ax
	mov	dx,	13
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	cmp	ax,	dx
	jne	bb_label_16
	xor	ax,	ax
	jmp	bb_label_17
bb_label_16:
	mov	ax,	1
bb_label_17:
	push	ax
	pop	ax
	or	ax,	ax
	jnz	bb_label_14
bb_label_15:
	mov	ax,	0
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	byte ptr [bx],	al
	push	ax
	pop	ax
bb_label_13:
	mov	sp,	bp
	pop	bp
	ret
func_gets	endp
func_strcpy	proc	near
	push	bp
	mov	bp,	sp
	sub	sp,	2
	mov	word ptr [bp-2],	0
bb_label_19:
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	or	ax,	ax
	jz	bb_label_20
	jmp	bb_label_21
bb_label_22:
	mov	ax,	word ptr [bp-2]
	push	ax
	inc	word ptr [bp-2]
	pop	ax
	jmp	bb_label_19
bb_label_21:
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	byte ptr [bx],	al
	push	ax
	pop	ax
	jmp	bb_label_22
bb_label_20:
	mov	ax,	0
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	byte ptr [bx],	al
	push	ax
	pop	ax
bb_label_18:
	mov	sp,	bp
	pop	bp
	ret
func_strcpy	endp
func_strcat	proc	near
	push	bp
	mov	bp,	sp
	sub	sp,	4
	mov	word ptr [bp-2],	0
	mov	word ptr [bp-4],	0
bb_label_24:
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	or	ax,	ax
	jz	bb_label_25
	mov	ax,	word ptr [bp-2]
	push	ax
	inc	word ptr [bp-2]
	pop	ax
	jmp	bb_label_24
bb_label_25:
bb_label_26:
	mov	si,	cx
	mov	cx,	word ptr [bp-4]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	or	ax,	ax
	jz	bb_label_27
	jmp	bb_label_28
bb_label_29:
	mov	ax,	word ptr [bp-2]
	push	ax
	inc	word ptr [bp-2]
	pop	ax
	mov	ax,	word ptr [bp-4]
	push	ax
	inc	word ptr [bp-4]
	pop	ax
	jmp	bb_label_26
bb_label_28:
	mov	si,	cx
	mov	cx,	word ptr [bp-4]
	mov	bx,	word ptr [bp+4]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	byte ptr [bx],	al
	push	ax
	pop	ax
	jmp	bb_label_29
bb_label_27:
	mov	ax,	0
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	byte ptr [bx],	al
	push	ax
	pop	ax
bb_label_23:
	mov	sp,	bp
	pop	bp
	ret
func_strcat	endp
func_strchr	proc	near
	push	bp
	mov	bp,	sp
	sub	sp,	2
	mov	word ptr [bp-2],	0
bb_label_31:
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	or	ax,	ax
	jz	bb_label_32
	mov	dl,	byte ptr [bp+4]
	mov	dh,	0
	mov	si,	cx
	mov	cx,	word ptr [bp-2]
	mov	bx,	word ptr [bp+6]
	add	bx,	cx
	mov	cx,	si
	mov	al,	byte ptr [bx]
	mov	ah,	0
	cmp	ax,	dx
	je	bb_label_33
	xor	ax,	ax
	jmp	bb_label_34
bb_label_33:
	mov	ax,	1
bb_label_34:
	push	ax
	pop	ax
	or	ax,	ax
	jz	bb_label_35
	mov	ax,	word ptr [bp-2]
	jmp	bb_label_30
	jmp	bb_label_36
bb_label_35:
bb_label_36:
	mov	ax,	word ptr [bp-2]
	push	ax
	inc	word ptr [bp-2]
	pop	ax
	jmp	bb_label_31
bb_label_32:
	mov	ax,	-1
	jmp	bb_label_30
bb_label_30:
	mov	sp,	bp
	pop	bp
	ret
func_strchr	endp
func_move	proc	near
	push	bp
	mov	bp,	sp
	mov	dx,	1
	mov	ax,	word ptr [bp+4]
	cmp	ax,	dx
	je	bb_label_38
	xor	ax,	ax
	jmp	bb_label_39
bb_label_38:
	mov	ax,	1
bb_label_39:
	push	ax
	pop	ax
	or	ax,	ax
	jz	bb_label_40
	mov	al,	byte ptr [bp+10]
	mov	ah,	0
	push	ax
	call	func_putchar
	add	sp,	1
	lea	ax,	str_0
	push	ax
	call	func_puts
	add	sp,	2
	mov	al,	byte ptr [bp+6]
	mov	ah,	0
	push	ax
	call	func_putchar
	add	sp,	1
	call	func_putln
	jmp	bb_label_37
	jmp	bb_label_41
bb_label_40:
bb_label_41:
	mov	al,	byte ptr [bp+10]
	mov	ah,	0
	push	ax
	mov	al,	byte ptr [bp+6]
	mov	ah,	0
	push	ax
	mov	al,	byte ptr [bp+8]
	mov	ah,	0
	push	ax
	mov	dx,	1
	mov	ax,	word ptr [bp+4]
	sub	ax,	dx
	push	ax
	pop	ax
	push	ax
	call	func_move
	add	sp,	5
	mov	al,	byte ptr [bp+10]
	mov	ah,	0
	push	ax
	mov	al,	byte ptr [bp+8]
	mov	ah,	0
	push	ax
	mov	al,	byte ptr [bp+6]
	mov	ah,	0
	push	ax
	mov	ax,	1
	push	ax
	call	func_move
	add	sp,	5
	mov	al,	byte ptr [bp+8]
	mov	ah,	0
	push	ax
	mov	al,	byte ptr [bp+10]
	mov	ah,	0
	push	ax
	mov	al,	byte ptr [bp+6]
	mov	ah,	0
	push	ax
	mov	dx,	1
	mov	ax,	word ptr [bp+4]
	sub	ax,	dx
	push	ax
	pop	ax
	push	ax
	call	func_move
	add	sp,	5
bb_label_37:
	mov	sp,	bp
	pop	bp
	ret
func_move	endp
main	proc	far
start:
	push	ds
	xor	ax,	ax
	push	ax
	mov	ax,	_data	
	mov	ds,	ax
	push	bp
	mov	bp,	sp
	sub	sp,	2
	lea	ax,	str_1
	push	ax
	call	func_puts
	add	sp,	2
	call	func_getint
	push	ax
	pop	ax
	mov	word ptr [bp-2],	ax
	call	func_putln
	lea	ax,	str_2
	push	ax
	call	func_puts
	add	sp,	2
	call	func_putln
	mov	al,	97
	mov	ah,	0
	push	ax
	mov	al,	98
	mov	ah,	0
	push	ax
	mov	al,	99
	mov	ah,	0
	push	ax
	mov	ax,	word ptr [bp-2]
	push	ax
	call	func_move
	add	sp,	5
bb_label_42:
	mov	sp,	bp
	pop	bp
	ret
main	endp
_text	ends
	end	start

⌨️ 快捷键说明

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