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

📄 wu.asm

📁 用汇编编写的河内塔程序 将第一柱a上n-1个盘借助第二柱c移到第三柱b 把a上剩下的一个盘移到c 将n-1个盘从b借助a移到第三柱c 这三步是图示河内塔的根本方法 功能一:自己动手移动河内塔 先按左右
💻 ASM
📖 第 1 页 / 共 2 页
字号:
DATA SEGMENT
     S1 DB 0AH,0DH,'------------------MENU--------------------------'
        DB 0AH,0DH,'1.PLAY THE GAME'
        DB 0AH,0DH,'2.THE KEY OF THE GAME'
        DB 0AH,0DH,'3.EXIT'
        DB 0AH,0DH,'YOUR CHOOSE:',24H
     S2 DB 0AH,0DH,'INPUT ERROR',24H
     S3 DB 0AH,0DH,'THE LEVEL(1-10)',24H
     SET DB ?
     S4 DB 0AH,0DH,'GREAT!!!!!!!!!!!',24H
     S5 DB 0AH,0DH,'GOOD,BUT IT HAS A BETTER WAY!',24H
     S6 DB 0AH,0DH,'DO YOU REALLY GIVE UP?(Y/N)',24H
     LEVEL DB ?
     S7 DB 'DO YOU LIKE TO PLAY AGAIN?(Y/N)',24H
     STACK1 DB 11 DUP(?)
     STACK2 DB 11 DUP(?)
     STACK3 DB 11 DUP(?)
     TOP1 DB ?
     TOP2 DB ?
     TOP3 DB ?
     CHOOSE1 DB ?
     CHOOSE2 DB ?
     STEP1 DB ?
     STEP2 DB ?
     ONE DB ?
     TWO DB ?
     THREE DB ?
     COUNT DB ?
     FAIT DB ?
     COLOR DB ?
     XUAN DB ?
     PRESS DB ?
DATA ENDS

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA

MAIN PROC FAR
     PUSH DS
     MOV AX,DATA
     MOV DS,AX
     XOR AX,AX
     PUSH AX
INPUT:
     CALL BACKGROUND
     CMP SET,'1'
     JZ SET1
     CMP SET,'2'
     JZ SET2
     CMP SET,'3'
     JZ SET3
     MOV DX,OFFSET S2
     MOV AH,09H
     INT 21H
     MOV AH,01H
     INT 21H
     JMP INPUT     
SET1:
     MOV LEVEL,1
     CALL PLAYGAME
     MOV DX,OFFSET S7
     CALL CLEAR
     MOV AH,09H
     INT 21H
     MOV AH,01H
     INT 21H
     CMP AL,'Y'
     JZ SET1
     JMP INPUT
SET2:
     CALL KEYGAME
     JMP INPUT
SET3:
     CALL CLEAR
     RET
MAIN ENDP

BACKGROUND PROC NEAR
    PUSH DX
    PUSH AX
    CALL CLEAR
    LEA DX,S1
    MOV AH,09H
    INT 21H
    MOV AH,01H
    INT 21H
    MOV  SET,AL
    POP AX
    POP DX
    RET
BACKGROUND ENDP

CLEAR PROC NEAR
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    MOV AH,08H
    INT 10H
    MOV BH,AH
    MOV AX,0600H
    MOV CX,0000
    MOV DX,184FH
    INT 10H
    MOV AH,02H
    MOV BX,0
    MOV DX,0
    INT 10H
    POP DX
    POP CX
    POP BX
    POP AX
    RET
CLEAR ENDP

PLAYGAME PROC NEAR
      PUSH AX
      PUSH CX
      PUSH DX
GAME:
     MOV SI,1
     MOV AL,LEVEL
     MOV DL,AL
     INC DX
     XOR DH,DH
INIT1:
      MOV STACK1[SI],AL
      MOV FAIT,' '
      DEC AL
      INC SI
      CMP SI,DX
      JNE INIT1
      MOV AL,LEVEL
      MOV TOP1,AL
      MOV TOP2,0
      MOV TOP3,0
      MOV CHOOSE1,1
      MOV CHOOSE2,1
      MOV STEP1,0
PLAY1:MOV AL,CHOOSE2
      MOV CHOOSE1,AL
      CALL MOVE1
      CMP FAIT,'F'
      JZ FAIL
      CMP CHOOSE1,1
      JZ F1
      CMP CHOOSE1,2
      JZ F2
      CALL FROM3
      JMP TO
