读取扇区的顺序是什么,int 13h
从提供的(软盘)磁盘几何形状开始,即 2 个磁头、每个磁道 18 个扇区和每侧 80 个磁道。ah=02h
19
(C, H, S) = (0, 0, 1)
或者,更一般地说,当它到达磁道 0 的末端,磁头 0 时会发生什么?它是去磁道 1 还是磁头 1?在这种情况下它甚至可以正常工作吗?
编辑:等等..这实际上像小时、分钟、秒吗?如果我们到达轨道的尽头(S 大于 18),那么 H 会增加吗?
读取扇区的顺序是什么,int 13h
从提供的(软盘)磁盘几何形状开始,即 2 个磁头、每个磁道 18 个扇区和每侧 80 个磁道。ah=02h
19
(C, H, S) = (0, 0, 1)
或者,更一般地说,当它到达磁道 0 的末端,磁头 0 时会发生什么?它是去磁道 1 还是磁头 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(含),它们被称为逻辑块地址 (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)
我在LBA 到 CHS 的翻译部分的其他Stackoverflow 答案中写了更多关于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多轨支持并不意味着磁盘访问可以跨柱面。多磁道磁盘访问必须在同一个柱面开始和结束。