问题描述
我下面给出了一个引导加载程序代码,除了它如何根据下面给出的计算簇数外,我已经理解了所有内容:
mov ax,word [es:di+0Fh] <------; Offset 11 + 15 = 26,;contains 1st cluster
大部分代码部分如下: bpb区域如下所示:
OEMLabel db "FTLBOOT " ; disk label
BytesPerSector dw 512 ; Bytes per sector
SectorsPerCluster db 1 ; Sectors per cluster
ReservedForBoot dw 1 ; Reserved sectors for
;boot record
NumberOfFats db 2 ; Number of copies of
;the FAT
RootDirEntries dw 224 ; Number of entries in
;root dir
; (224 * 32 = 7168 = 14 sectors to read)
LogicalSectors dw 2880 ; Number of logical
;sectors
MediumByte db 0F0h ; Medium descriptor byte
SectorsPerFat dw 9 ; Sectors per FAT
SectorsPerTrack dw 18 ; Sectors per track
(36/cylinder)
Sides dw 2 ; Number of sides/heads
HiddenSectors dd 0 ; Number of hidden
;sectors
LargeSectors dd 0 ; Number of LBA sectors
DriveNo dw 0 ; Drive No: 0
Signature db 41 ; Drive signature: 41 for
;floppy
VolumeID dd __POSIX_TIME__ ; Volume ID
VolumeLabel db "TACHYONOS "; Volume Label: any 11
;chars
FileSystem db "FAT12 " ; File system type:
;don't change!
多余部分如下: 请看箭头所指的行(
next_root_entry:
xchg cx,dx ; We use CX in the inner loop...
mov si,kern_filename ; Start searching for kernel
;filename
mov cx,11
rep cmpsb
je found_file_to_load ; Pointer DI will be at
;offset 11
add ax,32 ; Bump searched entries by 1 (32
;bytes per entry)
mov di,buffer ; Point to next entry
add di,ax
xchg dx,cx ; Get the original CX back
loop next_root_entry
mov si,file_not_found ; If kernel is not found,;bail out
call print_string
jmp reboot
found_file_to_load: ; Fetch cluster and load
;FAT into RAM
mov ax,;contains 1st cluster
mov word [cluster],ax
从第二行开始,代码正在计算第一簇,我无法理解代码部分“ [es:di + 0Fh]”。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)