Si, concuerdo con Bob, seria mejor solo usar herramientas de terceros para construir el S.O. y que sea todo el codigo hecho por nosotros.
Doy mi voto para FASM y les propongo un par de cositas para un futuro no tan lejano, esto se podria leer reemplazando FAT12 por _nuestro_file_system como decia Bob:
_El OS ya que va en diskette podria soportar FAT12
_El loader obviamente se escribiria en el primer sector pero segun el formato de FAT12 (que empieza con un jmp al codigo del loader y sigue con campos indicativos)
http://www.mega-tokyo.com/osfaq2/index.php/FAT12%20document_El Kernel (un solo archivo de codigo finalmente) podria escribirse en el diskette con un copy paste desde Windows o un copy desde MS-DOS
Modulitos:
loader: se encargaria de leer el disquette en busca del kernel, podria usar un nombre fijo siempre, podria complementar eso con la espera de una tecla como F5 para permitir elegir el nombre, todas las ideas que se nos ocurran y podamos implementar. Seria un modulo de codigo separado.
kernel: se encargaria entre otras cosas de establecer las interrupciones que proveera el S.O. (sus servicios) que inicialmente serian init_app y exit_app. Seria un modulo de codigo separado con otro submodulos que en este caso serian archivos en realidad.
Dentro del Kernel podriamos tener (y serviria para distribuir tareas):
Keyboard: encargado de entrada y salida por teclado
Shell: encargado de la interfaz (con sus comandos como ls/dir, info del sistema y de iniciar el proceso de ejecucion de otros programas)
FileSystem: encargado de todo lo relacionado con el FileSystem, enumeracion de directorios/archivos, lectura de los mismos y eventualmente escritura
Utils: encargado de cosas como strings
Video: encargado de salida grafica (mas adelante)
Bueno, me voy unos dias de vacaciones asi que les dejo un par de cosas para que las vayan pensando y comenten lo que les parece