常见错误
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.asm2. 显示乱码
原因: 没有正确设置AH寄存器
解决: INT 0x10 功能号 0x0E 需要设置:
mov ah, 0x0E ; 功能号(不能省略!)
mov al, 'A' ; 字符
int 0x103. 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,汇编器会报错。
检查方法:减少代码量或检查是否有大量数据定义占用了空间。