Machine code【NandGame】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Machine codeレベル
Machine codeレベルのゴールは、次の4命令を実現するマシン語を書くことです。
アドレス | 処理内容 |
---|---|
0 | Dレジスターに0をセット。 |
1 | Aレジスターに2をセット。 |
2 | Dレジスターに1を加える。 |
3 | 無条件ジャンプする。 ※Aレジスターに格納されたデータがジャンプ先の番地になる。ここではアドレス2にジャンプ。 |
このプログラムを実行すると、Dレジスターを0からインクリメントし続けます。
NandGameのコンピューターの動作
各命令に適切なビットフラグを設定して、マシン語のプログラムを記述します。
コンピューターはクロック信号に応じてマシン語の命令を1つずつ実行します。
Machine codeレベルを解く
右側にあるcomputerの枠内の[Clock Tick]ボタンを押すことで、1番地ずつ処理が進みます。
Assembler欄が上から「D=0」「A=2」「D=D+1」「JMP」となるように、フラグを設定します。
フラグの意味がわからない場合は、実際にON/OFFしてみて、Assemblerに表示される内容を参考にするとよいでしょう。
ポイントは次の通りです。
・Aレジスターに値をセットする場合は、15ビット目(0スタート。ciフラグに相当)は0、残りの15ビットで格納する値そのものを指定する。
・ci=1、target=1とすれば、Dレジスターを操作することになる。
・ci=1、jumpの3フラグを設定することで、さまざまなジャンプ命令を実現できる。
※正解のマシン語は1通りだけではありません。処理によっては、直接影響しないフラグがあります。
例えば、次の画像のアドレス4のマシン語に注目してください。11ビット目と12ビット目が1になっていますが、Assembler欄は「JMP」になっています。
つまり、プログラムの結果には影響しないことを意味します。テストもパスしています。