Home > Tutorial > Lesson 6 |
|
このレッスンで出てきた合計を求める次のプログラムと同じ仕事をするプログラムを レジスタにアドレスを入れてそれを利用する方法で書いてみましょう.
SUM START LAD GR1,0 ;GR1を初期化:GR1 ← 0 LAD GR0,0 ;GR0を初期化:GR0 ← 0 LOOP ADDA GR0,DATA,GR1 ;GR0にDATA[GR1]の値を加算 ADDA GR1,CONST1 ;GR1を1増やす: GR1← (GR1) +(CONST1) CPA GR1,N ;GR1を(N)と算術比較 JMI LOOP ;(GR1)<(N)なら,LOOPに戻る. ST GR0,ZZ ;GR0をZZにストアする: ZZ ← (GR0) RET ZZ DS 1 CONST1 DC 1 N DC 5 DATA DC 5 DC 3 DC 8 DC 9 DC 7 END
下のプログラムがそれです.(N)と比較するのではなく (GR1)の初期値をDATAとし, DATA+(N)よりも小さい間繰り返すことで(N)回繰り返しています.
SUM START LAD GR1,DATA ;GR1を初期化:GR1 ← DATA LAD GR0,0 ;GR0を初期化:GR0 ← 0 LD GR2,GR1 ;GR1つまりアドレスDATAをGR2にロード ADDL GR2,N ;GR2に(N)の中身をアドレス加算.アドレスなので論理加算を使っていることに注意. LOOP ADDA GR0,0,GR1 ;GR0に(GR1)番地の内容を加算 ADDL GR1,CONST1 ;GR1を1増やす: GR1← (GR1) +(CONST1) アドレスなので論理加算を使っていることに注意. CPL GR1,GR2 ;GR1をGR2と論理比較.アドレスなので論理加算を使っていることに注意. JMI LOOP ;(GR1)<(GR2)なら,LOOPに戻る. ST GR0,ZZ ;GR0をZZにストアする: ZZ ← (GR0) RET ZZ DS 1 CONST1 DC 1 N DC 5 DATA DC 5 DC 3 DC 8 DC 9 DC 7 END