?? music.asm
字號:
DATA SEGMENT PARA 'DATA'
MUS_hz DW 1,2,3,3,4 DUP (6)
DW 7 DUP (4),5, 6,7
DW 6,7,8,9,4 DUP (3)
DW 2,4,5,3,7
DW 9,9,3,9,2,-1
TM1 DB 2,2,2,4,2,2,2,2,2,2,4,2,4,2,2,2,2,2,2,2,2,2,
2,2,12,2,2,2,2,2,2,2,8,2,2,
2,2,2,2,2,4,4,2,2,2,2,2,12
ATM1 EQU 1000
YF DW ?
TM DW ?
TIME DW ?
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
INPUT: MOV AH,01H
INT 21H
CMP AL,'Q'
JZ rete
;M1: LEA SI,YF1
;MOV YF,SI
;LEA SI,TM1
;MOV TM,SI
CALL MUSIC
JMP EXIT
EXIT: JMP INPUT
RETE: MOV AH,4CH
INT 21H
MAIN ENDP
MUSIC PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
LEA SI,MUS_hz
START: MOV DI,[SI]
CMP DI,-1
JE END_MUS
MOV DX,DS:[BP]
MOV BX,2000
CALL GENSOUND
INC SI
ADD BP,2
JMP START
END_MUS: RET
MUSIC ENDP
GENSOUND PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
BEG: MOV AL,0B6H
OUT 43H,AL
MOV AL,[SI]
OUT 42H,Al
INC SI
MOV AH,[SI]
OUT 42H,AL
CALL OPEN
WAITIME:
MOV TIME,0FFfFH
DELAY:
DEC TIME
CMP TIME,0
JNZ DELAY
DEC BX
JNZ WAITIME
CALL CLOSE
;MOV AL,AH
;OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
GENSOUND ENDP
OPEN PROC
IN AL,61H
OR AL,00000011B
OUT 61H,AL
RET
OPEN ENDP
CLOSE PROC
IN AL,61H
AND AL,11111100B
OUT 61H,AL
RET
CLOSE ENDP
CODE ENDS
END MAIN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -