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

如何向img软盘指定扇区写入?Int 13/AH=03h写入异常求助

问题分析与解决方法

一、CHS寻址下0/0/10写入失败的原因

你遇到的0/0/10扇区写入失败,大概率是Int 13h/AH=03h的参数寄存器设置错误。该中断的扇区号和柱面号是拆分存储的:

  • CL寄存器低6位存储扇区号(1-63),高2位存储柱面号的低2位
  • CH寄存器存储柱面号的低8位
  • DH存储磁头号

当写入0/0/10时,扇区号10的二进制是00001010,所以CL应该设置为0Ah(二进制00001010,高2位为0,对应柱面0的高2位),CH=0,DH=0。如果代码里错误地把扇区号按10进制直接赋值、或是误操作了CL的高2位,就会导致寻址错误,写入失败。

另外要注意:Int 13h写操作要求缓冲区必须位于内存低64KB区域(即ES:BX指向的地址不能超过0FFFFh),如果程序数据缓冲区在高内存,也会触发写入失败。

二、跨磁头/柱面写入失败的原因

除上述参数问题外,跨磁头/柱面写入失败还有以下常见诱因:

  1. 柱面号参数拆分错误:比如写入柱面号为1时,柱面号二进制是00000001,此时CH取低8位01h,CL的高2位取柱面号高2位00,再加上扇区号(比如1),所以CL=01h。如果直接把柱面号全放到CH、忽略CL的高2位,会寻址到错误柱面。
  2. 软盘介质参数不匹配:VirtualBox模拟的1.44MB软盘CHS参数为80柱面(0-79)、2磁头(0-1)、18扇区/磁道(1-18)。若代码写入超出该范围的CHS值(比如磁头2、柱面80),会直接触发中断失败。
  3. 未提前重置驱动器:写入前未执行AH=00h的Int 13h重置驱动器,可能导致驱动器处于错误状态,无法执行写入操作。

三、Int 26h失败的原因

Int 26h是DOS的绝对磁盘写中断,使用有严格限制:

  • 必须运行在实模式DOS环境下(纯汇编引导程序中无法直接调用,除非已加载DOS)
  • 参数要求CX为写入扇区数,DX为起始逻辑扇区号(逻辑扇区号=柱面磁头数扇区数 + 磁头*扇区数 + 扇区号-1),DS:BX指向缓冲区。若逻辑扇区号计算错误、或未在DOS环境下调用,都会失败。

四、Windows下手动写入软盘扇区的方法

无需汇编的话,有两种简单可行的方案:

  1. 使用dd命令(推荐):通过Git Bash或WSL在Windows中执行,命令格式如下:

    # 将program.bin写入disk.img的第N个逻辑扇区(N从0开始计数)
    dd if=program.bin of=disk.img seek=N bs=512 count=1 conv=notrunc
    

    其中bs=512对应软盘扇区大小,seek=N表示跳过N个扇区后写入,conv=notrunc确保不截断img文件。

  2. 使用WinHex工具:

    • 打开WinHex,加载软盘img文件
    • 按Ctrl+G打开跳转窗口,选择"扇区",输入目标CHS或逻辑扇区号
    • 将需要写入的程序数据复制到对应扇区位置,保存即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:00:35