Muitos tutoriais do sistema operacional começam na montagem ou C ++. Começamos no código da máquina.
Neste tutorial de Raspberry Pi 4, escreveremos um assembler auto-hospedado no código da máquina. Em seguida, desenvolveremos esse compilador (implementando novos recursos e depois usando esses recursos no código-fonte do compilador) em algo capaz de disputar um idioma de alto nível. Finalmente, em nosso idioma de alto nível, onde a maioria dos tutoriais inicia, escreveremos um servidor da web simples para um dia hospedar a própria documentação do tutorial.
Milestone: Código da máquina de bootstrap?
; comando para comentários Milestone: Código da máquina Big-Endian?
Milestone: rotulado GOTO?
J : Ramo relativo com binário L : Rótulo para Goto (Leia na fita de memória com esquema pos4 name ) GOTO : Goto Label Milestone: Goto condicional?
GOEQGONEGOGTGOLTGOGEGOLEMilestone: Funções rotuladas?
CALL : "Goto", mas com ramificação vinculada Milestone: Strings emitindo
MOV reg charEMIT string : Macro para série de MOV reg char e CALL emit com suporte de sequência de escape Milestone: montagem de bootstrap
RET : retornar após a chamada de função MOV reg hexMOV reg decMOV reg regADD reg reg [reg/value] : Defina o valor de um registro SUB reg reg [reg/value] : defina o valor de um registro LDB reg reg_mem offset : Carregar um byte STB reg reg_mem offset : Armazene um byte ORR reg reg (reg >>/<< value)AND reg reg (reg >>/<< value)Milestone: funções de pilha de pilhas
.func [name] [num locals].call [name]Milestone: empurrar, pop e dup
.push constant [val]
.dup
.pop local [idx]
.push local [idx]
.pop param [idx]
.push param [idx]
.pop global [idx]
.push global [idx]
Milestone: acesso à memória de pilha-lang
.load (..., addr) -> (..., Val) .store (..., val, addr) -> (...)Marco: aritmética
.add.subMilestone: alocação de heap
malloc (..., num bytes) -> (..., addr)Milestone: analisar e compilar
fn main ) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png