Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226360
  • 博文数量: 45
  • 博客积分: 1850
  • 博客等级: 上尉
  • 技术积分: 473
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-11 10:21
文章分类
文章存档

2006年(17)

2005年(28)

我的朋友

分类:

2006-03-23 11:07:01

磁盘的文件系统,是适用FAT12格式,我在学习debug时,参考书上给出了利用debug的L命令调入磁盘的FAT表和目录区,通过目录项可以查看文件在磁盘上的存储分配情况。如格式化了一张1.44M软盘后,在软盘上存放了E1.txt,E2.txt,E3.txt,进行如下操作后:
C:\>debug
-l 100 0 0 20
-d 2700
0B58:2700  45 31 20 20 20 20 20 20-54 58 54 20 10 2D DB 4D   E1      TXT .-.M
0B58:2710  77 34 77 34 00 00 D9 4D-77 34 02 00 0F 00 00 00   w4w4...Mw4......
0B58:2720  45 32 20 20 20 20 20 20-54 58 54 20 10 B6 E5 4D   E2      TXT ...M
0B58:2730  77 34 77 34 00 00 E4 4D-77 34 03 00 22 00 00 00   w4w4...Mw4.."...
0B58:2740  45 33 20 20 20 20 20 20-54 58 54 20 10 2D 00 4E   E3      TXT .-.N
0B58:2750  77 34 77 34 00 00 FB 4D-77 34 04 00 54 1B 00 00   w4w4...Mw4..T...
0B58:2760  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0B58:2770  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-d 300
0B58:0300  F0 FF FF FF FF FF 05 60-00 07 80 00 09 A0 00 0B   .......`........
0B58:0310  C0 00 0D E0 00 0F 00 01-11 F0 FF 00 00 00 00 00   ................
0B58:0320  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0B58:0330  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0B58:0340  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0B58:0350  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0B58:0360  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0B58:0370  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-
l 100 0 0 20
是将0——A软盘的0逻辑扇区开始共20H个扇区装载到内存100开始的位置,对于1.44软盘,其引导扇区占用1个扇区,FAT1、FAT2各占用9个扇区,接下来就是目录区,所以,目录区的开始位置为100+200H(1个引导扇区512字节,十六进制200H)+2400H(18个FAT扇区18*512换算成十六进制)=2700H,对于目录项,如下图:
每32个字节为一项,可以看出,从2700——271F代表E1.txt,其中的第1A,1B就存储着文件起始簇号(文件在磁盘上的分配单位是以簇为单位的,软盘每一簇1个扇区),这里2700+1A=271A,2700+1B=271B,就是0002,即文件E1.txt从第0002簇开始存放,相应的我们到FAT区找第0002簇,其值为FFF,FAT12中1个半字节(12位二进制)代表一项,前两项为盘类型,这里可以看出第0000项是FF0,第0001项是FFF,第3项开始表示盘簇的分配状态,000H表示未用,FF8~FFF表示文件坏簇、最末簇,其他形式则指出下一簇簇号,形成一个簇链,那么对于E1.txt,因为0002簇是FFF,说明只占用了一簇,对于E3.txt,它从0004簇开始,找到FAT的0004项,其值为005,说明E3.txt占用了不只一簇,顺着这条链往下找,直到0319,031A地址的F0,FF,即共14簇,共7168字节,这可以同在windows下的文件属性中看到文件占用的空间正好是7168,在这里主要难解的是怎么看FAT表的项,对于连续的3个字节,其组成2个12位的FAT项方式如下:
 
对于FAT12,它的引导扇区数,FAT1、FAT2,目录区都相对是固定的,而对于FAT16和FAT32,情况就有些复杂,如在引导扇区、FAT后可能有保留扇区,相应的FAT表,目录区等都需要相应的计算出起始扇区号,还有一些象每簇多少扇区等参数,保存在引导区的BPB(BIOS参数表中),这些都还没搞明白,希望有明白的高手给偶讲讲。
阅读(3991) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~