24.4.6. ラベルの利用
プログラムとアドレス #
反復処理の例として用いた"1から10までの和"を計算するプログラムは以下のように命令とデータだけが記述されていました.
LDA 11
ADD 12
STA 11
LDA 12
SUB 13
STA 12
BRZ 8
BRA 0
LDA 11
OUT
HLT
DAT 0
DAT 10
DAT 1
しかし,実際にどのデータを用いるのか,プログラムはどこにジャンプするのかを理解するためには,アドレス値(番地)が欠かせません.つまり,以下のようにアドレスと命令が並べた表記の方が読みやすいです.
0 LDA 11
1 ADD 12
2 STA 11
3 LDA 12
4 SUB 13
5 STA 12
6 BRZ 8
7 BRA 0
8 LDA 11
9 OUT
10 HLT
11 DAT 0
12 DAT 10
13 DAT 1
LMCでは,このアドレス付きのプログラムも実行できます.このアドレス付きのプログラムをプログラム領域にコピー&ペーストした後に,“Submit"ボタンを押してメインメモリに読み込んでください.

プログラムがメインメモリに読み込めたのを確認したら,“RUN"をクリックしてプログラムを走らせてみましょう.実行開始の際には,“PROGRAM COUNTER"と"ACCUMULATOR"の値はともに「0」になっているはずです.
ラベルを用いた表記 #
アドレス値と命令の対応を,人が管理することは面倒です. また命令で必要とされるアドレス値はデータの所在やジャンプ先などに限られています.
LMCのアセンブリ言語では,アドレス値を文字列の「ラベル」で代用できるようになっています.
右の例を見てみましょう.
LOOP, LAST, SUM, i, ONE と5つのラベルがあり,LDA や BRZ のアドレスとして使われていることを確認してください.
このラベルを用いたプログラムをプログラム領域にコピー&ペーストした後に,“Submit"ボタンを押してメインメモリに読み込んでください.
LOOP LDA SUM
ADD i
STA SUM
LDA i
SUB ONE
STA i
BRZ LAST
BRA LOOP
LAST LDA SUM
OUT
HLT
SUM DAT 0
i DAT 10
ONE DAT 1

プログラムをメインメモリに読み込んだ結果は,アドレス値を用いたプログラムと同じになっていることを確認しましょう.そのうえで"RUN"をクリックしてプログラムを走らせてみましょう.実行開始の際には,“PROGRAM COUNTER"と"ACCUMULATOR"の値はともに「0」になっているはずです.



