"1+2の計算" をするプログラムが,実際にどのように動いているのか,詳しく見てみましょう.
1. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ
"プログラムカウンタ" の値にしたがって,"メインメモリ" の0番地の命令をとりにいきます.
2. "命令レジスタ" 上の命令 "LOAD 4" を実行する
"メインメモリ" の0番地にあった命令 "LOAD 4" が "命令レジスタ" にとりこまれ,この "LOAD 4" を実行します.
3. "LOAD 4" の結果を"アキュムレータ" に格納する
LOAD命令は
- LOAD n: n番地の内容をアキュムレータにコピーする
という命令です.ここでは "LOAD 4" なので,4番地の値である "1" を "アキュムレータ" にコピーします.
4. "プログラムカウンタ" の値を1増やす
"プログラムカウンタ" の値を1つ増やします.
"ステップ実行"の最初のクリックで,ここまで実行が進みます.上の2と3の画像では,プログラムカウンタの値が"1" になっていますが,これは画像を取り込むための都合によるもので,本来ならここで初めて "プログラムカウンタ" の値は "1" になります.
5. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ
"プログラムカウンタ" の値にしたがって,"メインメモリ" の1番地の命令をとりにいきます.
6. "命令レジスタ" 上の命令 "ADD 5" を実行する
"メインメモリ" の1番地にあった命令 "ADD 5" が "命令レジスタ" にとりこまれ,この "ADD 5" を実行します.
7. "ADD 5" の結果を"アキュムレータ" に格納する
ADD命令は
- ADD n: n番地の値をアキュムレータの値に加える
という命令です.ここでは "ADD 5" なので,5番地の値である "2" を "アキュムレータ" の値である "1" に加えた値,すなわち "3" を "アキュムレータ" に格納します.
8. "プログラムカウンタ" の値を1増やす
"プログラムカウンタ" の値を1つ増やします.
"ステップ実行"の2回目のクリックで,ここまで実行が進みます.
9. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ
"プログラムカウンタ" の値にしたがって,"メインメモリ" の2番地の命令をとりにいきます.
10. "命令レジスタ" 上の命令 "STORE 6" を実行する
"メインメモリ" の2番地にあった命令 "STORE 6" が "命令レジスタ" にとりこまれ,この "STORE 6" を実行します.
11. "STORE 6" により,メインメモリに"アキュムレータ"の値を格納する
STORE命令は
という命令です.ここでは "STORE 6" なので,"アキュムレータ" の値 "3" を6番地に書き込みます.
12. "プログラムカウンタ" の値を1増やす
"プログラムカウンタ" の値を1つ増やします.
"ステップ実行"の3回目のクリックで,ここまで実行が進みます.
13. "プログラムカウンタ" を見て,"メインメモリ" 上の命令をとりこむ
"プログラムカウンタ" の値にしたがって,"メインメモリ" の3番地の命令をとりにいきます.
14. "命令レジスタ" 上の命令 "STOP 0" を実行する
"メインメモリ" の3番地にあった命令 "STOP 0" が "命令レジスタ" にとりこまれ,この "STOP 0" を実行します.
STOP命令は
- STOP n: プログラムを終了する
という命令です.ここでは "STOP 0" となっていますが,0以外の数字でもプログラムは終了します."ステップ実行"の4回目のクリックで,ここまで実行が進んで,プログラムの実行は終わります.
プログラム実行の流れ
このようにプログラムの実行は,以下の1〜3のサイクルを繰り返します.
- "プログラムカウンタ" の値を見て,"メインメモリ" 上の命令をとりにいく
- "命令レジスタ" 上にある命令を実行する
主な命令は以下のとおり- アキュムレータに値を読み込む
- アキュムレータの値とメインメモリの値で演算を行う
- メインメモリにアキュムレータの値を書き出す
- プログラムの実行を終了する(この場合,実行のサイクルは止まる)
- "プログラムカウンタ" の値を1増やす
使われている命令のまとめ
ここまでに利用された命令をまとめると,以下のとおりです.
- LOAD n: n番地の内容をアキュムレータにコピーする
- ADD n: n番地の値をアキュムレータの値に加える
- STORE n: アキュムレータの値をn番地に格納する
- STOP n: プログラムを終了する