📄 flower.asm
字号:
cseg segment para 'data'
assume cs:cseg
tone proc far
push ds
sub ax,ax
push ax
;
mov al,0b6h ;(al)=1011 0110
out 43h,al ;设置计数器2输出方波
;求计数值
in al,61h ;置61H口b0,b1位为1
mov ah,al ;保存61H口原值
or al,3 ;b0为1打开定时器2
out 61h,al ;b1为1打开与门
newchar:
mov ah,0
int 16h
cmp al,1bh
je exit
;高音1-7
cmp al,31h
jne isitg2
mov di,524
jmp jishuzhi
isitg2: cmp al,32h
jne isitg3
mov di,588
jmp jishuzhi
isitg3: cmp al,33h
jne isitg4
mov di,660
jmp jishuzhi
isitg4: cmp al,34h
jne isitg5
mov di,698
jmp jishuzhi
isitg5: cmp al,35h
jne isitg6
mov di,784
jmp jishuzhi
isitg6: cmp al,36h
jne isitg7
mov di,880
jmp jishuzhi
isitg7: cmp al,37h
jne isitz1
mov di,988
;中音1-7
isitz1: cmp al,71h
jne isitz2
mov di,262
jmp jishuzhi
isitz2: cmp al,77h
jne isitz3
mov di,294
jmp jishuzhi
isitz3: cmp al,65h
jne isitz4
mov di,330
jmp jishuzhi
isitz4: cmp al,72h
jne isitz5
mov di,349
jmp jishuzhi
isitz5: cmp al,74h
jne isitz6
mov di,392
jmp jishuzhi
isitz6: cmp al,79h
jne isitz7
mov di,440
jmp jishuzhi
isitz7: cmp al,75h
jne isitd1
mov di,494
jmp jishuzhi
;低音1-7
isitd1: cmp al,61h
jne isitd2
mov di,131
jmp jishuzhi
isitd2: cmp al,73h
jne isitd3
mov di,147
jmp jishuzhi
isitd3: cmp al,64h
jne isitd4
mov di,165
jmp jishuzhi
isitd4: cmp al,66h
jne isitd5
mov di,175
jmp jishuzhi
isitd5: cmp al,67h
jne isitd6
mov di,196
jmp jishuzhi
isitd6: cmp al,68h
jne isitd7
mov di,220
jmp jishuzhi
isitd7: cmp al,6ah
jne jishuzhi
mov di,247
jishuzhi:
mov dx,12h ;(dx,ax)=1234deH
mov ax,34deh ;时钟频率=1.1931818MHZ
div di
;写计数值
out 42h,al ;先写低字节计数值
mov al,ah ;后写高字节计数值
out 42h,al
jmp newchar
exit: mov al,48h
out 61h,al
ret
tone endp
;-------------------------------------------------------
cseg ends
;********************************************************
end tone
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -