?? 點歌系統.asm
字號:
DATAS SEGMENT
SRING1 DB 0DH,0AH,'CHOOSE THE MUSIC!$'
SRING2 DB 0DH,0AH,'INPUT ERROR!$'
SRING3 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'
MUSLIST DB 0DH,0AH,'1 MUSIC1'
DB 0DH,0AH,'2 MUSIC2'
DB 0DH,0AH,'3 MUSIC3'
DB 0DH,0AH,'4 MUSIC4'
DB 0DH,0AH,'5 MUSIC5'
DB 0DH,0AH,'Q EXIT'
DB 0dh,0ah,'$'
MUS_FREG1 DW 330,294,262,294,3 DUP (330)
DW 3 DUP (294),330,392,392
DW 330,294,262,294,4 DUP (330)
DW 294,294,330,294,262,-1
MUS_TIME1 DW 6 DUP (25),50
DW 2 DUP (25,25,50)
DW 12 DUP (25),100
MUS_FREG2 DW 330,392,330,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_TIME2 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
MUS_FREG3 DW 262,294,330,262,394,330
DW 330,294,262,349,330,330,294,262
DW 330,394,392,330,440,392
DW 392,349,330,440,392,392,349,330
DW 6 DUP(262)
DW -1
MUS_TIME3 DW 3 DUP(50,25),3 DUP(25),50,4 DUP(25)
DW 3 DUP(50,25),3 DUP(25),50,4 DUP(25)
DW 100,100,100,100,100,100
MUS_FREG4 DW 330,292,330,394,330,392,330,294,330
DW 330,292,330,394,262,294,330,392,294
DW 262,262,220,196,196,220,262,294,330,262
DW -1
MUS_TIME4 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
MUS_FREG5 DW 330,390,440,294,262,220
DW 390,131,440,392,330
DW 330,390,440,294,262,220
DW 261,294,390,261,220
DW -1
MUS_TIME5 DW 2 DUP(25),50,25,25,50
DW 4 DUP(25),100
DW 2 DUP(25),50,25,25,50
DW 4 DUP(25),100
DATAS ENDS
STACKS SEGMENT
DB 100 DUP ('STACK')
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
MOV AX,DATAS
MOV DS,AX
MOV AH,00H ;設置顯示方式
MOV AL,12H
INT 10H
MOV AH,0BH ;設置設置背景顏色
MOV BH,0
MOV BL,41H
INT 10H
SHOW MACRO s ;定義一個執行語句的宏
LEA DX,s
MOV AH,9
INT 21H
ENDM
HUICHE MACRO ;定義一個回車換行的宏
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
SHOW SRING1 ; 調用SHOW顯示語句
HUICHE
SHOW MUSLIST
INPUT: MOV AH,01H ;判斷輸入的字母再進行歌曲的播放
INT 21H
CMP AL,'Q' ;輸入大寫Q退出程序
JNZ NEXT
JMP ESC1
MONE: CMP AL,'1' ;輸入1播放MUSIC1
JNZ MTOW
CALL MUSIC1
JMP EXIT1
MTOW: CMP AL,'2' ;輸入2播放MUSIC2
JNZ MTHREE
CALL MUSIC2
JMP EXIT1
MTHREE: CMP AL,'3' ;輸入3播放MUSIC3
JNZ MFOUR ;輸入不正確時要求重新輸入
CALL MUSIC3
JMP EXIT1
MFOUR: CMP AL,'4' ;輸入4播放MUSIC4
JNZ MFIVE ;輸入不正確時要求重新輸入
CALL MUSIC4
JMP EXIT1
MFIVE: CMP AL,'5' ;輸入5播放MUSIC5
JNZ EXIT ;輸入不正確時要求重新輸入
CALL MUSIC5
EXIT1: SHOW SRING3 ;重新輸入
JMP INPUT
;*****重新顯示列表*****
EXIT:
HUICHE
SHOW SRING2
HUICHE
SHOW SRING3
HUICHE
SHOW SRING1
SHOW MUSLIST
JMP INPUT ;重新調用input進行重新輸入操作
;***************************
NEXT: CMP AL,'q' ;輸入小寫Q退出程序
JNZ MONE
ESC1: MOV AH,4CH ;返回DOS
INT 21H
MAIN ENDP
;********發聲程序************
SOUNDF PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AL,0B6H
OUT 43H,AL
MOV DX,12H
MOV AX,348CH
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
WAITL: MOV CX,663H ;時間延遲設定
CALL WAITF
DELAY: LOOP DELAY
DEC BX
JNZ WAITL
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
SOUNDF ENDP
WAITF PROC NEAR
PUSH AX
WAITF1:
IN AL,61H
AND AL,10H
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP WAITF1
POP AX
RET
WAITF ENDP
;***************************
MUSIC1 PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG1;把頻率表的地址放在SI
LEA BP,DS:MUS_TIME1;把時間表的地址放在DI
FREG1: MOV DI,[SI] ;讀下一個頻率
CMP DI,-1;遇到-1就結束
JE END_MUS1
MOV DX,DS:[BP];讀下時間表
CALL SOUNDF
ADD SI,2
ADD BP,2
JMP FREG1
END_MUS1:
RET
MUSIC1 ENDP
MUSIC2 PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG2
LEA BP,DS:MUS_TIME2
FREG2: MOV DI,[SI]
CMP DI,-1
JE END_MUS2
MOV DX,DS:[BP]
CALL SOUNDF
ADD SI,2
ADD BP,2
JMP FREG1
END_MUS2:
RET
MUSIC2 ENDP
MUSIC3 PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG3
LEA BP,DS:MUS_TIME3
FREG3: MOV DI,[SI]
CMP DI,-1
JE END_MUS3
MOV DX,DS:[BP]
CALL SOUNDF
ADD SI,2
ADD BP,2
JMP FREG1
END_MUS3:
RET
MUSIC3 ENDP
MUSIC4 PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG4
LEA BP,DS:MUS_TIME4
FREG4: MOV DI,[SI]
CMP DI,-1
JE END_MUS4
MOV DX,DS:[BP]
CALL SOUNDF
ADD SI,2
ADD BP,2
JMP FREG1
END_MUS4:
RET
MUSIC4 ENDP
MUSIC5 PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG5
LEA BP,DS:MUS_TIME5
FREG5: MOV DI,[SI]
CMP DI,-1
JE END_MUS5
MOV DX,DS:[BP]
CALL SOUNDF
ADD SI,2
ADD BP,2
JMP FREG1
END_MUS5:
RET
MUSIC5 ENDP
CODES ENDS
END MAIN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -