📄 汇编课设程序(键盘发声).asm
字号:
data segment
table1 dw 131,147,165,175,196,220,247
table2 dw 262,294,330,349,392,440,494
table3 dw 524,588,660,698,784,880,988
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
zyin:
mov ah,07
int 21h
cmp al,0dh
je exit
mov bx,offset table2
cmp al,'a'
jz gaoyin
cmp al,'b'
jz diyin
cmp al,'1'
jb zyin
cmp al,'7'
ja zyin
and ax,0fh
shl ax,1
sub ax,2
mov si,ax
mov di,[bx][si]
mov bx,10000
call soundf
jmp zyin
exit:
mov ah,4ch
int 21h
gaoyin:
mov ah,07
int 21h
cmp al,0dh
je exit
mov bx,offset table3
cmp al,'c'
jz zyin
cmp al,'b'
jz diyin
cmp al,'1'
jb gaoyin
cmp al,'7'
ja gaoyin
and ax,0fh
shl ax,1
sub ax,2
mov si,ax
mov di,[bx][si]
mov bx,10000
call soundf
jmp gaoyin
diyin:
mov ah,07
int 21h
cmp al,0dh
je exit
mov bx,offset table1
cmp al,'a'
jz gaoyin
cmp al,'c'
jz zyin
cmp al,'1'
jb diyin
cmp al,'7'
ja diyin
and ax,0fh
shl ax,1
sub ax,2
mov si,ax
mov di,[bx][si]
mov bx,10000
call soundf
jmp diyin
soundf proc near
push ax
push bx
push cx
push dx
push di
mov al,06bh
out 43h,al
mov dx,12h
mov ax,348ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
back:
mov cx,8ff0h
call waitf
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp
waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -