int 13h
指令中,当ah=02h
时,将从磁盘几何结构为2个磁头、每个磁道18个扇区、每面80个磁道的(C,H,S)=(0,0,1)处读取19个扇区。更一般地说,当到达0磁道0磁头的末尾时会发生什么?它会去到1磁道还是1磁头?在这种情况下,它是否能正常工作?编辑:等等..这实际上就像小时,分钟,秒钟吗?如果到达磁道末尾(S大于18),那么H会增加吗?int 13h
指令中,当ah=02h
时,将从磁盘几何结构为2个磁头、每个磁道18个扇区、每面80个磁道的(C,H,S)=(0,0,1)处读取19个扇区。更一般地说,当到达0磁道0磁头的末尾时会发生什么?它会去到1磁道还是1磁头?在这种情况下,它是否能正常工作?编辑:等等..这实际上就像小时,分钟,秒钟吗?如果到达磁道末尾(S大于18),那么H会增加吗?根据您的驱动器几何结构,共有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)
我在另一个Stackoverflow答案的LBA转CHS的翻译部分中更详细地介绍了有关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多轨支持并不意味着磁盘访问可以跨越柱面。多轨磁盘访问必须在同一柱面上开始和结束。