Eq【NandGame編】
Eqレベル
Eqレベルのゴールは、マクロEQを実装することです。
マクロEQは、スタックから上から2つの値をPOPして(取り出して)比較します。等しい場合は-1(=0xFFFF)をPUSHし、そうでなければ0(=0x0000)をPUSHします。
つまり、条件式(conditionals)では、0xFFFFを真、0を偽と扱っているわけです。
Eqレベルを解く
2つの値が等しいかどうかは、差を取り、その結果が0かどうかで判断できます。
今回はスタック上の連続する2つの値を比較したいので、SUBを呼び出します。その結果、減算結果はスタックに格納されます。
マクロを駆使しつつ、条件分岐の命令を追加で利用すれば、次のコードになります。
※別のコードでも動きます。ここではわかりやすいコードを心がけましたが、高速性を重視しても構いません。
SUB
POP_D
A = not_equal
D ; JNE
D = -1
PUSH_D
A = skip
JMP
not_equal:
D = 0
PUSH_D
skip: