跟着于渊的 boot.asm 写了一次,加载内存前有这一段看不明白,求大大们讲解下
boot在软盘中找到 kernel.bin文件后 就跳到这里
RootDirSector是根目录占的扇区数,DeltaSectorNo是什么?
and di, 0FFE0H
add di, 01AH
01AH的定义是DIR_FstClus 0x1A 2 此条目对应的开始簇号
es中的值是 0x9000h ,后面几句都作什么 , 最后ax中保存的是什么值
RootDirSector equ 14
DeltaSectorNo equ 17
_filename_found_:
mov ax, RootDirSector
and di, 0FFE0H ;
add di, 01AH ; first sector
mov cx, word [es:di]
push cx ; save fat sector number
add cx, ax
add cx, DeltaSectorNo ; "LOADER.BIN" staring sector number from zero after carculating
mov ax, BaseOfLoader
mov es, ax
mov bx, OffsetLoader
mov ax, cx
------解决方案--------------------
看那个注释,说是 LOADER.BIN 文件的起始扇区,被又是被 equ 定义的,有些奇怪;整个的计算方法里对些变量的定义和使用都有类似的怪异。
好像没有必要纠结在这样的自行设计的有些特立独行意味的东西里,真想看看这方面的内容的话,一份软盘标准的引导扇区的代码和其所涉及的磁盘参数结构块定义是更好的选择。