Чтение жесткого диска LBA с использованием int 13h ah=42h в загрузчике

Я пытаюсь загрузить корневой каталог раздела fat 16, используя функцию Int 13h ah = 42h! Насколько мне известно, все параметры установлены правильно. Вот код:`

    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 вне диапазона), но я сбросил регистры, и все значения верны. Пожалуйста, кто-нибудь может сказать, где ошибка. Заранее спасибо.


person Muhammad Tayyab    schedule 06.05.2015    source источник
comment
Опубликовать IstRootDirSec, BPB_HiddSec и DAP.   -  person ElderBug    schedule 06.05.2015
comment
Я нашел ошибку. :) Ошибка была в том, что я использовал переменную IstRootDirSec как DWORD, но это было слово, и мне пришлось преобразовать его в DWORD. Спасибо.   -  person Muhammad Tayyab    schedule 06.05.2015


Ответы (1)


Ошибка заключалась в том, что я использовал переменную IstRootDirSec как DWORD, но это было слово, и мне нужно преобразовать его в DWORD.

xor eax,eax
mov ax,word[IstRootDirSec]
add eax,dword[BPB_HiddSec]
person Muhammad Tayyab    schedule 06.05.2015