关于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
相关产品推荐
相关产品推荐

