我正在使用 BrokenThorn 的操作系统开发教程。我的困惑在于这段代码,它负责读取文件的下一个簇号:
mov ax, WORD [cluster] ; identify current cluster from FAT
; is the cluster odd or even? Just divide it by 2 and test!
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
根据我对在线资源和线程的阅读,这是我发现的:
- 文件根目录条目中的第一个簇号为 2 个字节。对于 FAT12,仅使用这 2 个字节的低 12 位。
- FAT12 的 FAT 以下列格式存储:
vwX uYZ
其中XYZ
是一个簇号,uvw
另一个是簇号。我对此有一个问题 - 哪个代表编号较低的 FAT 条目,哪个代表更高?
但是,看到代码,我无法理解上述两个事实(如果假设是正确的)是如何被使用的。最初,ax
具有根目录的 2 个字节,其低 12 位可以直接使用。但这还没有完成。另外,这里的vwX uYZ
格式是如何解析的?
如果有人可以详细解释这一点并指出我所犯的任何错误,那将非常有帮助