防止我以后忘记,我还是记一下吧~虽然都是在别人的基础上随便重复写一下。
然后呢,这里先跟着书上学软盘的,等我以后看完了全部去了解下光盘的做法。终于看完第四章了。。。。。。
一:软盘入门知识
1.首先要了解软盘的构造:(以1.44MB软盘为例)
引导扇区 (扇区号:0)
FAT1 (扇区号:1-9)
FAT2(通常与FAT1) (扇区号:10-18)
根目录区 (扇区号:19-未知)
数据区. (扇区号:未知-2879)
软盘都是以扇区号为单位来区分的。
2.我们可以通过FAT12引导扇区来设置很多信息,EG:扇区总数,每扇区字节数,每簇扇区数,磁头数。。。。等等,注意这些都是可以由我们设置的。
在下面的讲述中,我们都假设每簇只有一个扇区,每个扇区512字节。。。详见P104
3.然后我们通常往软盘写入数据后,数据都在数据区,但是它不一定是连续存放的,那么我们怎么知道某一个文件在数据区的哪些簇(扇区)(这里假定一个簇只有一个扇区,所以可以互换)呢,那么我们要通过根目录和FAT来得到某个文件在数据区的簇号。这里寻找的过程大致如下:
当我们向软盘写入文件后,根目录里面有这个文件的一些信息,根目录的每一个条目占32字节:
文件名 (11字节)
文件属性 (1字节)
保留位 (10字节)
最后一次写入时间 (2字节)
最后一次写入日期 (2字节)
此条目对应的开始簇号(2字节)
文件大小 (4字节)
这里我们只关心2个东西:
第一个:是文件名,它的构造如下文件名8个字节,扩展名3字节,比如:zxx.bin,其中的zxx就是文件名,她没有8个字节怎么办呢,都补空格,bin就是扩展名
第二个:是此条目对应的开始簇号。其实我们得到名字的目的也就是要得到开始簇号。这个开始簇号有2层含义:一层是在FAT中的偏移簇号,一层是在数据区的偏移簇号,他们都是相同的(注意是偏移哦)。他们虽然在不同的扇区,但是却有着密切的联系,可能你会奇怪:不是说数据区里面存的才是内容吗?那我只需要数据区的偏移不就行了吗?要FAT里面的干嘛?确实,第一个内容你可以通过开始簇号找到,但是,不要忘记,我之前说过,一个文件在数据区不一定是连续存放的,那么还有第二个簇号,第三个簇号。。。。你从哪里来呢?
这就是FAT的作用了,你可以通过它找到文件的下个数据区,FAT对应此簇号的内容就是此文件的下一个簇号,直到某个簇号是大于等于0XFF8为止(每一个FAT条目是12位的)。
所以我们的整个过程是这样的:
第一步:首先往软盘写入一个文件,假设名字是zxx.bin
第二步:读取根目录,一个条目一个条目的找,直到找到文件名为zxx.bin的条目,用这个条目的首地址+26得到文件对应的开始簇号B。
第三步:将数据区对应此簇号B的一个扇区内容读入内存
第四步:读取FAT的B簇号内容,根据这个内容找到下一个簇号,然后不断循环第三步第四步,直到B是大于等于0XFF8为止。
其实上面的只是一个大致思想,在我们实际编程的时候还有好多细节要考虑哦...
1. 我们上面的簇号是不能直接使用的,详见P109的int 13h,了解他们的转换。
2. 注意数据区的偏移簇号为2的簇其实是数据区的第一个簇,所以变成的时候要注意减2,这里为什么没有0和1呢,主要是他和FAT对应,FAT的第一个条目和第二个条目是不使用的
等等....都记在了我乱七八糟的书上。。。加油看~