📄 music.asm
字号:
DATA SEGMENT PARA 'DATA'
INFO1 DB 0DH,0AH,'HELLO TEACHER!$'
INFO2 DB 0DH,0AH,'THE SONG IS * THE TWO TIGERS *$'
MUSLIST DB 0DH,0AH,'Q EXIT'
db 0dh,0ah,'$'
MUS_FREG DW 19
DW 2 DUP(262,294,330,262)
DW 2 DUP(330,349,392)
DW 2 DUP(392,440,392,349,330,262)
DW 2 DUP(294,196,262)
DW -1
MUS_TIME DW 1000
DW 8 DUP (1500)
DW 2 DUP (1500,1500,4000)
DW 2 DUP (0,0,0,0,1500,1500)
DW 3 DUP (1500,1500,4000)
DW 3 DUP (1500,1500,4000)
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
MOV AX,DATA
MOV DS,AX
MOV AH, 0
MOV AL,1
INT 10H
;***** SHOW SIGN*****
SHOW MACRO b
LEA DX,b
MOV AH,9
INT 21H
ENDM
;**********************
show INFO1
show INFO2
show MUSLIST
MOV AH,01H
INT 21H
CMP AL,'Q'
JZ retu
CALL MUSIC
RETU: MOV AH,4CH
INT 21H
MAIN ENDP
MUSIC PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_FREG
LEA BP,DS:MUS_TIME
FREG1: MOV DI,[SI]
CMP DI,-1
JE END_MUS1
MOV DX,DS:[BP]
MOV BX,1500
ADD BX,DX
CALL GENSOUND
ADD SI,2
ADD BP,2
JMP FREG1
END_MUS1:
RET
MUSIC ENDP
GENSOUND 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
WAIT1: MOV CX,8FF0H
DELAY1: LOOP DELAY1
DEC BX
JNZ WAIT1
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
GENSOUND ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -