📄 music.asm
字号:
;extrn gensound:far
stack segment
db 64 dup('Stack...')
stack ends
;_______________________________
data2 segment para 'data'
mess db 'input the time',13,10,'$'
mus_freq dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw 330,392,330,294,330,392,330,294,330
dw 330,392,330,294,262,294,330,392,394
dw 262,262,220,196,196,220,262,294,330,262
dw -1
count db ?
mus_time dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 3 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 2 dup(25),12,12,25,12,12,50
dw 2 dup(25,25,12)
dw 3 dup(25,25,12)
dw 100
data2 ends
;_______________________________
code2 segment para 'code'
assume cs:code2,ss:stack,ds:data2
;________________________________
music proc far
mov ax,data2
mov ds,ax
l2:
lea dx,mess
mov ah,09h
int 21h
mov ah,01h
int 21h
mov count,al
sub count,30h
l1:
lea si,mus_freq ;put the mus_freq table offset in si
lea bp,ds:mus_time ;put the mus_time table offset in bp
freq:
mov di,[si] ;read next frequency
cmp di,-1 ;end of tone
je end_mus ;if yes ,exit
mov bx,ds:[bp] ;else fetch the duration
call far ptr gensound ;play the note
add si,2 ;updata the table point
add bp,2
jmp freq
end_mus:
sub count,1
jnz l1
mov ah,07h
int 21h
cmp al,71h
jnz l2
end1:
mov ax,4c00h
int 21h
music endp
gensound proc far
push ax
push bx
push cx ;save register
push dx
push di
mov al,0b6h ;write time mode register
out 43h,al
mov dx,12h
mov ax,348CH
div di ;value of frequency
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
wait1:
mov cx,2800 ;wair for specified interval
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
code2 ends
end music
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -