Я предполагаю, что вы имеете в виду ОС для x86. В этом случае вам понадобится как минимум несколько страниц ассемблера для настройки защищенного режима и тому подобного, и, кроме того, много знаний о таких вещах, как пейджинг, вызовы, вызовы, исключения и т. Д. Если вы собираетесь При использовании формы системных вызовов вам также понадобятся несколько строк кода на ассемблере для переключения между режимами ядра и пространства пользователя.
Помимо этих вещей, остальная часть ОС может быть легко запрограммирована на C. Для C ++ вам понадобится среда выполнения для поддержки таких вещей, как виртуальные члены и исключения, но, насколько я знаю, все это можно запрограммировать на C.
Достаточно взглянуть на Linux source kernel , самый важный код ассемблера (для x86) можно найти в arch / x86 / boot, но вы заметите, что даже в этом каталоге большинство файлов написанный на C. Кроме того, вы найдете несколько сборочных строк в каталоге arch / x86 / kernel для обработки системных вызовов и тому подобного.
За пределами каталога arch практически не используется ассемблер (поскольку ассемблер зависит от компьютера, этот машинный код принадлежит каталогу arch). Даже графические драйверы не используют ассемблер (например, драйвер nvidia в drivers / gpu / drm / nouveau).