Muchos tutoriales del sistema operativo comienzan en el ensamblaje o C ++. Comenzamos en el código de la máquina.
En este tutorial Raspberry Pi 4, escribiremos un ensamblador autohospedado en el código de la máquina. Luego evolucionaremos ese compilador (implementando nuevas funciones y luego utilizando esas características en el código fuente del compilador) en algo capaz de disputar un lenguaje de alto nivel. Finalmente, en nuestro lenguaje de alto nivel, donde comienzan la mayoría de los tutoriales, escribiremos un servidor web simple para alojar un día la documentación del tutorial.
Milestone: Bootstrap Machine Code?
; Comando para comentarios Milestone: ¿Código de máquina de Big-Endian?
Milestone: ¿Etiquetado GOTO?
J : Rama relativa con binario L : Etiqueta para GOTO (lea en la cinta de memoria con el esquema pos4 name ) GOTO : etiqueta de goto Hito: ¿Goto condicional?
GOEQGONEGOGTGOLTGOGEGOLEMilestone: ¿Funciones etiquetadas?
CALL : "goto" pero con ramificación vinculada Hito: emisor de cuerdas
MOV reg charEMIT string : Macro para la serie de MOV reg char y CALL emit con Soporte de secuencia de escape Hito: ensamblaje de bootstrap
RET : devolución después de la llamada de función MOV reg hexMOV reg decMOV reg regADD reg reg [reg/value] : Establezca el valor de un registro SUB reg reg [reg/value] : establezca el valor de un registro LDB reg reg_mem offset : Cargue un byte STB reg reg_mem offset : almacenar un byte ORR reg reg (reg >>/<< value)AND reg reg (reg >>/<< value)Milestone: funciones de pila-lang
.func [name] [num locals].call [name]Milestone: Push, Pop y Dup
.push constant [val]
.dup
.pop local [idx]
.push local [idx]
.pop param [idx]
.push param [idx]
.pop global [idx]
.push global [idx]
Milestone: acceso a la memoria de pila
.load (..., addr) -> (..., val) .store (..., val, addr) -> (...)Hito: aritmética
.add.subMilestone: asignación de montón
malloc (..., num bytes) -> (..., addr)Hito: análisis y compilación
fn main ) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png