XOR【Turing Complete編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
XORステージ
XORステージのゴールは、XOR演算をソフトウェア的に実現することです。
入力から2回バイトデータを読み込み、そのXOR演算した結果を出力させます。
XORステージを解く
1:XORを実現する方法を検討する
我々のCPUはCalculation(Compute)モードにすることで、ALUの力を借りてさまざまな演算を実現できます。
現在のところALUがサポートしている演算は、OR演算、NAND演算、NOR演算、AND演算、ADD演算、SUB演算になります。
これらの演算はハードウェア的に実現されていますが、今回はこれらの演算を組み合わせてXOR演算をソフトウェア的に実現します。
XORを実現するための回路図を参考にしてください。
ここでは、上記の記事で紹介した「NAND、OR、ANDで構成する【別解4】」を採用します。
A | B | X←NAND(A, B) | Y←OR(A, B) | AND(X, Y) | XOR(A, B) |
---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 | 0 |
2:3つの命令を定義する
NAND、OR、ANDに対応する命令を定義します。それぞれの命令名は"nand"、"or"、"and"としています。
3:出力用の命令を定義する
REG 0の内容をOutput端子にコピーする命令を定義します。命令名は"OUT"とします。
※定義済みのIN命令と対の関係になります。
4:プログラムを実装する
IN
reg0_to_reg1
IN
reg0_to_reg2
nand
reg3_to_reg4 # NANDの結果を一時保存.
or
reg4_to_reg1 # REG1←NANDの結果.
reg3_to_reg2 # REG2←ORの結果.
and
reg3_to_reg0
OUT
プログラムの実装後に、reg3_to_reg4、reg4_to_reg1、reg3_to_reg2、reg3_to_reg0を命令として定義します。
5:テストする
すべてのテストのパスすると、ステージクリアとなります。