16字节DOS程序:用谢尔宾斯基三角形奏响音乐

16字节DOS程序:用谢尔宾斯基三角形奏响音乐

_

这是一枚仅 16 字节的 x86 DOS 程序,却在屏幕上绘出无限延伸的谢尔宾斯基三角形,同时让 PC 扬声器发出自相似的脉冲波形音乐。

程序怎么同时造画面和声音

代码利用了两个系统特性。一是视频内存初始化:BIOS 清屏后,每个字符位置填充的是 0x20(空格)和 0x07(浅灰)这两字节的固定模式,而非零。二是 PC 扬声器可通过端口 0x61 直接驱动——其中的第 1 位控制锥体的推出与拉回,产生方波。

程序逻辑极简:用 lodsb 读取显存中的字节,用 sub si, 57 让地址每次后退 57 字节(跨越 8192 像素宽的“虚拟屏幕”),用 xor [si], al 把读出的值写回原位,同时把这个结果直接写入端口 0x61 推动喇叭。循环往复,形成不断自我迭代的计算过程。

数学解释:二维胞元自动机

若假设显存初始全为零、把 xor 换成加法,并按步长 16 前进,则每个地址累加的值服从二项式序列的缩放:

A^(p)[k] ≡ 2·C(k+p, p-1) (模 256)

由于 65536/16=4096 是 256 的整数倍,寄存器溢出时 carry 自动对齐,形成所谓的“自相似 bytebeat”。当仅保留最低位的奇偶性(bit 1)时,这个加法表恰好映射到 Elementary Cellular Automaton 的 Rule 60——每位新胞等于左上胞与本位胞的异或。这正是谢尔宾斯基三角形在离散格点上的生成规则。

因此,程序输出的 0 与 1 序列既是屏幕上的分形图案,也是驱动喇叭的方波信号。

编注:信源为作者本人发布的技术博客,含谢尔宾斯基分形与 bytebeat 音乐的数学推导。材料侧重程序原理与算法逻辑,未涉及作者个人开发经历细节。


Chrome 推声明式部分更新 API:打破 HTML 有序加载局限 2026-05-24
美司法部删除1月6日案件新闻发布 被批系统性改写国会山事件历史 2026-05-24