最近我在BrokenThorn上阅读了一些关于 OS 开发的不错的教程:这是一个不错的 OSDev 系列。
当我想加载我们的引导加载程序的第 2 阶段时,我很难理解“计算下一个集群”的想法。代码是:
mov ax, WORD [cluster] ; The current Cluster.
mov cx, ax ; copy current cluster
mov dx, ax ; copy current cluster
shr dx, 0x0001 ; divide by two
add cx, dx ; sum for (3/2)
mov bx, 0x0200 ; location of FAT in memory
add bx, cx ; index into FAT
mov dx, WORD [bx] ; read two bytes from FAT
test ax, 0x0001
jnz .ODD_CLUSTER
jz .EVEN_CLUSTER
为什么我们将当前簇号乘以 3/2 得到下一个簇号?