我想将一些非常大的程序变量从内存卸载到磁盘文件中。
我已经读过关于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 :(得分: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