Not、Goto、If-goto【NandGame編】
Notレベルのゴールは、マクロNOTを実装することです。
マクロNOTは、スタックの一番上のデータをビット反転(2進数の各桁でビット反転)します。
Notレベルを解く
POPしてからビッ
Gt、Lt【NandGame編】
Gtレベルのゴールは、マクロGTを実装することです。
マクロGTは、スタックから上から2つの値をPOPして(取り出して)比較します。最初の値が2番目の値より大きければ値-1(=0xFFFF)をPUSHし、そうでな ...
Eq【NandGame編】
Eqレベルのゴールは、マクロEQを実装することです。
マクロEQは、スタックから上から2つの値をPOPして(取り出して)比較します。等しい場合は-1(=0xFFFF)をPUSHし、そうでなければ0(=0x0000 ...
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ピクセル以上でなければなりません。
ディスプレイの仕様は