4. 分岐を使ったプログラム

次に分岐を使ったプログラムの実行を見てみましょう.

0. プログラムの入力

以下のプログラムをプログラム領域にコピー&ペーストして,"Submit"ボタンを押して,メインメモリに読み込んでください.

プログラムの入力

1. "STEP"によるプログラムの実行

ここでも"STEP"をクリックして1命令ずつ実行して行きます.最初の状態では"PROGRAM COUNTER"と"ACCUMURATOR"の値は,ともに「0」となっています.

"STEP"によるプログラムの実行

2. "SUB 4" の実行

0番地の命令は "205 (SUB 5)" です.SUB命令は

という命令ですから,"ACCUMULATOR" の初期状態の値「0」から5番地の値である「-5」を 引いて,結果の「5」を"ACCUMULATOR"に格納します.

"SUB 4"の実行

3. "BRP 3" による条件つきのジャンプ

1番地の命令は "803 (BRP 3)" です.BRP命令は

という命令です.ここでは "ACCUMULATOR" の値は「5」で正ですから,"PROGRAM COUNTER"の値が「3」になります.

"BRP 3" の実行

仮に(5番地の値が正で)"ACCUMULATOR" の値が負になった場合は, "PROGRAM COUNTER" の値は1つ増えて「2」になります.

4. "STA 5" の実行

3番地の命令は "305 (STA 5)" です.したがって,"ACCUMULATOR" の値「5」をメインメモリの5番地に書き出します.

"STA 5" の実行

5. "HLT" によるプログラムの終了

3番地の命令は "000 (HLT)" です.HLT命令によって,プログラムが終了します.このとき4番地に格納されている値「5」は、プログラム開始時の4番地の値「-5」の絶対値となっています.

"HLT" によるプログラムの終了

プログラムの終了時には,以下のようになります.

プログラムの終了時

6. "RESET"によるプログラムの再実行

ここで"RESET"をクリックすると,"PROGRAM COUNTER"と"ACCUMURATOR"の値は,ともに「0」になります.1つ注意する必要があるのは,メインメモリの5番地が変わっていることです.元々のプログラムでは「-5」でしたが,1回実行したため「5」に書き換えられています.ここから"STEP"で1命令ずつ実行してみましょう.

"RESET"によるプログラムの再実行

7. "SUB 4" の実行

0番地の命令は "205 (SUB 5)" です."ACCUMULATOR" の初期状態の値「0」から5番地の値である「5」を引いて,結果の「-5」が"ACCUMULATOR"に格納されます.

"SUB 4"の実行

8. "BRP 3" による条件つきのジャンプ

1番地の命令は "803 (BRP 3)" です.ここでは "ACCUMULATOR" の値は「-5」ですから,今回は"PROGRAM COUNTER"の値は「3」には書き換えられずに「2」となります.

"BRP 3" の実行

5. "HLT" によるプログラムの終了

2番地の命令は "000 (HLT)" です.HLT命令によって,プログラムが終了します.このとき4番地に格納されている値「5」は、プログラム開始時の4番地の値「5」の絶対値となっています.

"HLT" によるプログラムの終了

プログラムの終了時には,以下のようになります.

プログラムの終了時

分岐命令

分岐を行う命令には,以下のようなものがあります.

演習: 分岐命令の動きを確かめる

上で説明したサンプルプログラム"n番地の内容の絶対値をとる" の,4番地の値を自分の誕生月やその他の値に変えるとどうなるか,確かめてみましょう.