我有VBR保护模式开关和Vesa初始化。但是我在另一种情况下看到了这个问题。当内核有3个扇区时,将它加载到内存并跳转到0x7E00是没有问题的。但是当内核有4个或更多扇区时,它的代码就会停止工作......当我删除长内核的一些特性时,将内核的截断长度分成3个扇区 - 代码开始工作。
mov dl, 0x80 ; 80 - FF => HardDisk
mov ah, 0x42
mov si, .kernelStruct
int 0x13
...
.kernelStruct:
dw 16 ; byte of structure length + empty byte
dw sectorsForLoad ; sectors for load count
dd Kernel ; out address
dq 1 ; start sector
...
times 510-($-$$) db 0
dw 0xAA55
; kernel code from 0x7E00
times 512 - (($-$$) % 512) db 0
sectorsForLoad equ ($-$$-512) / 512
为什么以及我该怎么办?谢谢。
答案 0 :(得分:0)
两件事: