📄 course.asm
字号:
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 + -