1+2の計算

24.4.2. 1+2の計算

前ページで入力したプログラムは, 1 + 2 という計算をしています. 1ステップずつ実行して理解しましょう.

概要 #

プログラムの実行は,以下の1~3のサイクルを繰り返します.

  1. “PROGRAM COUNTER” の値を見て,メインメモリ上の対応する番地の命令を “INSTRUCTION REGISTER” に読み込む
  2. “PROGRAM COUNTER” の値を 1増やす
  3. メインメモリから読み込んだ “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 の結果に相当します
シミュレータの使い方 1+2の計算 プログラムの書き換え
このサイトは開発版の はいぱーワークブック です.