Add 5【Turing Complete編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中の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モード |
2 | 5を記憶する。 | Immediateモード |
3 | (2つのバイトデータを)ADD演算する。 | Calculationモード(Computeモード) |
4 | 計算結果を出力する。 | Copyモード |
3:より具体的な処理に書き直す
各種モードの仕様を考慮して、より具体的な処理に書き換えます。
モードによっては特定のレジスターを扱いますので、これを考慮して書くのがポイントです。
処理順 | 処理内容 | モード |
---|---|---|
1 | 入力したバイトデータをREG 1に保存する。 | Copyモード |
2 | 即値5をREG 0に保存する | Immediateモード |
3 | REG 0の内容をREG 2にコピーする。 ※次の処理のための準備。 | Copyモード |
4 | REG 1とREG 2の内容をADD演算して、計算結果をREG 3に保存する。 | Calculationモード(Computeモード) |
5 | REG 3の内容を出力する。 | Copyモード |
4:疑似ハンドアセンブルする
5つの処理をそれぞれ、Instructionビット列に書き換えます。
処理順 | 処理内容 | モード | モードに対応する2ビット | Instructionビット列 |
---|---|---|---|---|
1 | 入力したバイトデータをREG 1に保存する。 | Copyモード | 10b | 1011 0001b |
2 | 即値5をREG 0に保存する | Immediateモード | 00b | 0000 0101b |
3 | REG 0の内容をREG 2にコピーする。 ※次の処理のための準備。 | Copyモード | 10b | 1000 0010b |
4 | REG 1とREG 2の内容をADD演算して、計算結果をREG 3に保存する。 | Calculationモード (Computeモード) | 01b | 0100 0100b |
5 | REG 3の内容を出力する。 | Copyモード | 10b | 1001 1110b |
5:一連のInstructionビット列をプログラムメモリーに書き込む
バイナリエディターを起動して一連のInstructionビット列をプログラムメモリーに書き込みます。
6:テストする
テストをパスすると、次のステージに進めます。
インストラクションとプログラム
コンピューターに指示する命令をインストラクションといいます。
そして、インストラクションを組み合わせて仕事の手順を表すものをプログラムと呼びます。