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

关于int 13h磁盘操作的代码调试与原理咨询

INT 13H磁盘操作问题与汇编伪指令解析

一、写入第3扇区无生效的可能原因

  • 未正确检查INT 13H返回状态:INT 13H的写操作(功能号0x03)执行后,必须检查CF标志位——CF=0才表示写入成功,CF=1时AH寄存器会返回错误码(比如0x03是磁盘写保护,0x02是地址标记无效)。你说“无报错”可能只是没触发明显崩溃,但实际写入已经失败,务必在调用后加状态判断。
  • 驱动器参数错误:DL寄存器必须指定正确的驱动器号(软盘通常是0x00对应A盘),如果DL值不对,写操作会静默失败。
  • 磁盘镜像只读:如果用模拟器(比如QEMU)加载软盘镜像时没开启可写权限,或者镜像文件本身是只读属性,写入操作会被底层拦截,不会真正写入磁盘镜像。
  • 未同步磁盘缓存:部分模拟器或老硬件需要在写入后调用INT 13H的0x0D功能(重置磁盘系统),确保缓存中的数据刷入磁盘,否则后续读取可能还是旧内容。
  • CHS寻址参数错误:INT 13H的0x03功能需要指定柱面号(CH)、磁头号(CL的高2位+CH)、扇区号(CL的低6位),如果这些参数和第3扇区的实际CHS地址不匹配,写入会落到错误的扇区,自然读不到'B'。

二、times 512 db 'A'的工作原理

times 512 db 'A'是汇编器(比如NASM)的伪指令,作用是在编译阶段生成512个ASCII值为0x41(即'A')的字节,这些字节会被直接嵌入最终生成的二进制文件中。

当你把这个二进制文件作为软盘镜像使用时:

  • 二进制文件的前512字节对应软盘的第1扇区(引导扇区),如果times 512 db 'A'写在引导扇区代码之后,它会占据二进制文件的第513-1024字节,对应软盘的第2扇区(INT 13H的扇区编号通常从1开始计数)。
  • 你运行引导程序时,用INT 13H读扇区,本质是把磁盘镜像里的这些预生成的'A'字节读到内存缓冲区中——并不是直接读取汇编定义的“内存数据”,因为编译后的二进制已经被写入磁盘镜像,运行时的读操作是从磁盘(或镜像)加载到内存的。

简单说:这个伪指令是在编译时把数据“固化”到磁盘镜像里,运行时需要通过磁盘读操作把它加载到内存,而非直接在内存中存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:10:33