Первые операционные системы были написаны на ассемблере. Язык C был создан, потому что его первым вариантом использования было создание UNIX. Компилятор C был написан для обработки этого кода и создания сборки, понятной системе (конечно, компилятор был написан на ассемблере). Эффект снежки оттуда. Теперь у нас есть более мощная система для написания кода, поэтому мы, конечно, можем писать лучшие компиляторы и лучшее программное обеспечение с более высокоуровневым подходом и позволить компилятору сделать всю работу за нас.
Что касается Windows, то это была перезапись операционной системы под названием QDOS, написанная на языке C.
Sidenote: операционным системам по-прежнему требуется код сборки, чтобы функционировать, поскольку требуется много аппаратно-независимых фрагментов информации (например, чтение CR2 на странице сбоя в x86). Загрузчики и BIOS (более старые) написаны на ассемблере, потому что они очень специфичны для аппаратного обеспечения и необходимы для настройки таких вещей, как прерывания и указатель стека.