?? hanoi.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 + -