CUPの構成要素
主なレジスタの種類
- アキュムレータ
- 汎用レジスタ
- フラグ・レジスタ
- プログラム・カウンタ
- ベース・レジスタ
- インデックス・レジスタ
- 命令レジスタ
- スタック・レジスタ
大まかなプログラムが動作する流れ(順次進行)
- クロックに合わせてCPUが動作している
- 人間がプログラムを実行する
- ディスクに保存されたプログラム(命令とデータ)をメモリに書き込む
- 制御装置が、次に実行される命令が保持されるメモリのアドレスを、プログラム・カウンタに書き込む
- 制御装置が、プログラム・カウンタのアドレスをもとに、次に実行される命令が保持されるメモリが保持する命令を、命令レジスタに書き込む
- 制御装置が、命令の内容をもとに、メモリ上のデータを、アキュムレータや汎用レジスタに書き込む
- 演算装置が命令の内容をもとに、演算をする
- 演算の結果をアキュムレータに書き込む
- 命令が占めるメモリのサイズの分だけ、プログラム・カウンタを増加させる
- 4へ戻る
条件分岐と繰り返しにおけるレジスタの動作
- 条件分岐と繰り返しにおける仕組みは同じで、ジャンプ命令により実現される
- ジャンプ命令は、「ある条件を満たした場合に、特定の命令へジャンプせよ」という命令
- ジャンプ命令が、遷移先のメモリアドレスを、プログラム・カウンタに書き込む
関数呼び出しにおけるレジスタの動作
- コール命令は、「特定の命令へジャンプせよ」という命令
- リターン命令は、「呼び出し元の命令へ戻れ」という命令
- コール命令はジャンプ命令と似ているが、コール命令は、リターン命令の戻り先をメモリ上のスタックへ書き込むという点でことなる
- スタックのメモリアドレスを保持するのが、スタック・レジスタ
配列の表現
- メモリ内の1つのアドレスが持つ容量は1byteであるため、命令やデータが複数のメモリに跨って表現されることがある
- この範囲を表現するために、ベース・レジスタとインデックス・レジスタが使われる
- ベース・レジスタは範囲の始点を保持し、インデックス・レジスタは添え字を保持する