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

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

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

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

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

Machine code【NandGame】

はじめに

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

FIRE生活中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

Machine codeレベル

Machine codeレベルのゴールは、次の4命令を実現するマシン語を書くことです。

アドレス処理内容
0Dレジスターに0をセット。
1Aレジスターに2をセット。
2Dレジスターに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」になっています。

つまり、プログラムの結果には影響しないことを意味します。テストもパスしています。