当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題のある表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

XOR【Turing Complete編】

はじめに

いつもブログをご覧いただきありがとうございます。

セミリタイア・ミジンコのIPUSIRONです😀

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】」を採用します。

ABX←NAND(A, B)Y←OR(A, B)AND(X, Y)XOR(A, B)
001000
011111
101111
110100

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:テストする

すべてのテストのパスすると、ステージクリアとなります。