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

为何x86引导扇区中MOV [ebr_drive_number],dl能正常读取FAT12磁盘?

关于BIOS中断INT 13H功能2的驱动器号问题解析

核心原因拆解

  • BIOS启动时的DL寄存器初始值:当BIOS将MBR加载到0x7C00地址执行时,DL寄存器已经被BIOS自动设置为当前启动驱动器的编号(例如软盘驱动器为0x00,硬盘驱动器为0x80)。
  • 原代码能正常工作的逻辑:
    原代码中MOV [ebr_drive_number],dl只是将BIOS提供的有效驱动器号备份到内存变量ebr_drive_number中,DL寄存器本身的正确值并未被修改。后续调用disk_read函数(内部必然会触发INT 13H功能2)时,DL仍保留着BIOS传入的有效驱动器号,因此磁盘读取能正常执行。
  • 修改后代码失效的逻辑:
    修改后的MOV dl,[ebr_drive_number]是将内存变量的值加载到DL寄存器,但ebr_drive_number被定义为DB 0,此时还未被写入任何有效驱动器号,DL会被设置为初始值0。如果当前系统是从硬盘启动(驱动器号应为0x80),这个错误的驱动器号会导致INT 13H功能2无法定位到正确的磁盘,自然无法读取数据。

关键细节提醒

原代码的操作是备份有效驱动器号,而非覆盖或修改DL;修改后的操作则是用未初始化的无效值覆盖了DL中原有的正确驱动器号,这才是读取失败的本质原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:54:58