Я сделал небольшой загрузчик. Теперь я хочу загрузить ядро C++. Могу ли я использовать мой маленький загрузчик для этого?Можно вызвать ядро с этим загрузчиком ASM? Как?
[BITS 16]
[ORG 0x7C00]
[extern _start_kernel]
MOV SI, LoadString
CALL String
CALL _start_kernel
JMP $
Print:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07
INT 0x10
RET
String:
characters:
MOV AL, [SI]
INC SI
OR AL, AL
JZ stopPrint
CALL Print
JMP characters
stopPrint
RET
LoadString db 'Loading...', 0
TIMES 510 - ($ - $$) db 0
DW 0xAA55
Это очень простой загрузчик, и это первый раз, когда я делаю загрузчик (с учебником). Я использую NASM в окнах для компиляции кода asm.
Не настоящий ответ на этот вопрос, потому что он очень расплывчатый. Напишите больше конкретных, что вы хотите сделать ... Теперь вы можете получить ответ «Да» или «Нет» на свой текущий вопрос, и это тоже очень неопределенно :) Откуда вы хотите загрузить ядро? сырое устройство? fs type? Вы подготовили для этого место? ПБС/куча? и т. д. На самом деле ваш вопрос поднимает больше вопросов. – 0xAX
Среди других проблем, которые вы использовали, компилятор C++? он генерирует 16-битный код? Если это не так, ваш загрузчик также должен будет позаботиться о том, чтобы перевести процессор в 32-разрядный защищенный режим, прежде чем даже попытаться выполнить 32-разрядный код. У вас может быть более легкое время, если вы используете совместимый с Multiboot загрузчик, такой как _GRUB_, который обрабатывает вас для этой тяжелой работы. –
У вас есть файл 'linker.ld'? Вам нужно связать код сборки с вашим загрузчиком, иначе вы не сможете вызывать какие-либо функции в вашем файле ядра. – Razor