Originalmente publicado por
joshua1983
si miramos con detenimiento un kernel seria entonces como un programa que brinda servicios a otros programas como el acceso a los archivos y las interrupciones de procesador y todo eso; segun lo que yo entendi de ExtrañoInocente, el codigo ensamblador no interactua con ningun kernel, sino directamente sobre la maquina... por lo que no se necesitaria ningun kernel para crear un compilador y sobre este compilador programar en C y asm y asi seria el nacimiento de un nuevo kernel.. bonito cierto?
Exacto, vos pensa que tu arquitectura de maquina en particular soporta un assembler determinado y con este assembler un conjunto de instrucciones maquina, que de por si las interpreta y las sabe ejecutar, que generalmente se definen en hexadecimal para nosotros (pero se escriben en disco / memoria / en binario) y la arquitectura misma (lease procesador, Unidad Aritmetica y Logica) de la arquitectura en particular ya tiene implementadas como hacerlas o ejecutarlas...
En un principio cuando querias programar para una maquina en particular tenias un libro de instrucciones que te daba el formato de la instruccion, si era instruccion de un solo operando, de varios operandos, si era de palabra a palabra, de palabra a un registro de la Unidad Aritmetica y Logica, con sus respectivos codigos en hexadecimal y uno iba progamando escribiendo cada instruccion maquina en binario...
Sobre eso decidieron hacerle la vida mas facil al programador y desarrollaron los primeros assembler, que en vez de tragarte un libro de no se cuantas paginas y aprenderte el hexadecimal de cada instruccion y demas, tenias el lenguaje ensamblador que te permitia escribir codigo "legible" con nombres para las instrucciones, como LOAD, MVI (Move Inmediate), ST (Store), CLC (Compare Logical Character), etc, generalmente estas instrucciones se correlacionaban 1 a 1 con las instrucciones maquina del micro o arquitectura a programar... Y el ensamblador transformaba dicha instruccion en assembler a su codigo binario maquina para que la maquina sepa interpretarla...
Esto estra mas abajo que el kernel del sistema operativo, programas directamente sobre la maquina son instrucciones que interactuan directamente sobre la maquina y podes acceder a todos los perifericos, interrupciones y demas, cosa que sobre eso se programan los kernels que facilitan y prestan servicios de mas alto nivel a los programas...
En vez de programar 100 lineas de assembler cada vez que vas a guardar datos en un archivo, directamente ya tenes abstraido eso desde el kernel que te provee una funcion mas alto nivel para que vos accedas a arcihvos, y asi sucesivamente...
Saludos
Pablo