Ошибка чтения диска при загрузке секторов в память
Я пытался разработать загрузчик с помощьюэтот, но когда он запускается, он показывает:
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
, Если я проигнорирую это в данный момент, то это создаст проблемы при выполнении моего ядра. В нем, похоже, используется неправильное отображение памяти.