Прежде всего
Вы должны знать, что когда вы пишете коды загрузчика, вы должны знать, что вы СОЗДАЕТЕ СВОЮ СОБСТВЕННУЮ СРЕДУ КОДА, что означает, что нет такой готовой библиотеки C, доступной вам или чего-либо подобного, ТОЛЬКО и ТОЛЬКО BIOS УСЛУГИ (или ПРЕРЫВАНИЯ МАРШРУТОВ).
Теперь, если вы получили это, вы, вероятно, поймете, что приведенный выше код не загружается, поскольку у вас нет заголовка "stdio.h", это означает, что ЦП при выполнении вашего скомпилированного кода выиграл ' не может найти этот заголовок и, следовательно, не поймет, что такое «printf» (поскольку printf является методом заголовка stdio.h).
Поэтому, если вы хотите напечатать любую строку, вам нужно написать эту функцию ВАШЕЙ СОБСТВЕННОСТЬЮ либо в отдельном файле в качестве заголовка, и связать его объектный файл во время компиляции при создании конечного двоичного файла или в том же файле. это зависит от вас. Могут быть и другие способы, я не очень хорошо с ними знаком, просто проведу некоторые исследования.
Еще одна вещь, которую вы должны знать, это BIOS, который отвечает за загрузку этого загрузочного кода (ваш код выше в вашем случае) в ячейку памяти 0x07C00 (0x0000h: 0x7C00 в сегменте: представление смещения), так что вы должны упомянуть в ваш код, который вы пишете этот код в этой области памяти, либо
1 - с использованием инструкции ORG
2-Или, загрузив соответствующие регистры для этого (cs, ds, es)
Кроме того, вы должны ознакомиться с сегментом: схема представления смещенной памяти, просто зайдите в Google или прочитайте руководства Intel.
Наконец, чтобы BIOS загружал ваш код в 0x07C00, загрузочный код не должен превышать 512 байт (ТОЛЬКО НА ПЕРВОМ СЕКТОРЕ ЗАГРУЗКИ НОСИТЕЛЕЙ, поскольку сектор составляет 512 байт), и он должен найти последние два байта этого первый сектор (байт 510 и байт 511) вашего кода - подпись загрузки 0x55AA, в противном случае BIOS не сочтет этот код загрузочным.
Обычно это кодируется как:
ORG 0x7C00
...
Ваш загрузочный код и для загрузки большего количества кодов, так как 512 байт будет недостаточно.
...
умножить на 510 - ($ - $$) 0x00; Zerofill до 510 байт
dw 0xAA55 ;Boot Sector signature,written in reverse order since it
will be stored as little endian notation
Просто чтобы вы знали, я здесь не все освещаю, потому что если это так, я буду писать страницы об этом, вам нужно искать больше ресурсов в сети, и вот ссылка для начала ( кодировка в сборке):
http://www.brokenthorn.com/Resources/OSDevIndex.html
Вот и все, надеюсь, это было полезно для вас ... ^ _ ^
Хило - Алжир