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

📄 test.asm

📁 很好玩的拼图游戏~本软件可以轻松实现~欢迎下载
💻 ASM
📖 第 1 页 / 共 2 页
字号:

F1           equ 3bh   ;ah
F2           equ 3ch   ;ah
F3           equ 3dh   ;ah
Enter        equ 0dh   ;al
Escape       equ 1bh   ;al
up           equ 48h
down         equ 50h
left         equ 4bh
right        equ 4dh
;*************************** macro ******************
renew macro
       mov ah,7
    mov al,25
    mov bh,00011001b
    mov ch,5
    mov cl,7
    mov dh,23
    mov dl,48
    int 10h
    mov bh,0
    mov dh,8
    mov dl,20
    mov ah,2
    int 10h
    endm
;---------------------------------------
exchange macro a,b
  mov ax,array[a]
  xchg array[b],ax
  mov array[a],ax
  endm
;---------------------
locate macro lx,ly
   mov bh,0
   mov dh,ly
   mov dl,lx
   mov ah,2
   int 10h
   endm 
compare macro si
   local w,wx
   mov di,0
   mov bx,array[si]
w: cmp bx,b[di]
   jz wx
   add di,2
   jmp w
wx:mov ax,lox[si]
   mov x,ax
   mov ax,loy[si]
   mov y,ax
   call write_table[di]
   endm
;------------------------------------
write_init macro
   mov bh,8
   mov ax,x
   div bh
   mov cl,al
   mov ax,y
   mov bh,16
   div bh
   mov ch,al
   mov dl,cl
   add dl,14
   mov dh,ch
   add dh,6
   mov bh,11h
   mov bl,0
   mov al,7
   mov ah,6
   int 10h
   endm
;----------------------------------------
frame macro 
   mov ax,x
   mov bx,y
   mov startx,ax
   mov starty,bx
   mov endy,bx
   add ax,120
   mov endx,ax
   mov al,15
   call line              ;from (x,y) to (x+112,y) 
   mov  ax,x
   mov  bx,y
   mov startx,ax
   mov endx,ax
   mov starty,bx
   add bx,112
   mov endy,bx
   mov al,15
   call line                ;from (x,y) to (x,y+112)
   mov ax,x
   mov bx,y
   mov startx,ax
   adc ax,120
   adc bx,112
   mov endx,ax
   mov endy,bx
   mov starty,bx
   mov al,15
   call line                 ;from (x,y+112) to (x+112,y+112)
   mov ax,x
   mov bx,y
   adc ax,120
   mov startx,ax              
   mov starty,bx
   mov al,15
   call line                  ;from (x+112,y) to (x+112,y+112)
   endm
;***********************************************
data segment
    write_table dw w1
                dw w2
                dw w3
                dw w4
                dw w5
                dw w6
                dw w7
                dw w8
                dw w9
                    clear db '                                              $'
    author db 'Author: ji yan fen ,guo yi xi ,guo jian fen,liang yong jie,ge guo ping,ping ming zi,he xin hua','$' 
        mesg1 db 'Press ENTER to start!$'
    mesg2 db 'Press Q to EXIT!$'
    mesg3 db 'Pressed F3!$'
    mesg4 db 'Good  Bye!$'
    mesg5 db 'Loading ...,Please waiting ...$'
    mesg6 db 'Congratulations!$'
    mesg7 db 'Press F2 to new,and ECS to exit!$'
    mesg8 db 'It finished!$'
    mesg9 db 'This is a autorun.Please waiting....$'
    help1 db 'F2------New$'
    help2 db 'F3------Auto$'
    help3 db 'Enter---Start$'
    help4 db 'ESC-----Exit$'
    help5 db 'F1------Help$'
    startx dw ?    ;直线的起始横坐标
    starty dw ?
    endx dw ?      ;直线的终点横坐标
    endy dw ?
    x dw ?         ;每一个小方块的起始坐标
    y dw ?
    array dw 9 dup(?)
