You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用BIOS video mode 13h的NASM引导扇区代码触发BIOS持续蜂鸣咨询

问题成因

  • 你的引导扇区代码执行完像素绘制逻辑后,没有设置停机逻辑限制CPU执行流,CPU会继续读取start:标签之后的内容作为指令执行,而这部分内容是你为了凑512字节填充的0和末尾的引导魔数0xaa55,属于无效的随机指令,直接导致CPU执行流跑飞失控。
  • 失控的CPU在执行随机指令的过程中,大概率误操作了控制PC扬声器的相关硬件端口:包括8254可编程间隔定时器的通道2、或是I/O端口0x61的扬声器控制位,错误打开了扬声器的方波输出,最终出现持续蜂鸣的现象。

代码存在的错误

缺失执行结束后的停机逻辑,没有阻止CPU继续执行无效的后续内存数据,这是触发蜂鸣的核心原因。

修复方案

只需要在start:标签后添加无限停机逻辑即可,修改后的代码片段如下:

bits 16
org  0x7C00

VIDEO_INT: equ 0x10
VGA_BASE: equ 0xA000

mov ax, 13        
int VIDEO_INT             
push VGA_BASE
pop es
xor di,di
mov ax, 255
mov [es:di], ax
mov [es:di+1], ax
mov [es:di+2], ax
start:
    hlt         ; 让CPU进入暂停状态,仅中断可唤醒
    jmp start   ; 若被中断唤醒则重新回到暂停,彻底阻止执行流跑飞


;--------------------------------------

; make file 512 bytes, just enough to fit in boot sector
times 510-($-$$) db 0
dw 0xaa55 ; boot sector magic number

修改后重新编译运行,即可解决扬声器持续蜂鸣的问题。

内容的提问来源于stack exchange,提问作者ByteBox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:09:03