常见错误
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, 0x7C005. 栈覆盖引导扇区
原因: 栈设置不当,向下增长覆盖了代码
解决: 栈指针设为 0x7C00,栈向下增长到低地址,不会覆盖引导扇区代码。