Файл ядра не запускается при переходе с загрузчика - PullRequest
0 голосов
/ 02 октября 2018

Недавно я попробовал свои силы на 16-битной сборке и подумал записать загрузчик с файлом ядра, чтобы сделать что-то похожее на операционную систему.Мой код загрузчика полностью проверен и загружается код ядра в память.Но как только он загружается, я не могу перейти к этому коду и выполнить его.Вот некоторые важные детали:

    call    load_dir                ; Load the directory table into the memory
    call    search_kernel           ; Search for Kernel Address (First Logical Cluster ) in the root directory
    call    load_fat                ; Load file allocation table into the memory
    call    read_fat

Как видно из кода выше, первый каталог load_dory загружает полный каталог (13 секторов) в память.После загрузки search_kernel пытается найти файл с именем «KERNEL.BIN» и, если он найден, загружает слово со смещения 26 в топор (первый логический кластер).После этого код загружает жир (8 секторов, если быть точным) в память и начинает читать его (read_fat) и загружает данные в (буфер + 10752). До этого все было хорошо. Я проверил содержимое, и это был правильный код, расположенный по этому адресу.Теперь проблема приходит.После этого я написал заявление

    mov     bx,[buffer+10752]
    push    bx
    ret

Это фактически должно технически обмануть регистр ip, чтобы загрузить желаемую инструкцию и выполнить ее.Код KERNEL.BIN:

BITS 16
jmp  short main
main:
    mov     ah,0EH
    mov     al,'H'
    int     10H
    jmp $

Теперь это должно вывести символ H на экран (цель тестирования), но это не работает.Какую ошибку я сделал.Пожалуйста, помогите!

Относительно моих регистров сегментов:

За исключением регистра сегментов стека, все регистры сегментов загружаются одинаково.

...