?? bb.asm
字號:
DATA SEGMENT
INFO1 DB 0DH,0AH,' WELCOME YOU TO COME HERE!',0DH,0AH,'$'
INFO2 DB 0DH,0AH,' THIS IS A MUSIC PROGRAM!','$'
INFO3 DB 0DH,0AH,' PLEASE SELECT!',0DH,0AH,'$'
INFO4 DB 0DH,0AH,' INPUT ERROR!','$'
INFO5 DB 0DH,0AH,' PLEASE INPUT AGAIN!' ,0DH,0AH,'$'
MUSLIST DB' ****************************************',0DH,0AH
DB' * THE MUSIC MENU IS THAT: * ',0DH,0AH
DB' * 1:CHRISTMAS RING * ',0DH,0AH
DB' * 2:MUSIC2 * ',0DH,0AH
DB' * 3:MUSIC3 * ',0DH,0AH
DB' * 4:JU HUA TAI * ',0DH,0AH
DB' * 5:OPEN FILE * ',0DH,0AH
DB' * 6:EXIT * ',0DH,0AH
DB' ****************************************',0DH,0AH,'$'
DATABUFF DB 1024 DUP(?)
FHANDLE DW ?
FNAME DB 255,30,255 DUP(?)
BIAO1 DB 52,58,66,70,78,88,99
BIAO2 DB 100,200
MUS_FREG1 DW 7 DUP(330),392,262,294,330,4 DUP(349),2 DUP(330),330,294,294,262,294,392
DW 7 DUP(330),392,262,294,330,4 DUP(349),2 DUP(330),392,392,349,294,262,0
MUS_TIME1 DW 2 DUP(25*400,25*400,50*400),4 DUP(25*400),100*400,2 DUP(25*400,25*400,50*400)
DW 4 DUP(25*400),2 DUP(50*400),2 DUP(25*400,25*400,50*400)
DW 4 DUP(25*400),100*400,2 DUP(25*400,25*400,50*400),4 DUP(25*400),100*400
MUS_FREG2 DW 262,262,392,392,440,440,392,349,349,330,330,294,294,262
DW 2 DUP(392,392,349,349,330,330,294)
DW 262,262,392,392,440,440,392,349,349,330,330,294,294,262,0
MUS_TIME2 DW 3 DUP(6 DUP(25*400),50*400,6 DUP(25*400),50*400)
MUS_FREG3 DW 262,262,294,262,349
DW 330,262,262,294,262
DW 392,349,262,262,523
DW 440,349,262,262,466
DW 466,440,262,392,349,0
MUS_TIME3 DW 10000,20000,20000,20000,20000
DW 20000,20000,10000,10000,20000
DW 20000,20000,20000,10000,10000
DW 20000,20000,20000,20000,20000
DW 10000,20000,20000,20000,20000
M4 DW 659,659,578,659,659,784,659,578,659,523,523,578,659,784,659,578,523,578
DW 659,784,659,880,784,880,784,784,659 ,392,0
MT4 DW 20000,15000,10000,25000,10000,10000,10000,10000,25000,15000,4 DUP(10000),15000
DW 10000,2 DUP(10000), 10000,25000
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 200 DUP ('STACK')
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
MAIN PROC FAR
START:
MOV AX,DATA ;數據段段地址送DS
MOV DS,AX
MOV AH, 0 ;BIOS調用設置顯示方式640*480 16色圖形
MOV AL,12H
INT 10H
MOV AH,0BH ;BIOS調用設置背景顏色
MOV BH,0
MOV BL,5
INT 10H
MOV AH,0BH ;BIOS調用設置調色板
MOV BH,01H
MOV BL,00
INT 10H
SHOW MACRO B ;字符串顯示宏
LEA DX,B
MOV AH,9
INT 21H
ENDM
SHOW INFO1
SHOW INFO2
SHOW INFO3
SHOW MUSLIST
INP: MOV AH,01H ;DOS調用從鍵盤輸入字符
INT 21H
CMP AL,'6' ;輸入6則退出
JZ RETU
CMP AL,'1' ;輸入1則演奏CHRISTMAS RING
JNZ B0
CALL MUSIC1
JMP EXIT1
B0: CMP AL,'2' ;輸入2則演奏MUSIC2
JNZ C0
CALL MUSIC2
JMP EXIT1 ;輸入3演奏MUSIC3
C0: CMP AL,'3'
JNZ D0
CALL MUSIC3
JMP EXIT1
D0: CMP AL,'4' ;輸入4演奏 菊花臺
JNZ E0
CALL MUSIC4
JMP EXIT1
E0: CMP AL,'5' ;輸入5 則轉入文件輸入演奏文件音樂
JNZ EXIT
;CALL WEN
JMP EXIT1
EXIT1: SHOW INFO5
JMP INP
EXIT:
;CALL CLEAR
MOV AH, 0 ;BIOS調用設置顯示方式640*480 16色圖形
MOV AL,12H
INT 10H
MOV AH,0BH ;BIOS調用設置背景顏色
MOV BH,0
MOV BL,5
INT 10H
MOV AH,0BH ;BIOS調用設置調色板
MOV BH,01H
MOV BL,00
INT 10H
SHOW INFO4 ;顯示提示字符
SHOW INFO5
SHOW INFO1
SHOW MUSLIST
JMP INP
RETU: MOV AH,4CH ;退出DOS
INT 21H
MAIN ENDP
MUSIC1 PROC NEAR ;音樂1演奏子程序
LEA SI,MUS_FREG1 ;頻率首地址裝入SI
LEA BP,MUS_TIME1 ;持續時間首地址裝入BP
F1: MOV DI,[SI] ;把頻率值送DI
CMP DI,0 ; 判斷樂譜是否結束0結束退出
JE END_MUS1
MOV BX,DS:[BP] ;把持續時間值送BX
;CALL GENSOUND ;調用發音子程序
ADD SI,2 ;使地址指向下一個頻率
ADD BP,2 ;使地址指向下一個時間
JMP F1 ;循環演奏
END_MUS1:
RET ;返回(MUSIC 2 3 4與1相似)
MUSIC1 ENDP
MUSIC2 PROC NEAR
LEA SI,MUS_FREG2
LEA BP,MUS_TIME2
F2: MOV DI,[SI]
CMP DI,0
JE END_MUS2
MOV BX,DS:[BP]
;CALL GENSOUND
ADD SI,2
ADD BP,2
JMP F2
END_MUS2:
RET
MUSIC2 ENDP
MUSIC3 PROC NEAR
LEA SI,MUS_FREG3
LEA BP,MUS_TIME3
F3: MOV DI,[SI]
CMP DI,0
JE END_MUS3
MOV BX,DS:[BP]
;CALL GENSOUND
ADD SI,2
ADD BP,2
JMP F3
END_MUS3:
RET
MUSIC3 ENDP
MUSIC4 PROC NEAR
LEA SI,M4
LEA BP,MT4
F4: MOV DI,[SI]
CMP DI,0
JE END_MUS4
MOV BX,DS:[BP]
;CALL GENSOUND
ADD SI,2
ADD BP,2
JMP F4
END_MUS4:
RET
MUSIC4 ENDP
CODE ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -