You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在QEMU模拟器中执行Bootloader提示无引导设备的解决方法咨询

解决QEMU提示“无引导设备”的问题

你的Bootloader代码出现该问题,核心原因是段分离导致地址计算错误,加上可能的编译链接方式不正确,以下是具体解决步骤:

1. 合并代码与数据到同一段

BIOS引导扇区要求所有内容(代码+数据)必须在连续的512字节范围内。你分开使用.text和.data段时,org 0x7c00仅作用于.text段,.data段的起始地址会脱离引导扇区的基址;同时times 510-($-$$)的填充逻辑会失效($$是当前段的起始地址,.data段的$$并非整个引导扇区的起始),最终导致引导签名0xaa55无法落在正确位置,BIOS识别不到可引导设备。

修改后的代码:

org 0x7c00 

section .text
    mov ah, 0x0e  
    mov si, message  

print_loop:
    lodsb            
    or al, al        
    jz done          
    int 0x10        
    jmp print_loop   

done:
    hlt             

message db "Hello, World!", 0 

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

2. 使用正确的编译命令

必须生成原始二进制文件,不能生成ELF等可执行格式(QEMU无法将ELF识别为引导设备)。以NASM为例:

nasm -f bin bootloader.asm -o bootloader.bin

3. 正确启动QEMU

加载生成的二进制文件作为引导设备,命令如下:

# 模拟x86_64架构
qemu-system-x86_64 -drive format=raw,file=bootloader.bin

# 或者模拟32位软盘(更贴近传统引导场景)
qemu-system-i386 -fda bootloader.bin

4. 验证引导扇区有效性

生成的bootloader.bin必须满足两个条件:

  • 文件大小为512字节,可通过ls -l bootloader.bin查看。
  • 最后两个字节为0x55 0xaa(小端序存储,文件中显示为55 aa),可通过hexdump -C bootloader.bin检查。

内容的提问来源于stack exchange,提问作者Shashwat Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:30:03