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

📄 course.asm

📁 这是用汇编语言编写的推箱子课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
              MOV       many,30
                            
              MOV       AH,1
              MOV       CH,4
              MOV       CL,0
              INT       10h
              
              RET
storage       ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
StartGame     PROC      NEAR	               ;游戏子过程
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              
  	       MOV       CH,manx
              MOV       CL,many
GEt_key2:     
              MOV       DX,CX
              MOV       AH,0
              INT       16h
              
              MOV       temp,-1
              MOV       temp+1,-1

              CMP       AH,up
              JNZ        NOT_up
              DEC       CH
              JMP       MOVeman
NOT_up:       CMP       AH,down
              JNZ       NOT_down
              INC       CH
NOT_down:     CMP       AH,right
              JNZ       NOT_right
              INC       CL
NOT_right:    CMP       AH,LEft
              JNZ       MOVeman
              DEC       CL
MOVeman:      
              CMP       CH,DH
              JL        isup
              JNLE      isdown
              CMP       CL,DL
              JL        isleft
              JNLE      isright              
              JMP       Error
isup:         
              MOV       temp+1,1
isdown:                     
              setpos    CH,CL
              MOV       BH,0
              MOV       AH,8
              INT       10h
              CMP       AL,177
              setpos    manx,many
              JNZ       NExtjmp
              CALL      beepit
              ADD       CH,temp+1
              JMP       GEt_key2
NExtjmp:
              CMP       AL,219
              JE        NExtjmp2              
              MOV       DI,1
              JMP       NExt
isleft:       
              MOV       temp,1
              setpos    CH,CL
              MOV       BH,0
              MOV       AH,8
              INT       10h
              CMP       AL,177
              setpos    manx,many
              JNZ       NExtjmp2
              CALL      beepit
              ADD       CL,temp
              JMP       GEt_key2              
isright:      
              INC       CL
              setpos    CH,CL
              DEC       CL
              MOV       BH,0
              MOV       AH,8
              INT       10h
              CMP       AL,177
              setpos    manx,many
              JNZ       NExtjmp2
              CALL      beepit
              ADD       CL,temp
              JMP       GEt_key2
NExtjmp2:
              CMP       AL,219
              JE        cagemov                                    
              MOV       DI,2 
NExt:        
              CALL      sureit
              MOV       manx,CH
              MOV       many,CL
              show_char 23,3,00000000b,' ',51
              JMP       GEt_key2
exit2:        
              POP       DI 
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
;-----------------------------
cagemov:      
              CALL      movcase
              JMP       NExt                             
restart:      
              JMP       FAR PTR start
Save_G:       CALL      SaveGame
              JMP       GEt_key2
Load_G:       CALL      LoadGame
              JMP       GEt_key2
Error:                 
              CMP       AH,F1
              JE        restart
              CMP       AH,F8
              JE        exit2
              CMP       AH,F2
              JE        Save_G
              CMP       AH,F3
              JE        Load_G
              CMP       AH,F5
              JE        opt
              
              CALL      beepit
              DIsplaymsg errormsg
              JMP       GEt_key2
opt:          CALL      Option
              JMP       GEt_key2              
StartGame     ENDP
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
sureit        PROC      NEAR			;保证小人不擦掉放箱子地方子程序
              PUSH      AX
              CMP       flag,1
              JNE       NExt10
              CALL      MOVeit
              show_char manx,many,00000111b,176,2
              MOV       flag,0
NExt8:        POP       AX
              CMP       AL,176
              JNE       NExt9
              MOV       flag,1
NExt9:        RET
NExt10:       CALL      MOVeit
              JMP       NExt8              
sureit        ENDP
;-------------------------------------------------------------                          
moveit       PROC      NEAR		;移动小人子过程   
              CMP       DI,1
              JNE       MOVetwo
              show_char manx,many,10001110b,' ',2
              show_char CH,CL,10001110b,234,2
              JMP       exit3
MOVetwo:      
              show_char manx,many,10001110b,' ',2
              CMP       temp,-1
              JNE        NExt2
              INC       CL
              JMP       con
NExt2:
              DEC       CL
con:
              show_char CH,CL,10001110b,234,2
;---------------------------------------------------------
exit3:                       
              RET
