Ядро на ди компилится в статическую библиотеку с betterC, отдельно загрузчик на ассемблере, который вызывает главный метод ядра все это кладется в директорию, из нее ld выдает бинарный файл, переставляя в начало загрузочные секции, чтобы все было Multiboot2, потом grub делает загрузочный образ через grub-mkrescue, на выходе получается iso, который уже грузит bochs\qemu. Конечно, чтобы обращаться к портам, разрешать\запрещать прерывания и т.п. нужны ассемблерные вставки в ди-коде.