Viele OS -Tutorials beginnen in der Montage oder in C ++. Wir beginnen im Maschinencode.
In diesem Raspberry Pi 4-Tutorial schreiben wir einen selbst gehosteten Assembler in Maschinencode. Wir werden dann diesen Compiler (indem wir neue Funktionen implementieren und dann diese Funktionen im Compiler-Quellcode implementieren) in etwas in der Lage, eine Sprache auf hoher Ebene zu verwandeln. Schließlich schreiben wir in unserer hochrangigen Sprache, in der die meisten Tutorials beginnen, einen einfachen Webserver, der die eigene Dokumentation des Tutorials eines Tages hostet.
Meilenstein: Bootstrap -Maschinencode?
; Befehl für Kommentare Meilenstein: Big-Endian-Maschinencode?
Meilenstein: Goto gekennzeichnet?
J : Relativer Zweig mit Binärer L : Etikett für GOTO (in das Speicherband mit Schema pos4 name gelesen) GOTO : Goto Label Meilenstein: Bedingte Goto?
GOEQGONEGOGTGOLTGOGEGOLEMeilenstein: Beschriftete Funktionen?
CALL : "Goto", aber mit verknüpfter Verzweigung Meilenstein: Strings emittieren
MOV reg charEMIT string : MACRO für eine Reihe von MOV reg char und CALL emit With Escape Sequence Support an Meilenstein: Bootstrap -Baugruppe
RET : Rückgabe nach Funktionsaufruf MOV reg hexMOV reg decMOV reg regADD reg reg [reg/value] : Legen Sie den Wert eines Registers fest SUB reg reg [reg/value] : Legen Sie den Wert eines Registers fest LDB reg reg_mem offset : Laden Sie ein Byte STB reg reg_mem offset : Ein Byte speichern ORR reg reg (reg >>/<< value)AND reg reg (reg >>/<< value)Meilenstein: Stack-Lang-Funktionen
.func [name] [num locals].call [name]Meilenstein: Push, Pop und DUP
.push constant [val]
.dup
.pop local [idx]
.push local [idx]
.pop param [idx]
.push param [idx]
.pop global [idx]
.push global [idx]
Meilenstein: Stack-Lang-Speicherzugriff
.load (..., addr) -> (..., val) .store (..., val, addr) -> (...)Meilenstein: Arithmetik
.add.subMeilenstein: Haufen Allokation
malloc Stack -Funktion (..., num bytes) -> (..., addr)Meilenstein: Parsen und Kompilieren
fn main ) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png