公告

Gentoo交流群:87709706 欢迎您的加入

#1 2022-08-26 15:05:34

batsom
管理团队
注册时间: 2022-08-03
帖子: 594
个人网站

硬盘BPB信息

BS_OEMName    DB 'ForrestY'    ; OEM String, 必须 8 个字节
    BPB_BytsPerSec    DW 512        ; 每扇区字节数
    BPB_SecPerClus    DB 1        ; 每簇多少扇区
    BPB_RsvdSecCnt    DW 1        ; Boot 记录占用多少扇区
    BPB_NumFATs    DB 2        ; 共有多少 FAT 表
    BPB_RootEntCnt    DW 224        ; 根目录文件数最大值
    BPB_TotSec16    DW 2880        ; 逻辑扇区总数
    BPB_Media    DB 0xF0        ; 媒体描述符
    BPB_FATSz16    DW 9        ; 每FAT扇区数
    BPB_SecPerTrk    DW 18        ; 每磁道扇区数
    BPB_NumHeads    DW 2        ; 磁头数(面数)
    BPB_HiddSec    DD 0        ; 隐藏扇区数
    BPB_TotSec32    DD 0        ; wTotalSectorCount为0时这个值记录扇区数
    BS_DrvNum    DB 0        ; 中断 13 的驱动器号
    BS_Reserved1    DB 0        ; 未使用
    BS_BootSig    DB 29h        ; 扩展引导标记 (29h)
    BS_VolID    DD 0        ; 卷序列号
    BS_VolLab    DB 'OrangeS0.02'; 卷标, 必须 11 个字节
    BS_FileSysType    DB 'FAT12   '    ; 文件系统类型, 必须 8个字节 


读软盘 中断13h
------------------------------------------------------------------------------------------
中断号        |            寄存器                                   |  作用               |
------------------------------------------------------------------------------------------
              |ah=00h                    dl=驱动器号(0表示A盘)      |  复位软驱           |
              |---------------------------------------------------------------------------
              |ah=02h                    al=要读取的扇区数          |从磁盘将数据读       |
13h           |ch=柱面(磁道)号           cl=起始扇区号              |入es:bx指向的        |
              |dh=磁头号                 dl=驱动器号(0表示A盘)      |缓冲区               |
              |es:bx->数据缓冲区                                   |                     |
-----------------------------------------------------------------------------------------





BPB参数
      好了,接下来重点来了。首先,最开始的3各字节的数据分别是跳转指令与空指令,因为在汇编当中0xEB是跳转指令,0x58是跳转的地址,而0x90则是空指令。至于为什么要在这里放上一句跳转指令呢,这个还得从启动区开始讲起,为了节约篇幅,我就简单介绍一下:一般第一个扇区叫做启动区,cpu把扇区当中的数据当作指令来执行,当读取到EB 58 这个指令时,遍跳转到0x58这个地址并继续读取指令来执行,而0x58地址之后的内容通常都是载入操作系统的指令。如果希望知道详细内容的读者不妨去看一下《30天自制操作系统》这本书,第一天结尾部分有很详细的说明。总之这边的话FAT32规定这个3各字节的内容必须是EB 58 90,只要记住就行了(笑)。(如1L所说,EB 58 90 对应汇编代码即为JUMP 0x58; NOP;)。

       而从0x03~0x0A这8个字节的数据表示OEM,这里即为“MSDOS5.0”。

离线

页脚

Powered by FluxBB

本站由XREA提供空间支持