常见错误

1. QEMU启动后没有显示字符

原因A: 缺少引导签名

症状: QEMU显示 “No bootable device” 或 “Boot failed”

解决: 检查是否有引导签名:

xxd -s 510 -l 2 boot.bin
# 应该输出: 000001fe: 55aa

确保代码最后有:

times 510-($-$$) db 0
dw 0xAA55

原因B: 文件大小不是512字节

症状: 同上

解决: 检查文件大小:

ls -l boot.bin
# 应该是 512 字节

原因C: 没有使用 -f bin 格式

症状: 生成的文件很大或格式错误

解决: 确保使用二进制格式输出:

nasm -f bin boot.asm -o boot.bin
# 不是 nasm -f elf boot.asm

2. 显示乱码

原因: 没有正确设置AH寄存器

解决: INT 0x10 功能号 0x0E 需要设置:

mov ah, 0x0E    ; 功能号(不能省略!)
mov al, 'A'     ; 字符
int 0x10

3. NASM报错 “error: parser: instruction expected”

原因: 语法错误

常见问题:

  • 忘记写指令,只写了操作数
  • 标签后面忘记加冒号
  • 大小写问题(NASM标签区分大小写)

4. QEMU窗口空白

原因: 代码没有执行到打印指令

解决: 用GDB单步调试,确认执行流程:

qemu-system-x86_64 -drive format=raw,file=boot.bin -s -S
 
# 另一个终端
gdb -ex "target remote :1234" -ex "set arch i8086" -ex "b *0x7C00" -ex "c"

5. 编译出的文件不是512字节

原因: times 计算错误

解决: 确保代码量没有超过510字节。times 510-($-$$) db 0 中如果 $-$$ 已经超过510,汇编器会报错。

检查方法:减少代码量或检查是否有大量数据定义占用了空间。