Во-первых, вы не можете использовать стандартную библиотеку C / C ++, потому что в хобби ОС она не существует *.
Во-вторых, ваш код C ++ выглядит в формате 32Bit, а код на ассемблере - в 16Bit. Они не могут быть связаны, если оба не 16 или оба 32.
Я рекомендую взглянуть на OSDev Wiki (user786653 опубликовал это тоже) ... Там есть много полезных ресурсов, которые помогут вам на пути к написанию операционной системы.
Если вы действительно хотите начать с нуля, используя 16-битную сборку, и хотите использовать 32-битный код C ++, вам придется выполнить следующие шаги:
- Создание первого этапа загрузчика (небольшой файл, который загружает оставшуюся часть загрузчика. Он должен быть ровно 512 байт ...
- Создание второго этапа загрузчика (на этом этапе настраивается GDT, активируется линия A20 и переключается в 32-битный защищенный режим). Он также может настраивать режим видео, получать информацию об ОЗУ и передавать ее в 32-битное ядро. ..).
- Создать 32-битную заглушку ядра (на C / C ++. Предпочтительно C). Это создаст основную среду для ядра операционной системы.
- Напишите некоторые стандартные библиотеки C / C ++. String.h - ваш главный приоритет (CString на C ++). Также был бы полезен файл Stdio.h (CStdio на C ++)
- В основной функции Kernel Stub вызовите процедуру печати.
(Обратите внимание, что для этого вы должны обладать высоким уровнем знаний C / C ++ и хотя бы некоторыми знаниями по сборке)
* Если вы запрограммировали свою собственную библиотеку, не обращайте внимания на первое утверждение.
Надеюсь, это поможет!
-Adrian