Assembler Language【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中の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"であり「=のときにジャンプ」を意味します。
以上でレベルクリアになります。