bootstrapOS
1.0.0
多くのOSチュートリアルは、アセンブリまたはC ++で始まります。マシンコードから始めます。
このRaspberry Pi 4チュートリアルでは、マシンコードに自己ホストされたアセンブラーを書きます。次に、そのコンパイラ(新しい機能を実装して、コンパイラソースコードのそれらの機能を使用して)を高レベルの言語を争うことができるものに進化します。最後に、ほとんどのチュートリアルが開始される高レベルの言語では、シンプルなWebサーバーを書いて、いつかチュートリアル独自のドキュメントをホストします。
マイルストーン:ブートストラップマシンコード?
;コメントのコマンドマイルストーン:ビッグエンディアンマシンコード?
マイルストーン:gotoとラベル付けされましたか?
J :バイナリ付きの相対ブランチL :GOTOのラベル(スキームpos4 name でメモリテープを読み取ります) GOTO :gotoラベルマイルストーン:条件付きgoto?
GOEQGONEGOGTGOLTGOGEGOLEマイルストーン:ラベル付き関数?
CALL :「goto」ですが、リンクされた分岐がありますマイルストーン:弦を発します
MOV reg charEMIT string :一連のMOV reg charおよびCALL emit マイルストーン:ブートストラップアセンブリ
RET :関数呼び出し後に戻りますMOV reg hexMOV reg decMOV reg regADD reg reg [reg/value] :レジスタの値を設定しますSUB reg reg [reg/value] :レジスタの値を設定しますLDB reg reg_mem offset :バイトをロードしますSTB reg reg_mem offset :バイトを保存しますORR reg reg (reg >>/<< value)AND reg reg (reg >>/<< value)マイルストーン:スタックラング関数
.func [name] [num locals].call [name]マイルストーン:プッシュ、ポップ、デップ
.push constant [val]
.dup
.pop local [idx]
.push local [idx]
.pop param [idx]
.push param [idx]
.pop global [idx]
.push global [idx]
マイルストーン:スタックラングメモリアクセス
.load (...、addr) - >(...、val) .store (...、val、addr) - >(...)マイルストーン:算術
.add.subマイルストーン:ヒープ割り当て
mallocスタック関数(...、numバイト) - >(...、addr)マイルストーン:解析とコンパイル
fn mainのGOTOを使用) 
for f in ./os/*.txt; do wc -l $f; done | Rscript bar-gen.R ; feh ./loc-stats.png