;    array dw 1,2,3,4,7,5,6,0,8
    b dw 1,2,3,4,0,5,6,7,8
    lox dw 40,160,280,40,160,280,40,160,280
    loy dw 64,64,64,176,176,176,288,288,288
    s1 db 9
data ends
code segment   
;*************************  main  **************************
main   proc far
     assume cs:code,ds:data
start:push ds
      mov ax,0
      push ax
      mov ax,data
      mov ds,ax
      call init
st1:  call ckekey
      cmp bh,F1
      jz  xF1             ;按下F1调用帮助文件
      cmp bh,F2
      jz  xF2             ;F2 游戏初始化,只有先初始化才能游戏
      cmp bh,F3
      jz  xF3
      cmp bl,Enter        ;F3 演示 
      jz  xEnter
      cmp bl,Escape        ;按下ESC退出到DOS
      jz dos
      jmp st1
xF1:   call help
      jmp st1
xF2:   call restart
      jmp st1
xF3:   call autorun
      jmp st1
xEnter:call  ready
      jmp st1
       call ckekey
dos:
      call back_to_dos
      ret
main  endp
;***************** init *****************
init  proc near
      mov ah,0
     mov al,06
     int 10h
      mov ah,02
      mov dh,11
     mov dl,25
     mov bh,0
      int 10h
     lea dx,mesg5
     mov ah,9
      int 21h
      call mada
      mov ah,0
      mov al,12h
      int 10h
      mov ah,0bh
      mov bh,0
      mov bl,1
      int 10h
      mov ah,7
      mov al,28
      mov ch,3
      mov cl,4
      mov dh,26
      mov dl,50
      mov bh,00110001b
      int 10h
      mov al,5      
      mov startx,425
      mov endx,425
      mov starty,64
      mov endy,400
      mov al,15
      call line
      mov startx,425
      mov endx,575
      mov starty,64
      mov endy,64
      mov al,15
      call line 
      mov startx,575
      mov endx,575
      mov starty,64
      mov endy,400
      mov al,15
      call line
      mov startx,425
      mov endx,575
      mov starty,400
      mov endy,400
      mov al,15
      call line
      mov startx,430
      mov endx,570
      mov starty,395
      mov endy,395
      mov al,5
      call line
      mov startx,430
      mov endx,430
      mov starty,293
      mov endy,395
      mov al,5
      call line
      mov startx,430
      mov endx,570
      mov starty,293
      mov endy,293
      mov al,5
      call line
      mov startx,570
      mov endx,570
      mov starty,293
      mov endy,395
      mov al,5
      call line
      locate 56,19
      lea dx,help5
      mov ah,9
      int 21h
      locate 56,20
      lea dx,help1
      mov ah,9
      int 21h
      locate 56,21
      lea dx,help2
      mov ah,9
      int 21h
      locate 56,22
      lea dx,help3
      mov ah,9
      int 21h
      locate 56,23
      lea dx,help4
      mov ah,9
      int 21h
      mov si,0
      compare si
      mov si,2
      compare  si
      mov si,4
      compare  si
      mov si,6
      compare  si
      mov si,8
      compare   si
      mov si,10
      compare   si
      mov si,12
      compare   si
      mov si,14
      compare   si
      mov si,16
      compare   si
      locate 25,1
      lea dx,mesg1
      mov ah,9
      int 21h
      mov starty,470
      mov endy,470
      mov startx,10
      mov endx,630
      mov al,15
      call line
      mov starty,440
      mov endy,440
      mov al,15
      call line
      locate 4,28
      lea dx,author
      mov ah,9
      int 21h
      ret
init endp
;***************** ckekey *****************
ckekey proc near   ;检查键盘是否有输入,并将输入传到BX
      mov ah,0
      int 16h
      mov bx,ax
      ret
ckekey endp
;****************** back to DOS *********************
back_to_dos proc near   ;返回DOS
     mov ah,0
     mov al,3
     int 10h
     ret
back_to_dos endp
;****************** help *****************************
help proc near
     ret
