汇编音乐演奏代码问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 21:06:52
SHOW MACRO b ;**********************显示字符串宏
LEA DX,b ;********************** 串的地址放到DX中
MOV AH,9 ;*********************显示字符串
INT 21H
ENDM
;**********************音乐地址宏
ADDRESS MACRO A,B
LEA SI,A ;****************音乐地址A放到源地址变址寄存器中
LEA BP,DS:B ;***********音乐地址B放到基址指针寄存器中
ENDM
;***********************
show INFO1
show INFO2
show INFO3
show MUSLIST
INPUT: MOV AH,01H
INT 21H
CMP AL,'0'
JZ retu
CMP AL,'1'
JNZ B0
ADDRESS MUS_FREG1,MUS_TIME1
CALL MUSIC
JMP EXIT1
B0: CMP AL,'2'
JNZ C0
ADDRESS MUS_FREG2,MUS_TIME2
CALL MUSIC
JMP EXIT1
C0: CMP AL,'3'
JNZ exit
ADDRESS MUS_FREG3,MUS_TIME3
CALL MUSIC
EXIT1: show INFO5
JMP INPUT
EXIT:
call clear
show INFO4
show INFO5
show INFO1
show INFO2
show INFO3
show MUSLIST
jmp inp

sound: ;演奏子程序
mov al,0b6h
out 43h,al ;设定方波模式
mov dx,14h ;定时器发音常数
mov ax,4f38h
div word ptr [si] ;频率
out 42h,al ;输出低位
mov al,ah
out 42h,al ;输出高位
in al,61h ;读控制字
mov ah,al
or al,03h
out 61h,al ;开启扬声器
mov bx,3600;延时1秒
R1:mov cx,2801H
loop $
dec bx
jnz R1
mov al,ah ;关闭扬声器
out 61h,al
ret