2. "1+2の計算" の詳細

"1+2の計算" をするプログラムが,実際にどのように動いているのか,詳しく見てみましょう.

1. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

"プログラムカウンタ" の値にしたがって,"メインメモリ" の0番地の命令をとりにいきます.

1. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

2. "命令レジスタ" 上の命令 "LOAD 4" を実行する

"メインメモリ" の0番地にあった命令 "LOAD 4" が "命令レジスタ" にとりこまれ,この "LOAD 4" を実行します.

2. "命令レジスタ" 上の命令 "LOAD 4" を実行する

3. "LOAD 4" の結果を"アキュムレータ" に格納する

LOAD命令は

という命令です.ここでは "LOAD 4" なので,4番地の値である "1" を "アキュムレータ" にコピーします.

3. "LOAD 4" の結果を "アキュムレータ" に格納する

4. "プログラムカウンタ" の値を1増やす

"プログラムカウンタ" の値を1つ増やします.

4. "プログラムカウンタ" の値を1増やす

"ステップ実行"の最初のクリックで,ここまで実行が進みます.上の2と3の画像では,プログラムカウンタの値が"1" になっていますが,これは画像を取り込むための都合によるもので,本来ならここで初めて "プログラムカウンタ" の値は "1" になります.

5. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

"プログラムカウンタ" の値にしたがって,"メインメモリ" の1番地の命令をとりにいきます.

5. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

6. "命令レジスタ" 上の命令 "ADD 5" を実行する

"メインメモリ" の1番地にあった命令 "ADD 5" が "命令レジスタ" にとりこまれ,この "ADD 5" を実行します.

6. "命令レジスタ" 上の命令 "ADD 5" を実行する

7. "ADD 5" の結果を"アキュムレータ" に格納する

ADD命令は

という命令です.ここでは "ADD 5" なので,5番地の値である "2" を "アキュムレータ" の値である "1" に加えた値,すなわち "3" を "アキュムレータ" に格納します.

7. "ADD 5" の結果を "アキュムレータ" に格納する

8. "プログラムカウンタ" の値を1増やす

"プログラムカウンタ" の値を1つ増やします.

8. "プログラムカウンタ" の値を1増やす

"ステップ実行"の2回目のクリックで,ここまで実行が進みます.

9. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

"プログラムカウンタ" の値にしたがって,"メインメモリ" の2番地の命令をとりにいきます.

9. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

10. "命令レジスタ" 上の命令 "STORE 6" を実行する

"メインメモリ" の2番地にあった命令 "STORE 6" が "命令レジスタ" にとりこまれ,この "STORE 6" を実行します.

10. "命令レジスタ" 上の命令 "STORE 6" を実行する

11. "STORE 6" により,メインメモリに"アキュムレータ"の値を格納する

STORE命令は

  • STORE n: アキュムレータの値をn番地に格納する
  • という命令です.ここでは "STORE 6" なので,"アキュムレータ" の値 "3" を6番地に書き込みます.

    11. "STORE 6" により,メインメモリに "アキュムレータ" の値を格納する

    12. "プログラムカウンタ" の値を1増やす

    "プログラムカウンタ" の値を1つ増やします.

    12. "プログラムカウンタ" の値を1増やす

    "ステップ実行"の3回目のクリックで,ここまで実行が進みます.

    13. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

    "プログラムカウンタ" の値にしたがって,"メインメモリ" の3番地の命令をとりにいきます.

    13. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ

    14. "命令レジスタ" 上の命令 "STOP 0" を実行する

    "メインメモリ" の3番地にあった命令 "STOP 0" が "命令レジスタ" にとりこまれ,この "STOP 0" を実行します.

    14. "命令レジスタ" 上の命令 "STOP 0" を実行する

    STOP命令は

    という命令です.ここでは "STOP 0" となっていますが,0以外の数字でもプログラムは終了します."ステップ実行"の4回目のクリックで,ここまで実行が進んで,プログラムの実行は終わります.

    プログラム実行の流れ

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

    1. "プログラムカウンタ" の値を見て,"メインメモリ" 上の命令をとりにいく
    2. "命令レジスタ" 上にある命令を実行する
      主な命令は以下のとおり
      • アキュムレータに値を読み込む
      • アキュムレータの値とメインメモリの値で演算を行う
      • メインメモリにアキュムレータの値を書き出す
      • プログラムの実行を終了する(この場合,実行のサイクルは止まる)
    3. "プログラムカウンタ" の値を1増やす

    使われている命令のまとめ

    ここまでに利用された命令をまとめると,以下のとおりです.