BIOS 在视频模式下连续发出蜂鸣声 13h

BIOS continously beeping with video mode 13h

我为引导扇区(512 字节)用 16 位 NASM 汇编写了一个小程序。它使用 BIOS 视频模式 13h 在屏幕上绘制一条白色小条纹。这是代码:

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:


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

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

然而,当编译程序并在真实硬件上对其进行测试时,它在屏幕上产生了漂亮的白色条纹,但 BIOS 出于某种原因产生了连续的 PC 扬声器蜂鸣声。谁能解释为什么会这样,我做错了什么,我应该怎么做?

发生这种情况的原因是 CPU [处理器] 不知道何时停止执行代码,因此它只执行内存中的下一个代码。要停止这种情况,您只需在程序末尾放置一个简单的循环(例如:jmp $),这样 CPU 就会一遍又一遍地不断循环,不再执行任何其他操作。