问题
I'm trying to generate a sound with a specific frequency using 8086 assembly. I have searched and searched and found lots of codes regarding connecting to the speaker (not the PC speaker). Yet, none of them seem to work. The following is my code:
mov al, 182 ; meaning that we're about to load
out 43h, al ; a new countdown value
mov ax, 2153 ; countdown value is stored in ax. It is calculated by
; dividing 1193180 by the desired frequency (with the
; number being the frequency at which the main system
; oscillator runs
out 42h, al ; Output low byte.
mov al, ah ; Output high byte.
out 42h, al
in al, 61h
; to connect the speaker to timer 2
or al, 00000011b
out 61h, al ; Send the new value
I think this is supposed to produce a sound until we somehow manage to tell the speaker to turn off. Nonetheless, there's no sound to be heard. Can you please tell me what is wrong with the code?
回答1:
To sum this one up: Your code looks fine. The problem was that you were running it on an 8086 emulator that was not for the PC platform (and hence didn't have a speaker attached to that I/O port).
回答2:
It might be easier to generate a sine wave starting and ending at a zero-crossing, then repeatedly play the file using the built-in OS features.
来源:https://stackoverflow.com/questions/17252257/generating-sound-in-assembly-8086