确定FAT16驱动器中根目录的起始扇区

时间:2016-11-26 21:45:05

标签: filesystems fat16

我想将一些非常大的程序变量从内存卸载到磁盘文件中。

我已经读过关于INT 13H,CHS,MBR和文件分配表的几十页,我几乎学会了所有我需要知道的东西, 除了我似乎无法找到计算根目录的起始扇区的工作方式。

根据此页面http://nerdclub-uk.blogspot.co.uk/2012/11/understanding-fat-tables.html,确定它 就像将包含引导记录,保留扇区数和数量的扇区偏移相加在一起一样简单 每个FAT副本中的扇区。

检查我的引导扇区后,我插入了所有这些值,这就是我最终的结果。

1 + 1 +(2 * 256),等于514。

因此,我的根目录应该从扇区偏移514开始。每个柱面的最大扇区数是63.

514/63 = 8r10

所以,我的根目录应该在第8行,第10行。

然而,该部门及其周围的所有部门都只有零。

显然,我做了一件非常错误的事情,但经过一天的谷歌搜索,我已经准备放弃了。

1 个答案:

答案 0 :(得分:1)

较新的驱动器使用LBA(逻辑块寻址),因此CHS不再发挥作用了。您应该从计算中访问扇区514(LBA扇区513,因为LBA的第一个扇区为0)。那个部门有什么?

对于CHS寻址,每个圆柱体由在盘片的每一侧上的多个头(轨道)和每个头(轨道)在盘周围的多个可访问扇区组成。

https://en.wikipedia.org/wiki/Cylinder-head-sector 有一个公式将(c,h,s)元组转换为LBA扇区值:

  

可以使用以下方法将CHS元组映射到LBA地址   式:

     

A =(c·N head + h)·N sector +(s - 1),其中A是LBA地址,   N heads 是磁盘上的磁头数,N sector 是最大值   每个磁道的扇区数,(c,h,s)是CHS地址。

和LBA到CHS地址转换 https://en.wikipedia.org/wiki/Logical_block_addressing#CHS_conversion

  

LBA地址可以使用以下公式映射到CHS元组   (“mod”是模运算,即余数,“÷”是整数   除法,即任何小数部分的除法商   被丢弃了):

     

C = LBA÷(HeadsPerCylinder(HPC)×SectorsPerTrack(SPT))

     

H =(LBA÷SPT)mod HPC

     

S =(LBA mod SPT)+ 1