📄 test.asm
字号:
stack segment para 'data'
db 64 dup('stack...')
stack ends
;-----------------设置频率和时间--------------------
dseg segment para 'data'
mus_freq dw 196,196,262,196 ;1,2
dw 330,262,392,440 ;3,4
dw 392,392,392,523,523 ;5,6
dw 440,392,349,440,392 ;7,8
dw 392,392,392,440,440 ;1,2
dw 294,294,294,392,349 ;3,4
dw 330,196,196,392,392,440 ;5,6
dw 392,349,330,294,262 ;7,8
dw 262,392,392,523,523 ;1,2
dw 440,440,392,349,392 ;3,4
dw 440,294,294,392,392,440 ;5,6
dw 494,392,440,494,523,523
dw -1
mus_time dw 37,13,50,50 ;1,2
dw 50,50,75,25 ;3,4
dw 50,37,13,50,50 ;5,6
dw 37,13,25,25,100 ;7,8
dw 50,37,13,50,50 ;1,2
dw 50,37,13,75,25 ;3,4
dw 50,37,13,50,25,25 ;5,6
dw 25,25,25,25,100 ;7,8
dw 50,37,13,50,50 ;1,2
dw 50,37,13,75,25 ;3,4
dw 50,37,13,50,23,23 ;5,6
dw 25,25,25,25,100,100
dseg ends
;---------------------------------------
cseg segment para 'code'
assume cs : cseg, ss : stack, ds : dseg
music proc far
push ds
sub ax, ax
push ax
mov ax, dseg
mov ds, ax
lea si, mus_freq ;取去频率表首址
lea bp, ds : mus_time ;取时间表首址
freq: mov al,30h
mov ah,1
int 16h
cmp al,20h
jz pau
jmp npau
pau: mov ah,1
int 21h
cmp al,0dh
jnz pau
jz npau
npau: mov di,[si]
cmp di, -1
je end_mus
mov bx, ds : [bp]
sal bx, 1 ;预定义的32倍
sal bx, 1
sal bx, 1
sal bx, 1
sal bx, 1
sal bx, 1
call gensound
add si, 2
add bp, 2
jmp freq
end_mus:
ret
music endp
;------------------发生函数------------------------------
gensound proc near
push ax
push bx
push cx
push dx
push di
;---------------------------------------------
mov al , 0b6h
out 43h , al ;初始化8253A
;--------------------------------------------
mov dx , 12h ;时间被除数
mov ax , 533h*896
div di
out 42h , al ;写时间常数底字节
mov al , ah
out 42h , al ;写时间常数高字节
in al , 61h ;取当前端口设置
mov ah , al ;保存AL
or al , 3 ;接通扬声器
out 61h , al
;--------------------------------------------
wait1: mov cx , 35000 ;延时
delay: loop delay
dec bx
jnz wait1
;--------------------------------------------
mov al , ah ;恢复原端口设置
out 61h , al
;------------------------------------------------
pop di
pop dx
pop cx
pop bx
pop ax
ret
gensound endp
cseg ends
;----------------------------------------
end music
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -