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

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

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

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

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

Assembler Language【NandGame編】

2023年11月13日

はじめに

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

FIRE生活中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

Assembler Languageレベル

Assembler Languageレベルのゴールは、与えられたオペコードに対応するビットフラグを設定することです。

NandGameで扱うアセンブリー言語の命令には3つの部分があります。

Destination(宛先)演算結果が書き込まれる先のレジスターを指定する。a,d,*aの3ビット
Calculation(演算)ALUで実行する演算を指定する。
ットパターンについては、ALUレベルを参照。
u,op1,op0,zx,swの5ビット
Jump-condition(ジャンプ条件)ジャンプする際の条件を指定する。オプション的存在。
条件の構成についてはConditionレベルを参照。
le,eq,gtの3ビット

Assembler Languageレベルを解く

3つの部分から構成されているので、順を追って考えていきましょう。

1:Destinationの表を完成させる

ここは簡単です。各ビットがオペコードに対応します。例えば、レジスターAに出力するのであれば、aフラグだけを1にすればよいのです。

2:Calculationの表を完成させる

ALUレベルの入出力の表を参考にします。演算における第1引数はDレジスター、第2引数はAレジスターになります。逆にする場合には、sw(スイッチ)フラグを1にします。

これらを踏まえて表を完成させようとしても、後半(オペコードが「-D」)以降を埋めるためには、ALU回路内、すなわちlogic unitコンポーネントやarithmetic unitコンポーネントの入出力を意識しなければなりません。

本レベルの表を完成させるという目的を達成するだけであれば、当てずっぽうで調べるのも1つの手です。残されたビットフラグのうち、それっぽいものを次々に試してしまうのです。

3:Jump-conditionの表を完成させる

ジャンプ命令のオペコードの記号が何を意味しているのかわからないと、Conditionレベルの表を参考にできません。

3文字で構成されています。

1文字目は"Jump"を意味する’J’固定です。

2~3文字目の"LT"は"less than"、"LE"は"less and equal"、"GT"は"great than"、"GE"は"great and equal"に対応します。

それ以外の"JMP"は強制ジャンプ、"JEQ"は"Jump Equal"であり「=のときにジャンプ」を意味します。

以上でレベルクリアになります。