help endp
;******************* restart ************************
restart proc near 
      locate 15,1
      lea dx,clear
      mov ah,9
      int 21h      
      mov ah,7
      mov al,30
      mov ch,4
      mov cl,5
      mov dh,25
      mov dl,50
      mov bh,00110001b
      int 10h 
      mov bh,0
      mov dh,15
      mov dl,12
      mov ah,2
      int 10h
      lea dx,mesg5
      mov ah,9
      int 21h      
      call mada
      mov si,0
      compare si
      mov si,2
      compare  si
      mov si,4
      compare  si
      mov si,6
      compare  si
      mov si,8
      compare   si
      mov si,10
      compare   si
      mov si,12
      compare   si
      mov si,14
      compare   si
      mov si,16
      compare   si
      locate 25,1
      lea dx,mesg1
      mov ah,9
      int 21h
      ret
restart endp
;******************** ready *************************
ready proc near
      locate 15,1
      lea dx,clear
      mov ah,9
      int 21h
      locate 25,1
      lea dx,mesg2
      mov ah,9
      int 21h
s:  mov cx,9         ;比较两个数组
   mov  si,0
   mov  di,0
k: mov ax,array[si]
    cmp  ax,b[di]
    jnz  h             ;两数组不等时,得比较交换,转去H
    add si,2
    add di,2
    sub cx,1
    cmp cx,0
    jnz k
    jmp ready_finish             

;------------------------------------------------------------------    


h: mov si,0        ;where is "0"?
   mov cx,9
l3:cmp array[si],0
   je  l4
   add si,2
   dec cx
   cmp cx,0
   jnz l3
;--------------------------------------------------------------------

l4:call ckekey         ;what is input?
   cmp bl,51h
   jz ex
   cmp bl,71h  
   jne  m
ex:jmp ready_exit

m:  cmp bh,up
   je  xup1
   cmp bh,down
   je  xdown1
   cmp bh,right
   je  xright1
   cmp bh,left
   je  xleft1
   jmp  l4
xup1:     jmp xup
xdown1:   jmp xdown
xright1:  jmp xright
xleft1:   jmp xleft
xup:
   cmp si,14
   je  up_exit
   cmp si,12
   je  up_exit
   cmp si,16
   je  up_exit
   mov ax,array[si]
   xchg array[si+6],ax
   mov array[si],ax
   compare si
   compare si+6
   jmp s
up_exit:
   jmp l4

xdown:
     cmp si,0
    je   down_exit
    cmp si,2
    je   down_exit
    cmp si,4
    je  down_exit
    mov ax ,array[si]
    xchg array[si-6],ax
    mov array[si],ax
    compare si
    compare si-6
    jmp s
down_exit:
    jmp l4

xright:cmp si,0
      je   right_exit
      cmp  si,6
      je   right_exit
      cmp  si,12
      je   right_exit
      mov ax,array[si]
      xchg array[si-2],ax
      mov array[si],ax
      compare si
      compare si-2
      jmp s
right_exit:
      jmp l4

xleft:cmp si,4
     je  left_exit 
     cmp si,10
     je  left_exit 
     cmp si,16
     je  left_exit
     mov ax,array[si]
     xchg  array[si+2],ax
     mov array[si],ax
     compare si
     compare si+2
     jmp s
left_exit:
     jmp l4
ready_finish:
    renew 
    lea dx,mesg6
    mov ah,9
    int 21h
    mov bh,0
    mov dh,15
    mov dl,12
    mov ah,2
    int 10h
    lea dx,mesg7
    mov ah,9
    int 21h
ready_exit:
    locate 15,1
    lea dx,clear
    mov ah,9
    int 21h
    locate 15,1
    lea dx,mesg7
    mov ah,9
    int 21h
    ret
ready endp
;******************** 画直线子程序 **************************
line proc near
    mov bx,0
    mov cx,startx
    mov dx,starty
    cmp cx,endx
    jz vertical           ;当startx=endx时,画竖线
    jmp horizontal        ;当starty=endy时,画横线
vertical:
    mov ah,0ch
    int 10h
    inc dx

⌨️ 快捷键说明

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