moveit       ENDP
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MOVeca        PROC      NEAR		;移动箱子子过程
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              CMP       DI,1
              JNE       MOVetwo2
              MOV       temp+2,CH
              show_char temp+2,many,10001110b,' ',2
              MOV       BH,temp+1
              SUB       temp+2,BH
              show_char temp+2,many,00001101b,219,2
              JMP       exit4
MOVetwo2:     
              MOV       temp+3,CL
              MOV       BH,temp
              SUB       temp+3,BH
              show_char manx,temp+3,10001110b,' ',2
              CMP       temp,-1
              JNE       NExt5
              ADD       temp+3,2
              JMP       con2
NExt5:        
              SUB       temp+3,2
con2:         
              show_char manx,temp+3,00001101b,219,2
exit4:        
              CMP       iswin,4
              JE        win
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
win:          
	       DIsplaymsg youwin
              CALL      music
              MOV       iswin,0
              MOV       AH,7
              INT       21H
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              JMP       START              
MOVeca        ENDP
;-------------------------------------------------------              
MOVcase       PROC      NEAR		;遇到箱子时的移动情况
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX      
              CMP       CH,DH
              JL        isup2
              JNLE      isdown2
              CMP       CL,DL
              JL        isleft2
              JMP       isright2
isup2:         
isdown2:                     
              MOV       temp+2,CH
              MOV       BH,temp+1
              SUB       temp+2,BH
              setpos    temp+2,CL
              MOV       BH,0
              MOV       AH,8
              INT       10h
              setpos    manx,many                                  
              CMP       AL,219
              JZ        case1
              CMP       AL,177
              JNZ       NExtjmp3
case1:        
              CALL      beepit
              ADD       CH,temp+1
              JMP       FAR PTR GEt_key2
NExtjmp3:
              MOV       DI,1
              CMP       AL,176
              JE        continue                            
              JMP       NExt4
isleft2:      
              MOV       temp+3,CL
              DEC       temp+3
              DEC       temp+3
              setpos    CH,temp+3
              MOV       BH,0
              MOV       AH,8
              INT       10h
              setpos    manx,many              
              MOV       DI,2
continue:     
              CMP       AL,176
              JE        NExtjmp4
              CMP       AL,219
              JZ        case2
              CMP       AL,177
              JNZ       NExtjmp4
case2:                      
              CALL      beepit
              ADD       CL,temp
              JMP       FAR PTR GEt_key2              
isright2:     
              MOV       temp+3,CL
              ADD       temp+3,3
              setpos    CH,temp+3 
              MOV       BH,0
              MOV       AH,8
              INT       10h
              setpos    manx,many 
              MOV       DI,2              
              CMP       AL,219
              JZ        case3
              CMP       AL,177
              JNZ       NExtjmp4
case3:                      
              CALL      beepit
              ADD       CL,temp
              JMP       FAR PTR GEt_key2
NExtjmp4:
              CMP       AL,176
              JE        finish
NExt4:        
              CALL      moveca
              POP       DX
              POP       CX
              POP       BX
              POP       AX              
              RET
finish:       
              ADD       iswin,1
              JMP       NExt4
MOVcase       ENDP
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Gametime      PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              PUSH      DS
              PUSH      ES
              MOV       AX,SEG Tdata_seg
              MOV       DS,AX
              
              MOV       AL,1ch
              MOV       AH,35h
              INT       21h
              PUSH      DS
              PUSH      DX
              
              PUSH      DS
              MOV       DX,OFFSET CLInt
              MOV       AX,SEG CLInt
              MOV       DS,AX
              MOV       AL,1ch
              MOV       AH,25h
              INT       21h
              POP       DS
;              IN        AL,21h
;              AND       AL,0feh
;              OUT       21h,AL
              STI
again:
              CALL      StartGame
              POP       DX
              POP       DS
              MOV       AL,1ch
              MOV       AH,25h
              INT       21h
              POP      ES
              POP       DS
              POP       DI
              POP       DX
              POP      CX
              POP      BX
              POP      AX
              RET
Gametime      ENDP
;---------------------------------------------------------------------
CLInt         PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      DI
              PUSH      DS
              MOV       BX,SEG count
              MOV       DS,BX
              LEA       BX,count
              INC       WORD PTR[BX]
              CMP       WORD PTR[BX],18
              JNE       exit5
              CALL      INCtest
exit5:        MOV       AL,20h
              OUT       20h,AL
              POP       DS
              POP       DI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              IRET
              CLInt ENDP

⌨️ 快捷键说明

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