0

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

我已经阅读了数十页关于 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 扇区。

但是,该扇区及其周围的所有扇区都只有零。

显然我做错了什么,但经过一天的谷歌搜索后,我准备放弃了。

4

1 回答 1

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个磁头+ h) ⋅ ​​N个扇区+ (s - 1),其中 A 是 LBA 地址,N个磁头是磁盘上的磁头数,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 mod SPT) + 1

于 2017-09-11T17:14:57.010 回答