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
→ Ссылка