ラベルの利用

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」になっているはずです.
プログラムは10番地の"000 (HLT)“で終了します.そのときに"OUTPUT"には「55」と表示されており,前のプログラムと同じ結果が得られるはずです.

ラベルを用いた表記 #

アドレス値と命令の対応を,人が管理することは面倒です. また命令で必要とされるアドレス値はデータの所在やジャンプ先などに限られています.

LMCのアセンブリ言語では,アドレス値を文字列の「ラベル」で代用できるようになっています.

右の例を見てみましょう. LOOP, LAST, SUM, i, ONE と5つのラベルがあり,LDABRZ のアドレスとして使われていることを確認してください.

このラベルを用いたプログラムをプログラム領域にコピー&ペーストした後に,“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」になっているはずです.
プログラムは10番地の"000 (HLT)“で終了します.アドレス値を用いたプログラムと同様に"OUTPUT"には「55」と表示されているはずです.
反復処理 ラベルの利用 例題プログラム
このサイトは開発版の はいぱーワークブック です.