いよいよ、プログラムらしいプログラムに進みます。
今回はカタツムリに見立てた@を5つターミナル・テレタイプに出力するプログラムを書いてみます。前回のテレタイプ出力命令に加えて、分岐命令を使ったループを見ていきましょう。
プログラムの構造は次の通りです。
1.繰り返しの回数 5を R0レジスタに入れる。
010200, 000005
2. テレタイプの 状態レジスタをチェックします。
132737, 000200,177564
3.テレタイプが出力可能(READY)になると上の命令を実行すると、Zフラグがリセットされます。それまで、ループします。XXは、戻るステップ数(オフセット)です。あとで計算します。
0017XX、
4.テレタイプに、@のアスキーコード100(8進数)を出力します。
112737,000100,177566
5.カウンタとして使っているR0を1つ減らします。
005300
6.R0が0でなければ、2へもどります。YYもオフセット
0013YY
7. 停止します。
000000
1000番地から、プログラムを格納すると
1000:012700
1002:000005
1004:133237
1006:000200
1010:177564
1012:0017XX
1014:112737
1016:000100
1020:177566
1022:005300
1024:0013YY
1026:000000
まず、XXを決めます。 分岐命令を実行する段階でプログラムカウンタは次の命令の番地を指しています。つまり1014です、ここから数えて4ステップ戻ります。−4ば74なのでXXは74になります。 ああややこしい。こんな表を作っておくと便利です。この表はブランチ命令の次から数えなくてもいいようにわざとずらしてあるので、ブランチ命令から、何語移動するかを数えればいいように作っています。この場合前にBEQ命令から今度は3語戻るので、中央の3の列の前へ飛ぶの欄を74を使うことになります。
つぎにYYを決めます。8語分戻ることになります。表で8語のところを見ると67が見つかります。XXを74,YYを67として、プログラムを完成させるとこんな感じになります。
実際にPiDP−11にプログラムを入力して実行するとこのようになります。
simhは、-m、スイッチを付けると、ニーモニックで出力できます。最近知りました。
(アドレッシング・モードの続きとサブルーチン・コールの巻につづく)
※コメント投稿者のブログIDはブログ作成者のみに通知されます