以下代码如何让PC发出哔哔声?

Dri*_*Boy 1 c windows beep

void Sound(int f)
{  
    USHORT   B=1193180/f; 

    UCHAR temp = In_8(0x61);
    temp = temp | 3; 
    Out_8(0x61,temp);

    Out_8(0x43,0xB6);
    Out_8(0x42,B&0xF);
    Out_8(0x42,(B>>8)&0xF);
}
Run Code Online (Sandbox Code Playgroud)

In_8/ Out_8从指定端口读取/写入8位(省略实现细节).

怎么让PC发出哔哔声?

UPDATE

为什么&0xF在这里使用?不应该0xFF吗?

Rol*_*lig 5

PC有一个8255定时器芯片,使用端口0x61,0x43和0x42进行控制.

当端口0x61位0设置为1时,这意味着"打开连接到扬声器的定时器".当端口0x61位1设置为1时,这意味着"打开扬声器".

这是在代码的第一段中完成的.

第二部分将"魔术值"0xB6置于端口0x43上,这意味着到达端口0x42的后续两个字节将被解释为定时器频率的除数.该分区的结果频率(1193180 /除数)将被发送到扬声器.

http://gd.tuwien.ac.at/languages/c/programming-bbrown/advcw3.htm#sound