Загрузчик написан на ASM.
При компиляции кода C (или C ++, или чего-либо еще), компилятор «преобразует» ваш читаемый человеком код в машинный код. Так что вы не можете быть уверены в результате.
Когда компьютер загружается, BIOS выполнит код с определенного адреса.
Этот код должен быть исполняемым напрямую.
Вот почему вы будете использовать сборку.
Это единственный способ получить неизмененный код, который будет выполняться как написано процессором.
Если вы хотите кодировать на C, вам все равно придется кодировать загрузчик ASM, который будет отвечать за правильную загрузку машинного кода, сгенерированного используемым вами компилятором.
Вы должны понимать, что каждый компилятор генерирует разные машинные коды, которые могут нуждаться в предварительной обработке перед выполнением.
BIOS не позволит вам предварительно обработать ваш машинный код. Загрузка с ПК - это просто переход в область памяти, то есть машинный код, расположенный в этой области, будет выполняться напрямую.