2016-11-26 94 views
0

我想将一些非常大的程序变量卸载到内存中,然后卸载到磁盘文件中。确定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

然而,在该部门只是个零和它周围的所有部门。

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

+0

好了,所以几个小时后,我现在已经解决了这个问题。我认为这些圆柱体组成了头,这就是我读过的所有网页描述它的方式,但在倾倒和分析整个磁盘映像后,我能够确定,实际上(在我的情况下)16个磁头组成一个圆筒。这是令人困惑和倒退,但无论如何。例如,磁头1的偏移量是分区中的63个扇区,而磁道1的偏移量是分区中的1008个扇区。我让他们逆转。 –

回答

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⋅ñ + H)⋅ñ扇区 +(S - 1),其中,A是LBA地址, ñ是头在盘上的数,N 扇区是每个轨道最多的 扇区数,(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)模HPC

S =(LBA模SPT)+ 1

+0

嗯,谢谢你的回答(尽管它很晚)。这个问题涉及DOS。我正在编写我自己的FAT16文件加载器,以将文件从旧的40MB硬盘加载到内存缓冲区中。所以我所使用的硬件远远早于LBA。无论如何,我可能在问这个问题几个星期后完成了文件加载器。我会给你答案,因为你困扰着回答。 –

相关问题