常见错误

1. “Disk read error!” 错误

原因A: 磁盘映像太小

症状: BIOS无法读取请求的扇区数。

解决: 确保磁盘映像包含足够的扇区:

ls -l os-image.bin
# 应该至少 512 + 15*512 = 8192 字节

原因B: 驱动器号错误

症状: 读取错误(DL寄存器不正确)。

解决: 使用BIOS启动时传递的驱动器号:

mov [BOOT_DRIVE], dl    ; 在初始化段寄存器之前保存

原因C: QEMU磁盘格式

解决: 确保使用 -drive format=raw,file=os-image.bin。

2. “Incorrect number of sectors read!”

原因: 实际读取的扇区数与请求不符

解决: 减少请求的扇区数,或确保磁盘映像足够大。

3. 没有显示 “Kernel loaded!”

原因: 程序卡在磁盘读取

调试: 在 disk_read 调用前加一个打印语句确认执行到了那里。

4. 段寄存器未初始化导致的奇怪行为

原因: BIOS不保证段寄存器的初始值

解决: 始终在开始时初始化段寄存器:

xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7C00

5. 栈覆盖引导扇区

原因: 栈设置不当,向下增长覆盖了代码

解决: 栈指针设为 0x7C00,栈向下增长到低地址,不会覆盖引导扇区代码。