确定FAT16驱动器中根目录的起始扇区
Determining the starting sector of the root directory in a FAT16 drive
我想将一些非常大的程序变量从内存卸载到磁盘文件中。
我已经阅读了数十页有关 INT 13H、CHS、MBR 和文件分配的内容 Table,并且我已经了解了几乎所有我需要知道的内容,
除了我似乎找不到计算根目录起始扇区的工作方法。
根据这个页面,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 扇区。
但是,该扇区及其周围的所有扇区都只有零。
显然我做错了,但经过一天的谷歌搜索后,我准备放弃了。
较新的驱动器使用 LBA(逻辑块寻址),因此 CHS 不再起作用。您应该从计算中访问扇区 514(LBA 扇区 513,因为第一个扇区对于 LBA 为 0)。那个部门有什么?
至于 CHS 寻址,每个柱面由盘片两侧的多个磁头(磁道)和磁盘周围的多个可访问扇区组成。
https://en.wikipedia.org/wiki/Cylinder-head-sector
有一个公式可以将 (c,h,s) 元组转换为 LBA 扇区值:
CHS tuples can be mapped onto LBA addresses using the following
formula:
A = (c ⋅ Nheads + h) ⋅ Nsectors + (s − 1), where A is the LBA address,
Nheads is the number of heads on the disk, Nsectors is the maximum
number of sectors per track, and (c, h, s) is the CHS address.
和LBA到CHS地址转换
https://en.wikipedia.org/wiki/Logical_block_addressing#CHS_conversion
LBA addresses can be mapped to CHS tuples with the following formula
("mod" is the modulo operation, i.e. the remainder, and "÷" is integer
division, i.e. the quotient of the division where any fractional part
is discarded):
C = LBA ÷ (HeadsPerCylinder (HPC) × SectorsPerTrack (SPT))
H = (LBA ÷ SPT) mod HPC
S = (LBA mod SPT) + 1
我想将一些非常大的程序变量从内存卸载到磁盘文件中。
我已经阅读了数十页有关 INT 13H、CHS、MBR 和文件分配的内容 Table,并且我已经了解了几乎所有我需要知道的内容, 除了我似乎找不到计算根目录起始扇区的工作方法。
根据这个页面,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 扇区。
但是,该扇区及其周围的所有扇区都只有零。
显然我做错了,但经过一天的谷歌搜索后,我准备放弃了。
较新的驱动器使用 LBA(逻辑块寻址),因此 CHS 不再起作用。您应该从计算中访问扇区 514(LBA 扇区 513,因为第一个扇区对于 LBA 为 0)。那个部门有什么?
至于 CHS 寻址,每个柱面由盘片两侧的多个磁头(磁道)和磁盘周围的多个可访问扇区组成。
https://en.wikipedia.org/wiki/Cylinder-head-sector 有一个公式可以将 (c,h,s) 元组转换为 LBA 扇区值:
CHS tuples can be mapped onto LBA addresses using the following formula:
A = (c ⋅ Nheads + h) ⋅ Nsectors + (s − 1), where A is the LBA address, Nheads is the number of heads on the disk, Nsectors is the maximum number of sectors per track, and (c, h, s) is the CHS address.
和LBA到CHS地址转换 https://en.wikipedia.org/wiki/Logical_block_addressing#CHS_conversion
LBA addresses can be mapped to CHS tuples with the following formula ("mod" is the modulo operation, i.e. the remainder, and "÷" is integer division, i.e. the quotient of the division where any fractional part is discarded):
C = LBA ÷ (HeadsPerCylinder (HPC) × SectorsPerTrack (SPT))
H = (LBA ÷ SPT) mod HPC
S = (LBA mod SPT) + 1