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

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

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

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

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

Program【Turing Complete編】

はじめに

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

コーストFIRE中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

Programステージ

Programステージのゴールは、これまで拡張してきたCPU回路の原型にメモリーとプログラムカウンターを追加することです。

Programステージを解く

1:Programコンポーネント周辺をワイヤリングする

キャンバスの左上に配置されている大きな板状のものは、Programコンポーネントです。バイトデータがたくさん格納されたコンポーネントであり、メモリーと思ってもらって構いません。

※現時点でのアーキテクチャーでは、メモリー内に格納された1バイトは、1命令として扱われています。

メモリーの中には1バイトデータに区切りがあり、その区切りにはそれぞれに番号が割り当てられいます。この番号を番地といい、一般に英語のままアドレスといいます。

入出力は次の通りです。

入力・Addressピン・・・アドレス。1バイト。
出力・Outputピン・・・指定アドレスのバイトデータ。1バイト。

ProgramコンポーネントのOuputピンを、既存回路から左側に伸びているワイヤーに接続します。

Programコンポーネントの入力にはアドレス用しかありませんでした。つまり、計算結果をProgramコンポーネントに記憶できません。
加えて、Programコンポーネントに書き込まれた一連のバイトデータは、命令語の集まりであり、プログラムそのものといえます。
以上から、本ステージのProgramコンポーネントはプログラムメモリーに相当します。
RAM(データメモリーに使われる)ではなく、ROM(プログラムメモリーに使われる)で実現できるわけです。

2:プログラムカウンターをワイヤリングする

8 Bit Counterコンポーネントが使える状態になっているので、これをプログラムカウンターとして利用します。つまり、メモリーの番地指示器として使うのです。

8 Bit Counterコンポーネントの入出力は次の通りです。

入力・Increment/Overwriteピン
ONなら指定分(デフォルトでは1)ずつ増分(インクリメント)する。増分を変更したければ、「Increment by: 1」の下の8ビット列をON・OFFで変更できる。
OFFなら上書きする。
・Overwrite valueピン・・・1バイト。カウンターの内容(番地)を上書きする際に、Overwirte valueピンをONにしたうえで使う。
出力・Outputピン・・・カンターの内容(番地)を出力する。1バイト。

「8 Bit CounterコンポーネントのOutputピン」を「ProgramコンポーネントのAddressピン」に接続します。

3:全体の処理を脳内でトレースする

回路の左上だけを触りましたが、全体を見ておきましょう。次の流れで処理されていきます。

プログラムカウンター(PC)⇒メモリー⇒Instructionビット列の解読処理⇒Instructionに対応するモードで処理⇒コピー結果や計算結果をレジスターに保存 or 出力する

4:テストする

[Run]ボタンを押してテストすると、プログラムカウンターによってメモリー内のデータが1バイトずつ出力されていきます。これが既存回路に流れて、処理されていきます。

今回のステージはかなり簡単でしたが、それはこれまで地道に積み上げてきた結果です。