FAIL: JMP END1
F1:
      CALL FROM1
      JMP TO
F2:
      CALL FROM2
TO:
      CMP CHOOSE2,1
      JZ T1
      CMP CHOOSE2,2
      JZ T2
      CALL TO3
      JMP COMP
T1:
      CALL TO1
      JMP COMP
T2:
      CALL TO2
COMP:
      CMP TOP3,0
      JZ  PLAY1
      MOV CX,WORD PTR LEVEL
      XOR CH,CH
      MOV SI,1
CMPE:
      CMP STACK3[SI],CL
      JNZ PLAY1
      INC SI
      LOOP CMPE
      MOV STEP2,0
      MOV PRESS,1
      CALL HANIO1
      MOV AL,STEP2
      CMP STEP1,AL
      JNA GREAT
      MOV DX,OFFSET S5
      MOV AH,09H
      INT 21H
      JMP END2
GREAT:
      MOV DX,OFFSET S4
      MOV AH,09H
      INT 21H
END2:
      MOV AH,01H
      INT 21H
      CMP LEVEL,10
      JE END1
      INC LEVEL
      JMP GAME
END1:
      POP DX
      POP CX
      POP AX
      RET
PLAYGAME ENDP

FROM1 PROC NEAR
      MOV SI,WORD PTR TOP1
      AND SI,00FFH
      MOV AL,STACK1[SI]
      MOV XUAN,AL
      DEC TOP1
      RET
FROM1 ENDP

FROM2 PROC NEAR
      MOV SI,WORD PTR TOP2
      AND SI,00FFH
      MOV AL,STACK2[SI]
      MOV XUAN,AL
      DEC TOP2
      RET
FROM2 ENDP

FROM3 PROC NEAR
      MOV SI,WORD PTR TOP3
      AND SI,00FFH
      MOV AL,STACK3[SI]
      MOV XUAN,AL
      DEC TOP3
      RET
FROM3 ENDP    

TO1 PROC NEAR  
      MOV DI,WORD PTR TOP1
      AND DI,00FFH
      INC DI
      MOV AL,XUAN
      MOV STACK1[DI],AL
      INC TOP1
      INC STEP1
     RET
TO1 ENDP

TO2 PROC NEAR
      MOV DI,WORD PTR TOP2
      AND DI,00FFH
      INC DI
      MOV AL,XUAN
      MOV STACK2[DI],AL
      INC TOP2
      INC STEP1
      RET
TO2 ENDP

TO3 PROC NEAR
      MOV DI,WORD PTR TOP3
      AND DI,00FFH
      INC DI
      MOV AL,XUAN
      MOV STACK3[DI],AL
      INC TOP3
      INC STEP1
      RET
TO3 ENDP

MOVE1 PROC NEAR
     CALL CLEAR
     MOV AH,0FH
     INT 10H
     PUSH AX
     CALL B10MODE
WAITIN:
     CALL C10DISPL1
     MOV AH,10H
     INT 16H
     CMP AH,4BH
     JE LEFT
     CMP AH,4DH
     JE RIGHT
     CMP AH,48H
     JE UP
     JMP GAMEOVER
LEFT:
     MOV BL,CHOOSE1
     DEC CHOOSE1
     CMP CHOOSE1,0
     JE TURN3
     CMP CHOOSE1,1
     JE CHA1
     CMP CHOOSE1,2
     JE CHA2
H1:
     CMP DL,0
     JZ HUIFU
     JMP WAITIN
HUIFU:
     MOV CHOOSE1,BL
     JMP WAITIN
TURN3:
     MOV CHOOSE1,3
     MOV DL,TOP3
     JMP H1
CHA1:
     MOV DL,TOP1
     JMP H1
CHA2:
     MOV DL,TOP2
     JMP H1
RIGHT:
     MOV BL,CHOOSE1
     INC CHOOSE1
     CMP CHOOSE1,4
     JE TURN1
     CMP CHOOSE1,3
     JE TURN3
     CMP CHOOSE1,2
     JE CHA2
     JMP H1
TURN1:
     MOV CHOOSE1,1
     MOV DL,TOP1
     JMP H1
UP:
     CMP CHOOSE1,1
     JE B1
     CMP CHOOSE1,2
     JE B2
     MOV SI,WORD PTR TOP3
     AND SI,00FFH
     MOV DL,STACK3[SI]
     MOV XUAN,DL
     JMP WAITIN2
