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

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

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

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

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

Add 5【Turing Complete編】

はじめに

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

セミリタイア・ミジンコのIPUSIRONです😀

IPUSIRONのプロフィールを見る

Add 5ステージ

限定的な機能しか持ちませんがCPU回路が完成しました。

ここからはProgrammingステージがスタートします。

※あとでCPU回路を拡張するセクションが出てきます。拡張した結果、プログラムでやれることが増えます。

Add 5ステージのゴールは、入力値に5を足すプログラムを作って、完成したCPU回路上で実行することです。

プログラムメモリーを編集する方法

プログラムメモリーの右上の鉛筆アイコンを押すと、シミュレーター上でバイナリエディターが起動してメモリー内を編集できます。

プログラムメモリーの入出力と編集アイコン

バイナリエディターで、1ビットずつON・OFFを編集できます。

下にある歯車アイコン(View instructions definitions)を押すと、Instructions画面が表示されます。ON・OFFすることで、Instructionの意味を確認できます。

“Read the manual page"を押すと、マニュアルが表示されます。その隣の▼を押すと、各Instrructionビット列とその意味が一覧表示されます。

Add 5ステージを解く

正解は1つだけではありません。ハードウエアの世界もそうですが、ソフトウェアの世界でも同様です。むしろソフトウェアの方が制限が少ない分さまざまな回答があり得えます。

1:脳内でざっくりとプログラムの設計を考える

・Instructionビット列が1命令に相当。

・プログラムメモリーに1命令ずつ順に並べておく。

・使える命令は4種類(=4モード)あった。Immediateモード、Copyモード、Calculationモード、Conditionモード。

・この中でCalculationを使えば足し算はできそう。

・5という値を直接扱うには、即値を扱えるImmediateモードでいけるはず。

・入力の数をCPU内に保存するにはCopyモードを使えばよい。

・同様に計算結果を出力させる場合もCopyモードでいける。

・順序通りに並べればざっくりと次の流れになる。入力をコピー。即値で5を保存。calculationモードでADDする。出力端子にコピー。

・場合によっては、上書きによって値が消されないように、別のレジスターに値をコピーする必要があるかもしれない。

2:紙に処理内容を書き出す

分岐処理はないですし、この程度であればフローチャートは不要です。時系列に処理を並べていけばよいでしょう。

まだこのCPU用のアセンブリ言語は定義していないので、処理を日本語で書いていけばよいでしょう。

処理順処理内容モード
1入力を記憶する。Copyモード
25を記憶する。Immediateモード
3(2つのバイトデータを)ADD演算する。Calculationモード(Computeモード)
4計算結果を出力する。Copyモード

3:より具体的な処理に書き直す

各種モードの仕様を考慮して、より具体的な処理に書き換えます。

モードによっては特定のレジスターを扱いますので、これを考慮して書くのがポイントです。

処理順処理内容モード
1入力したバイトデータをREG 1に保存する。Copyモード
2即値5をREG 0に保存するImmediateモード
3REG 0の内容をREG 2にコピーする。
※次の処理のための準備。
Copyモード
4REG 1とREG 2の内容をADD演算して、計算結果をREG 3に保存する。Calculationモード(Computeモード)
5REG 3の内容を出力する。Copyモード

4:疑似ハンドアセンブルする

5つの処理をそれぞれ、Instructionビット列に書き換えます。

処理順処理内容モードモードに対応する2ビットInstructionビット列
1入力したバイトデータをREG 1に保存する。Copyモード10b1011 0001b
2即値5をREG 0に保存するImmediateモード00b0000 0101b
3REG 0の内容をREG 2にコピーする。
※次の処理のための準備。
Copyモード10b1000 0010b
4REG 1とREG 2の内容をADD演算して、計算結果をREG 3に保存する。Calculationモード
(Computeモード)
01b0100 0100b
5REG 3の内容を出力する。Copyモード10b1001 1110b
Instructionビット列に変換した

5:一連のInstructionビット列をプログラムメモリーに書き込む

バイナリエディターを起動して一連のInstructionビット列をプログラムメモリーに書き込みます。

6:テストする

テストをパスすると、次のステージに進めます。

インストラクションとプログラム

コンピューターに指示する命令をインストラクションといいます。

そして、インストラクションを組み合わせて仕事の手順を表すものをプログラムと呼びます。