24.4.2. 1+2の計算
前ページで入力したプログラムは, 1 + 2 という計算をしています. 1ステップずつ実行して理解しましょう.
概要 #
プログラムの実行は,以下の1~3のサイクルを繰り返します.
- “PROGRAM COUNTER” の値を見て,メインメモリ上の対応する番地の命令を “INSTRUCTION REGISTER” に読み込む
- “PROGRAM COUNTER” の値を 1増やす
- メインメモリから読み込んだ “INSTRUCTION REGISTER” 上の命令を実行する
program counter は,次に行う命令を読む場所を指します.
主な命令は以下の通りです
- LDA n
- n番地の内容を"ACCUMULATOR"にコピーする
- ADD n
- n番地の値を"ACCUMULATOR"の値に加える
- STA n
- “ACCUMULATOR"の値をn番地に格納する
- HLT
- プログラムを終了する
“STEP"によるプログラムの実行 #
“STEP” をクリックして,1命令ごとにプログラムを実行しましょう.
実行速度は"OPTIONS"メニュで変更できます.動作を確実に観察するためには"default slow"としておくと良いでしょう.通常の速度は"default normal"です.
最初の実行 #
実行開始にあたっては"PROGRAM COUNTER"と"ACCUMURATOR"の値は,ともに「0」となっています.
最初のステップで,CPUはメインメモリの0番地の命令を読み込むとともに,“PROGRAM COUNTER"の値を1つ増やす操作を始めます.

命令の読み込み #
“PROGRAM COUNTER"の値が1つ増やされて「1」になります.また当初の"PROGRAM COUNTER” の値「0」にしたがって,メインメモリの0番地の命令を読込みに行きます.
“INSTRUCTION REGISTER” の更新 #
メインメモリの0番地にあった命令 “504 (LDA 4)” が “INSTRUCTION REGISTER” に読み込まれます.

実行 #
“INSTRUCTION REGISTER” に読み込まれた命令 “504 (LDA 4)” を実行します.

結果の格納 #
LDA命令は
LDA n: n番地の内容を"ACCUMULATOR"にコピーする
という命令です.ここでは “LDA 4” なので,4番地の値である「1」を “ACCUMULATOR” にコピーします.

“STEP"の最初のクリックで,ここまで実行が進みます.
次のSTEP #
改めて “STEP” をクリックして,次の命令を実行しましょう.“PROGRAM COUNTER"の値は「1」ですので,CPUはメインメモリの1番地の命令を読み込むとともに,“PROGRAM COUNTER"の値を1つ増やす操作をします.

命令の読み込み #
“PROGRAM COUNTER"の値が1つ増やされて「2」になります.また直前の"PROGRAM COUNTER” の値「1」にしたがって,メインメモリの1番地の命令を読込みに行きます.

“INSTRUCTION REGISTER” の更新 #
メインメモリの1番地にあった命令 “105 (ADD 5)” が “INSTRUCTION REGISTER” に読み込まれます.
実行 #
“INSTRUCTION REGISTER” に読み込まれた命令 “105 (ADD 5)” を実行します.

結果の格納 #
ADD命令は
ADD n: n番地の値を"ACCUMULATOR"の値に加える
という命令です.ここでは “ADD 5” なので,5番地の値である「2」 を “ACCUMULATOR” の値である「1」に加えた値,すなわち「3」を"ACCUMULATOR"に格納します.

“STEP"の2回目のクリックで,ここまで実行が進みます.
3ステップ目 #
改めて “STEP” をクリックして,次の命令を実行しましょう.“PROGRAM COUNTER"の値は「2」ですので,CPUはメインメモリの2番地の命令を読み込むとともに,“PROGRAM COUNTER"の値を1つ増やす操作をします.

命令の読み込み #
“PROGRAM COUNTER"の値が1つ増やされて「3」になります.また直前の"PROGRAM COUNTER” の値「2」にしたがって,メインメモリの2番地の命令を読込みに行きます.

“INSTRUCTION REGISTER” の更新 #
メインメモリの2番地にあった命令 “306 (STA 6)” が “INSTRUCTION REGISTER” に読み込まれます.

実行 #
“INSTRUCTION REGISTER” に読み込まれた命令 “306 (STA 6)” を実行します.

結果の格納 #
STA命令は
STA n: "ACCUMULATOR"の値をn番地に格納する
という命令です.ここでは “STA 6” なので,“ACCUMULATOR” の値である「3」をメインメモリの6番地に格納します.

“STEP"の3回目のクリックで,ここまで実行が進みます.
4ステップ目 #
改めて “STEP” をクリックして,次の命令を実行しましょう.“PROGRAM COUNTER"の値は「3」ですので,CPUはメインメモリの3番地の命令を読み込むとともに,“PROGRAM COUNTER"の値を1つ増やす操作をします.

命令の読み込み #
“PROGRAM COUNTER"の値が1つ増やされて「4」になります.また直前の"PROGRAM COUNTER” の値「3」にしたがって,メインメモリの3番地の命令を読込みに行きます.

“INSTRUCTION REGISTER” の更新 #
メインメモリの3番地にあった命令 “000 (HLT)” が “INSTRUCTION REGISTER” に読み込まれます.

実行 #
INSTRUCTION REGISTER” に読み込まれた命令 “000 (HLT)” を実行します.
HLT命令は
HLT: プログラムを終了する
という意味で,プログラムが終了します.

“STEP"の4回目のクリックで,ここまで実行が進んで,プログラムの実行は終わります.
メモリの6番地の値が 3 になっています.これが 1 + 2 の結果に相当します