B1:
     MOV SI,WORD PTR TOP1
     AND SI,00FFH
     MOV DL,STACK1[SI]
     MOV XUAN,DL
     JMP WAITIN2
B2:
     MOV SI,WORD PTR TOP2
     AND SI,00FFH
     MOV DL,STACK2[SI]
     MOV XUAN,DL
WAITIN2:
     CALL C10DISPL1
     MOV AL,CHOOSE1
     MOV CHOOSE2,AL
     MOV AH,10H
     INT 16H
     CMP AH,4BH
     JZ LEFT2
     CMP AH,4DH
     JZ RIGHT2
     JMP GAMEOVER
LEFT2:
     DEC CHOOSE2
     CMP CHOOSE2,0
     JE W3
     CMP CHOOSE2,1
     JE W1
     JMP W2
RIGHT2:
     INC CHOOSE2
     CMP CHOOSE2,3
     JE W3
     CMP CHOOSE2,4
     JE W1
W2:
     MOV CHOOSE2,2
     CMP TOP2,0
     JE MV
     MOV SI,WORD PTR TOP2
     AND SI,00FFH
     MOV DL,XUAN
     CMP DL,STACK2[SI]
     JB MV
     JMP WAITIN2
W3:
     MOV CHOOSE2,3
     CMP TOP3,0
     JE MV
     MOV SI,WORD PTR TOP3
     AND SI,00FFH
     MOV DL,XUAN
     CMP DL,STACK3[SI]
     JB MV
     JMP WAITIN2
W1:
     MOV CHOOSE2,1
     CMP TOP1,0
     JE MV
     MOV SI,WORD PTR TOP1
     AND SI,00FFH
     MOV DL,XUAN
     CMP DL,STACK1[SI]
     JB MV
     JMP WAITIN2
GAMEOVER:
     MOV FAIT,'F'
     MOV DL,FAIT
     MOV AH,02H
     INT 21H
     MOV AH,01H
     INT 21H
MV:
     POP AX
     MOV AH,00H
     INT 10H
     RET
MOVE1 ENDP



B10MODE PROC NEAR
     MOV AX,0012H
     INT 10H
     MOV AH,0BH
     MOV BX,0
     INT 10H
     RET
B10MODE ENDP


INITU PROC NEAR
     MOV BX,00
     MOV CX,40
     MOV DX,330
C20:
     MOV AH,0CH
     MOV AL,0AH
     INT 10H
     INC CX
     CMP CX,200
     JNE C20
     MOV CX,240
C30:
     MOV AH,0CH
     MOV AL,0AH
     INT 10H
     INC CX
     CMP CX,400
     JNE C30
     MOV CX,440
C40:
     MOV AH,0CH
     MOV AL,0AH
     INT 10H
     INC CX
     CMP CX,600
     JNE C40
     RET
INITU ENDP

C10DISPL1 PROC NEAR
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    PUSH SI
    PUSH DI
    CALL INITU
    MOV CX,40
    MOV DX,330
    MOV BX,0
    CMP TOP1,0
    JZ  D2
    CALL DRAW1
D2:
    MOV CX,240
    MOV DX,330
    CMP TOP2,0
    JZ  D3
    CALL DRAW2
D3:
    MOV CX,440
    MOV DX,330
    CMP TOP3,0
    JZ OK
    CALL DRAW3
OK:
    POP DI
    POP SI
    POP DX
    POP CX
    POP BX
    POP AX
    RET
C10DISPL1 ENDP


DRAW1 PROC NEAR
    MOV DI,WORD PTR TOP1
    AND DI,00FFH
    MOV SI,0
    CMP TOP1,1
    JZ CD1
DRAW11:
    INC SI
    MOV AX,10
    SUB AL,STACK1[SI]
    PUSH BX
    PUSH DX
    MOV BX,5
    MUL BX
    POP DX
    POP BX
    ADD AX,40
    MOV CX,AX
    MOV COUNT,28
L1:
    PUSH CX
LINE1:
    MOV AX,0C0AH
    INT 10H
    INC CX
    MOV AX,10
    SUB AL,STACK1[SI]
    PUSH BX
    PUSH DX
    MOV BX,5
    MUL BX
    MOV BX,200
    XCHG AX,BX
    SUB AX,BX
    POP DX
    POP BX
    CMP CX,AX
    JB LINE1
    POP CX
    DEC DX
    DEC COUNT
    CMP COUNT,0
    JNZ L1

⌨️ 快捷键说明

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