Not、Goto、If-goto【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Notレベル
Notレベルのゴールは、マクロNOTを実装することです。
マクロNOTは、スタックの一番上のデータをビット反転(2進数の各桁でビット反転)します。
![](https://akademeia.info/wp-content/uploads/2023/11/not1.png)
Notレベルを解く
POPしてからビット反転のビット演算子を使って、その結果をPUSHすればよいだけです。
POP_D
D = ~D
PUSH_D
![](https://akademeia.info/wp-content/uploads/2023/11/not2.png)
Gotoレベル
Gotoレベルのゴールは、マクロGOTOを実装することです。
マクロGOTOは、"label"というラベルのある行番号にジャンプします。
※[Show Assembler Help]ボタンの上に"Placeholders: label"と表示されています。
![](https://akademeia.info/wp-content/uploads/2023/11/goto1.png)
Gotoレベルを解く
これまでのレベルですでにJMP命令を活用しているので、本レベルは簡単なはずです。
A = label
JMP
![](https://akademeia.info/wp-content/uploads/2023/11/goto2.png)
If-gotoレベル
If-gotoレベルのゴールは、マクロIF_GOTOを実装することです。
マクロIF_GOTOは、スタックの一番上の値をPOPし、その値が0でなければ"label"というラベルにジャンプします。
※[Show Assembler Help]ボタンの上に"Placeholders: label"と表示されています。
![](https://akademeia.info/wp-content/uploads/2023/11/if-goto1.png)
If-gotoレベルを解く
POP_D
A = label
D; JNE
![](https://akademeia.info/wp-content/uploads/2023/11/if-goto2.png)