De nombreux didacticiels OS commencent dans l'assemblage ou C ++. Nous commençons dans le code machine.
Dans ce didacticiel Raspberry Pi 4, nous allons écrire un assembleur auto-hébergé en code machine. Nous allons ensuite évoluer ce compilateur (en implémentant de nouvelles fonctionnalités, puis en utilisant ces fonctionnalités du code source du compilateur) en quelque chose capable de disputer une langue de haut niveau. Enfin, dans notre langue de haut niveau, où la plupart des tutoriels commencent, nous écrivons un serveur Web simple pour héberger un jour la propre documentation du tutoriel.
Milestone: Bootstrap Machine Code?
; Commande des commentaires Milestone: Big-Endan Machine Code?
Milestone: étiqueté Goto?
J : branche relative avec binaire L : Étiqueter pour Goto (lire dans la bande de mémoire avec le schéma pos4 name ) GOTO : Goto Label Milestone: Goto conditionnel?
GOEQGONEGOGTGOLTGOGEGOLEMilestone: Fonctions étiquetées?
CALL : "Goto" mais avec une branche liée Jalon: émet des cordes
MOV reg charEMIT string : Macro pour les séries de MOV reg char et CALL emit avec le support de séquence d'évacuation Milestone: Assemblage de bootstrap
RET : retour après l'appel de la fonction MOV reg hexMOV reg decMOV reg regADD reg reg [reg/value] : Définissez la valeur d'un registre SUB reg reg [reg/value] : définissez la valeur d'un registre LDB reg reg_mem offset : Chargez un octet STB reg reg_mem offset : Stockez un octet ORR reg reg (reg >>/<< value)AND reg reg (reg >>/<< value)Milestone: Fonctions Stack-Lang
.func [name] [num locals].call [name]Milestone: Push, Pop et DUP
.push constant [val]
.dup
.pop local [idx]
.push local [idx]
.pop param [idx]
.push param [idx]
.pop global [idx]
.push global [idx]
Jalon: Accès à la mémoire Stack-Lang
.load (..., addr) -> (..., val) .store (..., val, addr) -> (...)Jalon: arithmétique
.add.subJalon: allocation de tas
malloc (..., num octets) -> (..., addr)Jalon: analyse et compilation
fn main ) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png