Audio 在组件8086中产生声音

Audio 在组件8086中产生声音,audio,assembly,x86-16,Audio,Assembly,X86 16,我试图用8086组件产生一种特定频率的声音。我已经搜索了很多关于连接扬声器的代码(不是PC扬声器)。然而,它们似乎都不起作用。以下是我的代码: 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.

我试图用8086组件产生一种特定频率的声音。我已经搜索了很多关于连接扬声器的代码(不是PC扬声器)。然而,它们似乎都不起作用。以下是我的代码:

    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

我认为这应该会产生声音,直到我们设法告诉扬声器关掉。尽管如此,还是听不到任何声音。你能告诉我代码有什么问题吗?

总结一下:你的代码看起来不错。问题是,您在一个不适用于PC平台的8086仿真器上运行它(因此没有将扬声器连接到该I/O端口)。

总之,您的代码看起来很好。问题是,您在不适用于PC平台的8086仿真器上运行它(因此没有扬声器连接到该I/O端口)。

可能更容易生成以过零开始和结束的正弦波,然后使用内置操作系统功能重复播放文件。

可能更容易生成以过零开始和结束的正弦波,然后使用内置操作系统功能重复播放文件。

该代码确实尝试访问PC扬声器。如何运行它?在emu8086模拟器中。有什么问题吗?根据我所读的,它没有模拟PC硬件,所以在您试图访问的I/O端口没有扬声器。如果你想要的话,用类似的东西。哦,我明白了!如果我试图访问一个外部扬声器,我可以用汇编来完成吗?是的,但这要困难得多。请参阅文档以了解和硬件。该代码确实尝试访问PC扬声器。如何运行它?在emu8086模拟器中。有什么问题吗?根据我所读的,它没有模拟PC硬件,所以在您试图访问的I/O端口没有扬声器。如果你想要的话,用类似的东西。哦,我明白了!如果我试图访问一个外部扬声器,我可以用汇编来完成吗?是的,但这要困难得多。请参阅文档以了解系统和硬件。