5章 コンピュータアーキテクチャ (前半)
本章では、必要最低限のHackコンピュータのアーキテクチャを作成します。
★単語
・データメモリ:変数、配列、オブジェクトといった高水準なデータ形式を操作できる
それらのデータは機械語に変換するとバイナリデータになり、データメモリに格納される
・命令メモリ:高水準で書かれたコマンドを機械語に変換すると命令メモリに格納される
・CPU:命令メモリから命令を取り出し(フェッチ)、解読(デコード)し、指定された命令を実行し、実行すべき命令の場所を計算する
このような動作をALU、制御ユニット、レジスタを用いて実行している
・ALU:下位レベルの算術演算と論理演算を行う(数値の加算、ワードやビットの操作、与えられた数が正しいか 等)
・制御ユニット:命令のデコードを行っている
・データレジスタ:数値データを格納する
・アドレスレジスタ:メモリのどこかのワードにアクセスする際、そのアドレスを保持し制御するレジスタ
・プログラムカウンタレジスタ(PC):命令メモリからフェッチを行うアドレスが格納されている
命令を実行する過程でCPUはPCを更新しないといけない
⇒現在の命令に 『goto』 命令が含まれなければ、PCはインクリメントされる
現在の命令に 『goto test』 命令が含まれていれば、CPUはPCにtestを書き込む
・メモリマップドI/O:
I/Oデバイスの領域をメモリ上に割り当て、CPUに通常のメモリ領域のように見せかける
-排他的なメモリ領域を確保し、専用のメモリマップを構成する
-入力装置の場合(キーボード、マウス 等):デバイスの状況を常に反映するようにメモリマップを作成
-出力装置の場合(スクリーン、スピーカ 等):デバイスの状況を常に駆動するようにメモリマップを作成
-外部のイベントが入力装置に影響と与える場合(キーを押す、マウスを動かす 等)
→対応するメモリマップに値が書き込まれる
-出力装置を操作する場合(スクリーンに描画する、音を流す 等):対応するメモリマップに値を書き込む
・現在命令:命令メモリ中でPCが指す場所のデータが出力される(PC(出力)⇒命令メモリのアドレス入力(入力))
-実行
→アドレス命令(A命令)の場合:15ビットの定数値をAレジスタに代入
→計算命令(C命令)の場合:a、c、d、j を制御ビットとして扱い、ALUとレジスタに命令を実行させる
-フェッチ:現在命令のjビットとALUの出力で、次のどの命令をフェッチするか決まる
→ジャンプの場合:PCにAレジスタの値を代入
→それ以外の場合:PCの値をインクリメント
・アドレス空間:アドレス指定によりアクセス可能なメモリ範囲
★命令
・A命令
A命令(@value)
Aレジスタに15ビットの値を設定できる
この命令は特定の値をAレジスタに格納することができる
例)@5 ⇒ 0000000000000101 をAレジスタに格納
3つの異なる用途で使用できる
1.Aレジスタを用いて定数を代入する
2.メモリ操作を行う(Aレジスタにアドレスを設定 ⇒ C命令でAレジスタで指定したメモリ位置のデータを操作)
3.移動命令の用途(Aレジスタに移動先のアドレスを読み込む ⇒ C命令(jump命令)で次に実行する命令の位置まで移動)
・C命令(dest=comp;jump)
1.comp領域の仕様
aビット1つとcビット6つによって決定される
計7ビットの配列は128通りの異なる関数を指定できる
定数の-1は2の補数を使う
2.dest領域の仕様
1番目と2番目のdビットは、計算結果をAレジスタとDレジスタに格納するかを指定
3番目のdビットは、計算結果をMemory[A]に格納するかどうかを指定
3.jump領域の仕様
次に何を行うかを指定
→プログラムの次の命令をフェッチし実行
→プログラムのどこかの場所に位置する命令をフェッチし実行
※移動したいアドレスはあらかじめAレジスタに設定されていること
最初のjビットは、ALUの計算結果の値が負の場合に移動することを指定
2番目のjビットが0の時、3番目のjビットは正の時に移動を指定
Back
1章 ブール理論
1章 ブール理論(番外編)
2章 ブール算術
3章 順序回路
4章 機械語(前半)
4章 機械語(後半)
・Twitter
https://twitter.com/tango3564
・Instagram
https://www.instagram.com/tango3690/