data segment
freq dw 262,294,330,349,392l,440,494
data ends
code segment
assume ds:data, cs:code
main proc far
start: push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov al,10110110b ;8253定时器2初始化
out 43h, al
in al,61h ;读pb口
or al,03h
out 61h,al ;pb0, pb1=’1’, 打开声音
again: mov ah, 1 ;dos功能调用,键盘输入并回显
int 21h ;按键(键入的ascii码值在al中)
cmp al,1bh ; ‘Esc’退出
jz exit
lea si, freq
and ax,0fh ;ax中得到按键值1~7。
shl ax, 1;双字节
sub ax, 2;地址从0000开始
add si, ax ;si 指向对应的频率值
mov di, [si]
mov dx, 12h
mov ax, 34f0h