2003lk入門

トップに戻る

をクリックすると非真理設定が非表示になります。ページを再読み込みすると戻ります。


ksi.3 実践

lexn.1 最大値を求める

前回は、数の大小を比較したり数を半分にしたりする方法を学びました。実践編であるksi.3では、今まで学んできた諸命令を元に実践的な処理を書いていきましょう。

まずは、簡単な処理として、最大値を求める[指令](cersva)を書いていきましょう。「先頭の番地」「先頭の番地+4」「先頭の番地+8」…と要素が「要素数」個ある一覧表を考え、この中の最大値をf0に入れて終了する、という仕様にしましょう。なお、諸情報は次のように与えられているものとします。

自由 自由 戻る場所 数の一覧の先頭番地 要素数

なお、最大値を求める以上、要素数は0より大きいものとします。


まずは、先頭番地と要素数を[メモ](firjal)に入れましょう。

nll lesloler
kRz f5  f0
ata  4  f0
krz f0@ f1
ata  4  f0
kRz f0@ f2
…

ここで、わざわざ手間をかけf0を作業用に使って要素数や先頭番地の情報を得ていますが、毎回このように書くのは面倒です。f5から4だったり8だったり離れた位置にあるということは分かっていますし、定番の処理ですから、なんとか簡単に書けないでしょうか。

実は、次のように書くことができます。

nll lesloler
krz f5+8@ f2
krz f5+4@ f1
…

これを使えば、指令に渡された情報を楽に受け取ることができます。


さて、要素数がf2に入り、先頭番地がf1に入ったので、処理を考えていきましょう。

まずは、最も単純な場合、つまり、要素数が1の場合を考えましょう。このときは、先頭番地にある値をf0に入れ、即座に終了すればいいので、

nll lesloler
krz f5+8@ f2
krz f5+4@ f1
krz f1@ f0
fi f2 1 clo   malkrz f5@ xx

となります。さて、要素数が1より大きかった場合ですが、とりあえず次の要素を見るべくf1に4を足しましょう。

nll lesloler
krz f5+8@ f2
krz f5+4@ f1
krz f1@ f0
fi f2 1 clo   malkrz f5@ xx
ata 4 f1

新しい要素とf0を比較し、新しい要素のほうが大きければf0を更新します。

nll lesloler
krz f5+8@ f2
krz f5+4@ f1
krz f1@ f0
fi f2 1 clo   malkrz f5@ xx
ata 4 f1
fi f1@ f0 llo   malkrz f1@ f0

最後に、f2の値を1減らし、要素数と1を比較するところに飛べば完成です。

nll lesloler
krz f5+8@ f2
krz f5+4@ f1
krz f1@ f0

nll mak
fi f2 1 clo   malkrz f5@ xx
ata 4 f1
fi f1@ f0 llo   malkrz f1@ f0
nta 1 f2
krz mak xx

なお、nta 1 f2の位置を変えて、このように書くこともできます。

nll lesloler
krz f5+8@ f2
krz f5+4@ f1
krz f1@ f0
nll mak
nta 1 f2
fi f2 0 clo   malkrz f5@ xx
ata 4 f1
fi f1@ f0 llo   malkrz f1@ f0
krz mak xx

前のページへ   次のページへ