Code generation【NandGame編】
コード生成は次の流れの最終処理に該当します。
トークン化⇒構文ツリー化⇒コード生成
コード生成をアルゴリズム(入出力を持つ処理)として見れば、式の構文ツリーをインプッ ...
Grammar【NandGame編】
トークン化の処理後、トークンを構文ツリー化します。
トークンとしては数値、括弧、演算子があります((NandGameではTokenizeレベルで数値、2つの演算子「+」と「-」、普通の括弧「(」「)」だけを処理 ...
Tokenize【NandGame編】
高級言語はアセンブリー言語より人間にやさしく柔軟な構文を持ちます。コンピューターは高級言語のコードを貴秋後コード命令にコンパイルすることで、最終的にCPUが解釈できるようになります。
例えば、2+2 ...
Add、Sub、Neg、And、Or【NandGame編】
スタックを使えば、特定のレジスターに依存しないマクロ演算(加算や減算など)を実現できます。
代わりに、演算はオペランドをスタックからPOPし、演算結果をスタックにPUSHし直します。
こ ...
Init stack、Push D、Pop D、Pop A、Push Value【NandGame編】
本記事は、Stack machineグループの前半のレベルについて焦点を当てます。
スタックの必要性
2個のレジスターだけでプログラムするのは難しく、いずれ限界がきます。例えば、2つのレジスターで2+2
Network【NandGame編】
Networkレベルのゴールは、ネットワーク経由で他のコンピューターからデータを受信して、モニターに表示することです。
ネットワークのワイヤーはアドレス0x6001にメモリーマップされてい
Display【NandGame編】
Displayレベルのゴールは、ディスプレイに好きなロゴを表示することです。
ロゴは何でもよいですが、幅・高さともに16ピクセル以上でなければなりません。
ディスプレイの仕様は
Machine code【NandGame】
Machine codeレベルのゴールは、次の4命令を実現するマシン語を書くことです。
アドレス処理内容0Dレジスターに0をセット。1Aレジスターに2をセット。2Dレジスターに1を加える。3無条件ジ ...Assembler program【NandGame編】
Assembler programレベルのゴールは、コンピュータの緑ランプを少なくとも3回点滅させるプログラムをアセンブリー言語で書くことです。
外部デバイスであるランプはアドレス7 ...
Escape Labyrinth【NandGame編】
Escape Labyrinthレベルのゴールは、火星の迷宮に迷い込んでしまったコンピューターを脱出させるプログラムを書くことです。
コンピューターには車輪と前方障害検知器が備わってい ...