📄 woniu.asm
字号:
STACK SEGMENT PARA STACK' STACK'
DW 256 DUP(?)
STACK ENDS
DATA SEGMENT
FREQ DW 1 DUP(392,396,392,395,330,392,262,440,392,395)
DW 1 DUP(392,395,392,330,294,262,330,294,297,330)
DW 1 DUP(392,395,392,330,335,294,262,265,294,330)
DW 1 DUP(262,265,220,196,220,196,392,395,392,395)
DW 1 DUP(330,392,262,440,292,392,395,392,395,330)
DW 1 DUP(294,262,330,294,294,330,392,395,330,335)
DW 1 DUP(294,262,265,294,330,262,265,220,196,220)
DW 1 DUP(196,392,395,392,395,330,294,262,440,392)
DW 1 DUP(395,440,262,294,262,294,330,294,262)
DW 1 DUP(0)
TIME DW 1 DUP(25,50,25,50,25,25,50,50,100,25)
DW 1 DUP(50,25,50,25,25,50,50,100,75,25)
DW 1 DUP(50,25,25,50,25,25,50,50,75,25)
DW 1 DUP(50,25,25,50,50,100,25,50,25,50)
DW 1 DUP(25,25,50,50,100,25,50,25,50,25)
DW 1 DUP(25,50,50,100,75,25,50,50,50,25)
DW 1 DUP(25,50,50,75,25,50,25,25,50,50)
DW 1 DUP(100,25,50,25,50,25,25,50,50,50)
DW 1 DUP(25,25,50,50,50,50,100,100,200)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET FREQ
MOV BP,OFFSET TIME
CALL PLAY
MOV AH,4CH
INT 21H
PLAY PROC NEAR
PUSH DI
PUSH SI
PUSH BP
PUSH BX
REPT0: MOV DI,[SI]
CMP DI,0
JE END_PLAY
MOV AH,1
INT 16H
JNZ END_PLAY
MOV BX,DS:[BP]
CMP DI,20
JNZ REPT3
REPT1: MOV CX,2801
REPT2: LOOP REPT2
DEC BX
JNZ REPT1
JMP REPT4
REPT3: CALL SOUND
REPT4: ADD SI,2
ADD BP,2
JMP REPT0
END_PLAY: POP BX
POP BP
POP SI
POP DI
RET
PLAY ENDP
SOUND PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AL,0B6H
OUT 43H,AL
MOV DX,12H
MOV AX,34DCH
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
DELAY: MOV CX,28010
DL10MS: LOOP DL10MS
DEC BX
JNZ DELAY
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
SOUND ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -