软盘相关知识和通过BIOS中断访问软盘

时间:2023-11-10 12:07:20

一、 软盘基础知识介绍

(1) 3.5英寸软盘

  • 3.5英寸软盘分为上下两面,每面有80个磁道,每个磁道又分为18个扇区,每个扇区大小为512个字节。

  • 软盘大小计算: 2面 * 80磁道 * 18扇区 * 512 字节 = 1440KB ≈ 1.44MB

(2) 5.25英寸软盘

  • 5.25英寸软盘每个磁道只有15个扇区,其它的与3.5英寸软盘一样。因此,5.25英寸软盘大小为 1.2MB

磁盘的实际访问由磁盘控制器进行。我们可以通过控制磁盘控制器来访问磁盘。只能以扇区为单位对磁盘进行读写。在读写扇区的时候,要给出面号、磁道号和扇区号。面号和磁道号从0开始,而扇区号从1开始。

二、 使用BIOS的 int 13h 中断访问磁盘

如果通过直接控制磁盘控制器来访问磁盘,则需要涉及许多硬件细节。BIOS提供了对扇区进行读写的中断例程,这些中断例程完成了许多复杂的和硬件相关的工作,我们可以通过调用BIOS中断例程来访问磁盘。

(一) 读软盘

  1. ah = int 13h 的功能号(2表示读扇区)

  2. al = 读取的扇区数

  3. ch = 磁道号

  4. cl = 扇区号

  5. dh = 磁头号(对于软盘即面号,因为一个面用一个磁头来读写)

  6. dl = 驱动器号(软驱从零开始, 0: 软驱A, 1: 软驱B;硬盘需要把第七位置位,从80h开始, 80h:硬盘c,81h:硬盘D)

  7. 返回参数:操作成功,ah = 0,al = 读入的扇区数;操作失败,ah = 出错代码

读取0面0道1扇区内容到0:200的程序如下所示


mov ax,0
mov es,ax
mov bx,200h mov al,1 ;读取1个扇区
mov ch,0 ;磁道号0
mov cl,1 ;扇区号0
mov dl,0 ;软驱A
mov dh,0 ;软盘0面 mov ah,2 ;int 13h 2号功能
int 13h

(二) 写软盘

  1. ah = int 13h 的功能号(3表示写扇区)

  2. al = 写入的扇区数

  3. ch = 磁道号

  4. cl = 扇区号

  5. dh = 磁头号(对于软盘即面号,因为一个面用一个磁头来读写)

  6. dl = 驱动器号(软驱从零开始, 0: 软驱A, 1: 软驱B;硬盘需要把第七位置位,从80h开始, 80h:硬盘c,81h:硬盘D)

  7. 返回参数:操作成功,ah = 0,al = 写入的扇区数;操作失败,ah = 出错代码

将0:200的内容写入0面0道1扇区的程序如下所示


mov ax,0
mov es,ax
mov bx,200h mov al,1 ;读取1个扇区
mov ch,0 ;磁道号0
mov cl,1 ;扇区号0
mov dl,0 ;软驱A
mov dh,0 ;软盘0面 mov ah,3 ;int 13h 2号功能
int 13h