FASM почему загрузчик не загружает ядро
Сделал ядро и загрузчик и совместил все в макросе, но загрузчик не загружает ядро. Код загрузчика
use16
org 0x7C00 ;Адрес загрузки
BootLoader:
cli ; Запрещаем прерывания
xor ax, ax ; Очищаем регистр ax
mov ds, ax ; Устанавливаем сегмент данных на нулевой адрес
mov es, ax ; Устанавливаем сегмент es на нулевой адрес
mov ss, ax ; Устанавливаем сегмент стека на нулевой адрес
mov sp, 07c00h ; Устанавливаем сегмент sp на текущию вершину стека
sti ; Разрешаем прерывания
;Очистка экрана
mov al, 0002h
int 10h
times(512-2-($-07c00h)) db 0 ; Заполняем пустоты нулями
db 055h, 0AAh ; Устанавливаем сигнатуру загрузочного сектора
код ядра(ядро должно выводить $ и делать чтобы пользователь вводил данные)
use16
org 500h
Kernel:
mov al, 0002h
int 10h
mov ah, 0x0E
mov al, '$'
int 10h
mov ah, 0x0E
mov al, ' '
int 10h
writer:
xor ax, ax
int 16h
mov ah, 0x0E
int 10h
jmp writer
jmp $
код макроса
macro align value { db value-1 - ($ + value-1) mod (value) dup 0 }
HEADS = 1
SPT = 4 ;4 сектора по 512 байт
Begin:
file "boot.bin",512 ; загрузчик
file "kernel.bin" ; первый файл, типа оболочка shell
align 512
align HEADS*SPT*512
Ответы (1 шт):
Автор решения: iEPCBM
→ Ссылка
Вы в загрузчике не указали, что выполнять. Процессор не знает, что делать после выполнения загрузчика. После очистки экрана (после вызова прерывания) добавьте загрузку сектора с ядром и перейдите на его адрес:
xor ax, ax
mov es, ax
mov bx, 500h
mov ch, 0
mov cl, 02h
mov dh, 0
mov dl, 80h
mov al, 01h
mov ah, 02h
int 13h
jmp 0000:0500h