主要内容
突破引导扇区512字节的限制。
理论
为了添加更多的内容,引导扇区的512字节显得不足,所以添加一个模块loader将任务交给他来做,而引导扇区负责将loader加载入内存。为了以后操作方便,将软盘做成FAT12格式。
FAT12:从DOS时代就开始使用的文件系统,将磁盘分为扇区,簇,分区等层次。
扇区:磁盘上最小的数据单元
簇:一个或多个扇区
分区:整个文件系统
引导扇区就是整个软盘的第0个扇区,引导扇区有一个叫做BPB的数据结构(在被识别时起作用),在引导扇区之后是两个完全相同的FAT表(表二看作表一的备份),每个占用9个扇区,FAT表之后是根目录区,根目录区之后是数据区。
寻找loader并把他加载入内存的思路:遍历根目录找到相同文件名的文件(规定loader放在根目录中)。
根目录的条目有固定格式(重点关注文件名和开始簇号)。
/数据区的第一个簇的簇号是2,当文件的开始簇号为2时就位于数据区第一个簇。/
通过开始簇号找到数据区的相应位置即可找到数据,对于大于512字节的文件,需要FAT表来找齐所有的簇。
FAT表:每12位称为一个FAT项(一个半字节),代表一个簇,第0和第1个FAT项不使用,从第二个FAT项开始表示数据区的簇,FAT项的值代表文件的下一个簇号,当大于等于0xFF8时,表示本文件最后一个簇,当为0xFF7时,表示是一个坏簇。
实现
1.添加BPB等头信息,以便识别
; 下面是 FAT12 磁盘的头
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 D