1

Int 13h Function 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 が範囲外) ですが、レジスターをダンプしたところ、すべての値が正しいです。どこが間違っているかわかる方教えてください。前もって感謝します。

4

1 に答える 1

1

間違いは、IstRootDirSec 変数を DWORD として使用していたことですが、それは単語であり、DWORD に変換する必要があります。

xor eax,eax
mov ax,word[IstRootDirSec]
add eax,dword[BPB_HiddSec]
于 2015-05-06T08:47:39.003 に答える