启动扇区: 1、 offset 00: EB 58 90 JMP指令,字节数 3。灰线。 2、 offset 03: 4D 53 44 $2 53 35 2E 30 MSDOS5.0 厂商版本号。 字节数 8 灰色方框。 以下部分是BIOS block. 3、 offset 0B: 00 02 每扇区字节数:512个 字节数 2. 红色线。 4、 offset 0D: 08 每族占用的扇区数8个。字节数 1. 绿色方框。 5、offset 0E: 26 00 保留扇区中的保留扇区数 38个。字节数 2. 蓝色线。则FAT1的开始地址:38*512=19456=$200. 6、 offset 10: FAT表的个数。一般都为2。 一个作备份用。字节数1. 红色方框线。 7、 offset 11-20 为一些我们不需要操作的信息。所以没有写出来。

以下是FAT32 参数块。 8、 offset 24 E5 0E FAT表占用的扇区数:3813个。 则FAT表占用的字节数就是 3813*512=1952256byte=1DCA00。一共两个FAT共占用 1952256*2=3904512个。

根据启动区、FAT1、FAT2、根目录、数据区的次序,可以依次计算出它们的首地址: 启动区:00 FAT1: 38*512=19456=$200. FAT2: 19456+3813(FAT 表占用的扇区数)*512=1971712=1E1600 根目录区: 1971712+ 3813(FAT 表占用的扇区数)*512=3923968=3BE000. 数据区: 
下面分析根目录区: $2$2$2$2$2$2$2 
这里使用的是FAT32短文件目录项,每32个字节表示一个文件(文件夹也是),32个字节的表示定义分别如下 1、0ffset: 00,红色部分 表示卷标即SD卡名称,是你在格式化时取的一个名子。8个字节。 2、offset: 20 字节数:8个。 表示文件名称。全部是以大写方式表示。文件名:csh302ab. 3、offset:28 字节数:3个。 文件扩展名。 以ASSII码表示。 4、offset 2B 字节数:1个。 文件属性。绿色框。 5、offset $2 reserved. 6、offset 2D,2E,$2 文件建立时间。访问日期。

7、offset 34,35, $2,3B 该文件的开始簇号 高位字节,低位字节。00 00 00 03,根据这个就可以找到文件下一个簇号在FAT1中的位置了。$200+3*4=$2$2.下一个簇开始地址。 8、黑色线。文件长度。$2=148316字节。因为文件是按照整簇来存放的,不够一个簇的大小,也要给一个簇的空间。 下面分析文件的存放空间: 从BOSI 参数块中可以知道其每簇占用8个扇区。每个扇区512字节,那么一个簇的空间是8*512=4096个字节,文件长度为148316个字节,则占用了148316 / 4096=36.2=37个簇。

上面已经从根目录区得到文件第一个开始簇为03 则开始簇开始地址为:3BE000(根目录区首地址)+(03-02)*(8*512)=3BF000.文件存放位置的起始地址: 则文件存放第一个簇开始地址为:3BF000. 文件存放第二个簇开始地址为:3BE000+(4-2) *4096=$20000. 文件存放第三个簇开始地址为:3BE000+(5-2) *4096=$21000. . . 文件存放第37个簇开始地址为:3BE000+(39-2) *4096=3E3000. 内容为0x$2 FF FF FF,文件放置结束,没有了。
|