Ошибка чтения диска при загрузке секторов в память

Я пытался разработать загрузчик с помощьюэтот, но когда он запускается, он показывает:

disk read error!

Если я проигнорирую это, в более поздней части это покажет мне неправильное отображение памяти. Я также следовал за некоторыми другими источниками, но напрасно. Такое ощущение, что я просто копирую то, что они делают. Если я немного отличаюсь, каждый раз генерируется новый вид ошибок.

Стоит ли использовать уже встроенный загрузчик или что делать?

Код ошибки загрузки диска выглядит следующим образом:

[org 0x7c00]

    KERNEL_OFFSET equ 0x1000    
    mov [BOOT_DRIVE], dl        
    mov bp, 0x9000          
    mov sp, bp  
    mov bx, MSG_REAL_MODE       
    call print_string           
    call load_kernel            
    jmp $

print_string:
    pusha
    mov ah, 0x0e

loop:
    mov al,[bx]
    cmp al, 0
    je return
    int 0x10
    inc bx
    jmp loop

return:
    popa
    ret

disk_load: 
    push dx                                              
    mov ah, 0x02                                   
    mov al, dh                                          
    mov ch, 0x00                                    
    mov dh, 0x00                                     
    mov cl, 0x02                                    
    int 0x13                                           
    jc disk_error                                  
    pop dx                                               
    cmp dh, al                                         
    jne disk_error                                 
    ret

 disk_error :
   mov bx, DISK_ERROR_MSG 
   call print_string 
   jmp $

DISK_ERROR_MSG db "Disk read error!", 0

[bits 16]

load_kernel: 
    mov bx, KERNEL_OFFSET       
    mov dh, 15           
    mov dl, [BOOT_DRIVE]                      
    call disk_load                                                  
    ret

; Global variables
BOOT_DRIVE     db 0 
MSG_REAL_MODE db "Started in 16-bit Real Mode", 0 

; Bootsector padding 
times 510-($-$) db 0 
dw 0xaa55

Я использую эту команду для сборки и запуска моего загрузчика:

nasm boot.asm -f bin -o boot.bin && qemu-system-i386 boot.bin

Я застрял в этой точке. Дисплей моего загрузчикаdisk read error, Если я проигнорирую это в данный момент, то это создаст проблемы при выполнении моего ядра. В нем, похоже, используется неправильное отображение памяти.

Ответы на вопрос(1)

Ваш ответ на вопрос