;使用8253实现使用1到8弹奏歌曲 ;其他键退出 data segment message db 'Use 1 ... 8 to play the music','$' frequ dw 262, 294, 330, 347, 392, 440, 494, 524 data ends code segment assume cs:code, ds:data start: mov ax, data mov ds, ax lea dx, message mov ah, 09h int 21h mov al, 10110110b out 43h, al ;set the control next: mov ah, 7 int 21h cmp al, '1' jb exit cmp al, '8' ja exit ;get the frequency of the number sub al, 30h mov ah, 0 mov bx, ax sub bx, 1 shl bx, 1 mov cx, frequ[bx] ;get the counter mov ax, 34dch mov dx, 12h ;DX:AX=1234DCH=1193180D div cx mov bx, ax ;set the counter mov ax, bx out 42h, al ;send the lower mov al, ah out 42h, al ;send th higner in al, 61h ;set the 0 and 1 as '1' or al, 03h out 61h, al mov cx, 0ffffh delay: mov dx, 100h dec_dx: dec dx jnz dec_dx loop delay in al, 61h and al, 11111100b out 61h, al ;open the voice jmp next exit: mov ah, 4ch int 21h code ends end start 
|