gpt4 book ai didi

x86 - 使用 int 13h 读取比轨道上更多的扇区

转载 作者:行者123 更新时间:2023-12-01 13:16:33 24 4
gpt4 key购买 nike

int 13hah=02h 的顺序是什么将读取从 (C, H, S) 开始的 19 扇区= (0, 0, 1) 提供了 2 个磁头的(软盘)磁盘几何结构,每磁道 18 个扇区,每面 80 个磁道。

或者,更一般地说,当它到达磁道 0 的末尾,磁头 0 时会发生什么?它会进入 track 1 还是 head 1?在这种情况下它还能正常工作吗?

编辑:等等……这实际上是小时、分钟、秒吗?如果我们到达轨道的末端(S 大于 18),那么 H 会增加吗?

最佳答案

现代 BIOS 支持多轨1 读写的概念。如果您读或写超过轨道的末尾,它将继续跟随下一个轨道。为了与最广泛的 BIOS(旧的和新的)阵列最兼容,您可能希望考虑不跨磁道边界读取或写入。

对于每磁道 18 个扇区/2 个磁头/80 个柱面的驱动器几何结构(3.5"1.44MB 软盘),CHS(0,0,18) 之后的扇区是 CHS(0,1,1)。到达后CHS(0,1,18) 的扇区下一个是 CHS(1,0,1)。在某种程度上,这类似于 HH:MM:SS。


根据您的驱动器几何结构,总共有 2880(80*2*18) 个扇区。如果将扇区编号为 0 到 2879(含),则它们称为逻辑 block 地址 (LBA)。

Int 13h/ah=2采用 CHS 值。您可以使用以下公式(或等效公式)将 LBA 转换为 CHS 值:

C = (LBA ÷ SPT) ÷ HPC
H = (LBA ÷ SPT) mod HPC
S = (LBA mod SPT) + 1

HPC = Heads per cylinder (aka Number of Heads)
SPT = Sectors per Track,
LBA = logical block address

"mod" is the modulo operator (to get the remainder of a division)

我在另一个 Stackoverflow answer 中写了更多关于 LBACHS 计算的内容在 LBA 到 CHS 的翻译 部分。如果您使用这些计算创建了一个表,则编号将如下所示:

LBA =    0:   CHS = ( 0,  0,  1)
LBA = 1: CHS = ( 0, 0, 2)
LBA = 2: CHS = ( 0, 0, 3)
LBA = 3: CHS = ( 0, 0, 4)
LBA = 4: CHS = ( 0, 0, 5)
LBA = 5: CHS = ( 0, 0, 6)
LBA = 6: CHS = ( 0, 0, 7)
LBA = 7: CHS = ( 0, 0, 8)
LBA = 8: CHS = ( 0, 0, 9)
LBA = 9: CHS = ( 0, 0, 10)
LBA = 10: CHS = ( 0, 0, 11)
LBA = 11: CHS = ( 0, 0, 12)
LBA = 12: CHS = ( 0, 0, 13)
LBA = 13: CHS = ( 0, 0, 14)
LBA = 14: CHS = ( 0, 0, 15)
LBA = 15: CHS = ( 0, 0, 16)
LBA = 16: CHS = ( 0, 0, 17)
LBA = 17: CHS = ( 0, 0, 18)
LBA = 18: CHS = ( 0, 1, 1)
LBA = 19: CHS = ( 0, 1, 2)
LBA = 20: CHS = ( 0, 1, 3)
LBA = 21: CHS = ( 0, 1, 4)
LBA = 22: CHS = ( 0, 1, 5)
LBA = 23: CHS = ( 0, 1, 6)
LBA = 24: CHS = ( 0, 1, 7)
LBA = 25: CHS = ( 0, 1, 8)
LBA = 26: CHS = ( 0, 1, 9)
LBA = 27: CHS = ( 0, 1, 10)
LBA = 28: CHS = ( 0, 1, 11)
LBA = 29: CHS = ( 0, 1, 12)
LBA = 30: CHS = ( 0, 1, 13)
LBA = 31: CHS = ( 0, 1, 14)
LBA = 32: CHS = ( 0, 1, 15)
LBA = 33: CHS = ( 0, 1, 16)
LBA = 34: CHS = ( 0, 1, 17)
LBA = 35: CHS = ( 0, 1, 18)
LBA = 36: CHS = ( 1, 0, 1)
LBA = 37: CHS = ( 1, 0, 2)
LBA = 38: CHS = ( 1, 0, 3)
LBA = 39: CHS = ( 1, 0, 4)
LBA = 40: CHS = ( 1, 0, 5)
LBA = 41: CHS = ( 1, 0, 6)

... [snip] ...

LBA = 2859: CHS = (79, 0, 16)
LBA = 2860: CHS = (79, 0, 17)
LBA = 2861: CHS = (79, 0, 18)
LBA = 2862: CHS = (79, 1, 1)
LBA = 2863: CHS = (79, 1, 2)
LBA = 2864: CHS = (79, 1, 3)
LBA = 2865: CHS = (79, 1, 4)
LBA = 2866: CHS = (79, 1, 5)
LBA = 2867: CHS = (79, 1, 6)
LBA = 2868: CHS = (79, 1, 7)
LBA = 2869: CHS = (79, 1, 8)
LBA = 2870: CHS = (79, 1, 9)
LBA = 2871: CHS = (79, 1, 10)
LBA = 2872: CHS = (79, 1, 11)
LBA = 2873: CHS = (79, 1, 12)
LBA = 2874: CHS = (79, 1, 13)
LBA = 2875: CHS = (79, 1, 14)
LBA = 2876: CHS = (79, 1, 15)
LBA = 2877: CHS = (79, 1, 16)
LBA = 2878: CHS = (79, 1, 17)
LBA = 2879: CHS = (79, 1, 18)

脚注:

1多轨支持并不意味着磁盘访问可以跨柱面。多轨磁盘访问必须在同一柱面上开始和结束。

关于x86 - 使用 int 13h 读取比轨道上更多的扇区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com