;---------------------------------------------------------
;控制扬声器发声,可惜声音不大
;---------------------------------------------------------
.model small
data segment
sntimes dw 10000 ;发声频率
sndelay dw 10000 ;延迟时间
data ends
code segment
assume cs:code,ds:data
;---------------------------------------------------------
;结束程序,回到 DOS
;---------------------------------------------------------
macExit macro
mov ah,4ch
int 21h
endm
;---------------------------------------------------------
; 控制扬声器发声
; cx:发声频率 bx:延迟时间
;---------------------------------------------------------
makeSound proc far
push ax
push dx
mov dx,cx
in al,61h ;61h 为 I/O 地址
and al,11111100b ;第 1 位为控制发声的开关,第 0 位不用
mkSound: xor al,2 ;是第 0 位的值 0,1交替
out 61h,al
mov cx,bx
mkSnDelay: loop mkSnDelay
dec dx
jnz mkSound
pop dx
pop ax
ret
makeSound endp
;---------------------------------------------------------
;主过程
;---------------------------------------------------------
main proc far
mov ax,data
mov ds,ax
mov bx,sntimes
mov cx,sndelay
call makeSound
macExit
main endp
code ends
end main
评论