📄 mudic.asm
字号:
DATA SEGMENT
MESS1 DB 0DH,0AH,'WELCOME TO PLAY THIS GAME!$'
MESS2 DB 0DH,0AH,'THIS IS WORD GAME!$'
MESS3 DB 0DH,0AH,'INPUT ERROR!$'
MESS4 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'
MUSIC DB 0DH,0AH,'SELECT A PLAY MUSIC!$'
DB 0DH,0AH,'SELECT Q END MUSIC!!$'
DB 0DH,0AH,'$'
MUS_FREG DW 330,294,262,294,330,392,330,294,330
DW 330,392,330,294,262,294,330,392,294
DW 262,262,220,196,196,220,262,294,332,262,-1
MUS_TIME DW 3 DUP(50),25,25,50,25,25,100
DW 2 DUP(50,50,25,25),100
DW 3 DUP(50,25,25),100
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START PROC FAR ;将主过程定义为操作系统的远过程
MOV AX,DATA
MOV DS,AX
MOV AH,00H
MOV AL,04H
INT 10H
MOV AH,0BH
MOV BH,00H
MOV BL,04H
INT 10H
MOV AH,0BH
MOV BH,01H
MOV BL,00H
INT 10H
SHOW MACRO X
LEA DX,X
MOV AH,09H
INT 21H
ENDM
SHOW MESS1
SHOW MESS2
SHOW MUSIC
KEYINPUT: MOV AH,01H
INT 21H
CMP AL,'Q'
JZ RETU
CMP AL,'A'
JNZ ENDMUSIC
CALL PLAYMUSIC
JMP INPUT
INPUT: SHOW MESS3
JMP KEYINPUT
ENDMUSIC: CALL CLEAR
SHOW MESS3
SHOW MESS4
SHOW MESS1
SHOW MESS2
SHOW MUSIC
JMP KEYINPUT
RERU: MOV AH,4CH
INT 21H
START ENDP
PLAYMUSIC PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG
LEA BP,DS:MUS_TIME
FREG: MOV DI,[SI]
CMP DI,-1
JE EXIT_MUS
MOV DX,DS:[BP]
MOV BX,1500
CALL SOUND
ADD SI,2
ADD SP,2
JMP FREG
EXIT_MUS: RET
PLAYMUSIC ENDP
SOUND PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AL,0B6H
OUT 43H,AL
MOV DX,12H
MOV AX,533H*896
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
WAIT: MOV CX,8FF0H
DELAY: LOOP DELAY
DEC BX
JNZ WAIT
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
SOUND ENDP
CLEAR PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,06H
MOV AL,00H
MOV CH,00H
MOV CL,00H
MOV DH,24H
MOV DL,79H
MOV BH,07H
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CLEAR ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -