代码如下:
;======= get FAT Entry
Func_GetFATEntry:
push es
push bx
push ax
mov ax, 00
mov es, ax
pop ax
mov byte [Odd], 0
mov bx, 3
mul bx
mov bx, 2
div bx
cmp dx, 0
jz Label_Even
mov byte [Odd], 1
Label_Even:
xor dx, dx
mov bx, [BPB_BytesPerSec]
div bx
push dx
mov bx, 8000h
add ax, SectorNumOfFAT1Start
mov cl, 2
call Func_ReadOneSector
pop dx
add bx, dx
mov ax, [es:bx]
cmp byte [Odd], 1
jnz Label_Even_2
shr ax, 4
Label_Even_2:
and ax, 0fffh
pop bx
pop es
ret
以上是我在阅读《一个64位操作系统的设计与实现》时存在问题的部分,问题如下:
1.请问为何要将FAT表项乘以3除以2,即为何要扩大1.5倍
2.偏移位置如何计算?
3.后面的奇偶项错位问题为什么会出现?对于汇编写的处理方法不是很理解
4.此程序将写入软盘用于引导操作系统启动,FAT12文件系统应该由操作系统解析,这里还没有操作系统,那FAT表,根目录区这些结构是由谁建立并解析呀?
5.对于这两页的汇编代码还有这个模块的算法思路不是很理解,能否详细解释下,非常感谢!