zoukankan      html  css  js  c++  java
  • 软盘相关知识和通过BIOS中断访问软盘

    一、 软盘基础知识介绍

    (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
    
    
    
  • 相关阅读:
    [Swift]LeetCode472. 连接词 | Concatenated Words
    [Swift]LeetCode470. 用 Rand7() 实现 Rand10() | Implement Rand10() Using Rand7()
    [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密
    [Swift通天遁地]七、数据与安全-(18)使用Swift实现原生的MD5加密
    [Swift通天遁地]七、数据与安全-(17)使用Swift实现原生的3DES加密和解密
    poj 1265 Area(pick 定理)
    Visual C++文件后缀名释义
    Linux 设备文件的创建和mdev
    37、ifconfig命令
    iOS开发- 生成/解析.vcf文件
  • 原文地址:https://www.cnblogs.com/ay-a/p/9058574.html
Copyright © 2011-2022 走看看