📄 test.asm
字号:
EXTRN MUSIC:near
CODE SEGMENT
ASSUME CS:CODE
BEGIN:
MOV AX, 40FH
CALL MUSIC
MOV AX, 411H
CALL MUSIC
MOV AX, 413H
CALL MUSIC
MOV AX, 413H
CALL MUSIC
MOV AX, 414H
CALL MUSIC
MOV AX, 414H
CALL MUSIC
MOV AX, 813H
CALL MUSIC
MOV AX, 412H
CALL MUSIC
MOV AX, 412H
CALL MUSIC
MOV AX, 411H
CALL MUSIC
MOV AX, 411H
CALL MUSIC
MOV AX, 410H
CALL MUSIC
MOV AX, 410H
CALL MUSIC
MOV AX, 80FH
CALL MUSIC
JMP BEGIN
MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN
PUBLIC MUSIC
; 1=-1(低音1), 8=1(中音1), 15=+1(高音1), 21=+7(高音7)
; TIMES 1 = One eighth second(八分之一拍)
CNTTBL DW 2411 ;+7
DW 2707 ;+6
DW 3038 ;+5
DW 3410 ;+4
DW 3613 ;+3
DW 4055 ;+2
DW 4552 ;+1
DW 4823 ;7
DW 5413 ;6
DW 6076 ;5
DW 6820 ;4
DW 7226 ;3
DW 8111 ;2
DW 9104 ;1
DW 9645 ;-7
DW 10827 ;-6
DW 12152 ;-5
DW 13641 ;-4
DW 14452 ;-3
DW 16221 ;-2
DW 18208 ;-1
CNTTBL_END LABEL WORD
SOUNDV DW 0
TIMES2 DW 0
MUSIC PROC near
IN:
AL=SOUNDV
AH=TIMES by 1/8 tap
PUSH AX
PUSH BX
PUSH DS
PUSH AX
XOR AH, AH
SHL AX, 1
MOV BX, OFFSET CNTTBL_END
SUB BX, AX
MOV AL, 0B6H
OUT 43H, AL
MOV AX, CS:[BX]
OUT 42H, AL
MOV AL, AH
OUT 42H, AL
IN AL, 61H
OR AL, 3
OUT 61H, AL
POP AX
MOV AL, AH
XOR AH, AH
SHL AX, 1
MOV TIMES2, AX
XOR AX, AX
MOV DS, AX
NEXTTIME:
MOV AX, DS:[46CH]
RECMP:
CMP AX, DS:[46CH]
JZ RECMP
DEC CS:TIMES2
JNZ NEXTTIME
IN AL, 61H
AND AL, 0FCH
OUT 61H, AL
POP DS
POP BX
POP AX
RETF
MUSIC ENDP
CODE ENDS
END MUSIC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -