MAIN START
LAD GR1,DATA
CALL BUS ;副プログラムの呼び出し
RET
DATA DC MONEY ;+0
DC 3 ;+1 乗車停留所番号
DC 1 ;+2 下車停留所番号
TOTAL DS 1 ;+3 料金の合計
MONEY DC 100,120,150,130,100,0
END
BUS START ;バスの料金 [b06.cas]
RPUSH ;汎用レジスタの保存
LAD GR0,0 ;合計料金
LD GR2,0,GR1 ;料金のアドレス
LD GR3,1,GR1 ;乗車停留所番号 [ a ]
LD GR4,2,GR1 ;下車停留所番号
ADDL GR2,GR3 ;乗車位置のアドレス
LB1 LD GR5,0,GR2 ;料金の取り出し
ADDA GR0,GR5 ;金額の合計
LAD GR2,1,GR2 ;料金のアドレスのアップ
LAD GR3,1,GR3 ;位置の加算
LD GR5,0,GR2 ;次の位置の料金
JZE LAST ;最後の料金? [ b ]
LB2 CPA GR3,GR4 ;下車停留所番号と比較
JZE FIN
JUMP LB1
LAST LD GR2,0,GR1 ;最初の料金 [ c ]
LAD GR3,0 ;位置の更新
JUMP LB2
FIN ST GR0,3,GR1 ;合計料金の格納
RPOP ;汎用レジスタの復元
RET
END