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

使用Bochs调试VirtualBox中BootLoader遇磁盘扇区读取错误求助

BootLoader 调试时 Bochs 磁盘读取错误修复方案

你执行int 0x13磁盘读取中断时触发的错误,核心原因是软盘镜像不满足读取要求,或是Bochs配置、代码逻辑存在疏漏,以下是具体分析和解决步骤:

你的BootLoader代码

mov ax,0x0820
mov es,ax
mov ch,0
mov dh,0
mov cl,2
mov ah,0x02
mov al,1
mov bx,0
mov dl,0x00
int 0x13

times (510-($-$$)) db 0
db 0x55,0xaa

触发的错误信息

00017307933i[FLOPPY] attempt to read/write sector 2 with media not present
00025271896i[FLOPPY] controller reset in software
00025288589e[CPU0 ] read_virtual_checks(): read beyond limit

错误原因

  1. 软盘镜像容量不足:代码尝试读取第2扇区,但如果你的镜像只写入了BootLoader(仅1个扇区),Bochs会判定该扇区不存在,触发介质缺失错误。
  2. Bochs配置未正确关联镜像:若配置文件中未指定完整路径的软盘镜像,或镜像格式不匹配,会导致模拟器无法识别软盘介质。
  3. 未处理磁盘读取失败:int 0x13执行失败时会设置CF标志位,代码未做检查,会继续执行非法内存访问,触发read beyond limit错误。

修复步骤

  • 生成标准软盘镜像
    用dd命令创建1.44MB标准软盘镜像(包含2880个扇区,足够容纳后续数据):

    dd if=/dev/zero of=boot.img bs=512 count=2880
    

    将编译好的BootLoader写入镜像第1扇区:

    dd if=boot.bin of=boot.img bs=512 count=1 conv=notrunc
    
  • 修正Bochs配置
    确保bochsrc配置文件中正确指定软盘镜像和启动方式:

    floppya: 1_44=boot.img, status=inserted
    boot: floppy
    

    注意镜像路径要和Bochs运行目录一致,或使用绝对路径。

  • 添加磁盘读取错误检查
    在int 0x13调用后增加错误处理逻辑,避免非法执行:

    mov ax,0x0820
    mov es,ax
    mov ch,0
    mov dh,0
    mov cl,2
    mov ah,0x02
    mov al,1
    mov bx,0
    mov dl,0x00
    int 0x13
    jc disk_error  ; CF置位则跳转到错误处理
    
    ; 正常执行逻辑,这里可以添加后续代码
    jmp $  ; 无限循环
    
    

disk_error:
; 可选:添加错误提示,比如通过BIOS中断输出字符串
jmp $ ; 停在错误处方便调试

times (510-($-$$)) db 0
db 0x55,0xaa

- **确认编译流程正确**
用nasm编译代码:
```bash
nasm boot.asm -o boot.bin

确保编译无报错后再写入镜像,避免镜像损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:27