Assembly 在引导加载程序中使用int 13h ah=42h读取LBA硬盘

Assembly 在引导加载程序中使用int 13h ah=42h读取LBA硬盘,assembly,bootloader,hard-drive,sector,Assembly,Bootloader,Hard Drive,Sector,我正在尝试使用Int 13h函数ah=42h加载fat 16分区的根目录!据我所知,所有参数均已正确设置。下面是代码:` mov byte[DAP.sz],0x10 mov byte[DAP.res],0 mov cx,word[TotalRootDirSecs] mov word[DAP.count],cx mov word[DAP.offset],0x0500 mov word[DAP.seg],0x0 mov eax,dword[Is

我正在尝试使用Int 13h函数ah=42h加载fat 16分区的根目录!据我所知,所有参数均已正确设置。下面是代码:`

    mov byte[DAP.sz],0x10
    mov byte[DAP.res],0
    mov cx,word[TotalRootDirSecs]
    mov word[DAP.count],cx
    mov word[DAP.offset],0x0500
    mov word[DAP.seg],0x0
    mov eax,dword[IstRootDirSec]
    add eax,dword[BPB_HiddSec]
    mov dword[DAP.baseLo],eax
    mov dword[DAP.baseHi],0x0
    mov di,5
    pusha
.loop:
    dec di
    cmp di,0
    jz .failed  
    mov si,0x0
    mov ds,si
    mov si,DAP
    mov dl,0x80
    mov ah,0x42
    int 0x13
    jc .loop
    popa
    mov si,RootLoaded
    call Print16
    cli
    hlt
.failed:
    mov al,ah
    add al,48
    mov ah,0eh
    int 0x10
    popa
    cli
    hlt`
返回到ah的错误代码是1,这是不正确的参数(LBA超出范围),但我转储了寄存器,所有值都正确。 请任何人都知道错误在哪里。
提前感谢。

错误在于我使用IstRootDirSec变量作为DWORD,但它是一个字,我必须将其转换为DWORD

xor eax,eax
mov ax,word[IstRootDirSec]
add eax,dword[BPB_HiddSec]

Post
IstRootDirSec
BPB_HiddSec
DAP
。我发现了错误。:)错误是我使用IstRootDirSec变量作为DWORD,但它是一个字,我必须将其转换为DWORD。谢谢