情報処理科(情報処理・IT・コンピュータ 専門学校)

その情熱、実現させよう。



北海道 2年制 技術と資格を備えた情報技術者になる 情報処理科

なにっ!?『基本情報20年度秋問13解説』だと・・・!?

2008年10月24日 なにっ!?『基本情報20年度秋問13解説』だと・・・!?

プルルル・・・ッ。ガチャ「はい、こちらJOHOコップ・・・。」

なにっ基本情報20年度秋問13解説』だと・・・
奴なのか怪盗ハット・・・潜入調査開始だ・・・

「今日はCASLの解説です・・・

CASL20秋13 概要

まず、プログラムを見る前に説明をよく読みます。すると、この図のようにアンケート1語(16ビット)のビットとCOUNTR(16語のメモリ)が対応していることがわかります。また、COUNTRの1語と出力用のPBUF(48語のメモリ)の3語が対応していることがわかります。この関係を整理してプログラムを読み解けば、それほど難易度の高い問題ではありません。

プログラムコードより、メモリの概略を抑えましょう。このプログラムは大きく3つの処理で構成されています。1つ目は初期化プログラム、2つ目は集計プログラム、3つ目は出力プログラムです。

プログラムの前半部はLOOP2の1行上の前で分けることができます。ジャンプ命令から矢印を引き出せば、おのずと区切りが見えてきます。

CASL20秋13 ab

LOOP1について、繰り返しの中でGR4が添え字に使用されています。そして、繰り返しの最後で1増分されていることもわかります。これはカウンタを順次0クリアしている処理だとわかります。
一方GR3にはスペースがセットされ0,GR5〜2,GR5までを初期化しています。しかし、繰り返しのなかで順次初期化していくのであれば、GR5を増分する必要があります。しかもGR5はPBUFのアドレスがセットされておりますので、前段での概要を掴んでいれば、その増分値が3であることもわかります。

よって、
空欄a  LAD GR5,3,GR5 ・・・ ウ
となります。

要するにLOOP1は、これからアンケートを集計するために、COUNTR領域(16語)と出力用PBUF領域(48語)をそれぞれ0とスペースでクリアする。という処理なのです。

CASL20秋13 cd

2つ目の区切りは、前半部LOOP2から後半部LOOP4の3行上の前までで、これもジャンプ命令から引き出し線を出せば容易に掴むことができます。LOOP2とLOOP3とで2重ループの格好になっています。

LOOP3は、1語ずつ読み込んだアンケートデータを上位から1ビットずつシフトアウトしオーバーフロー下かどうかで、ON⇔OFFを判断しています。集計するには、ONであれば、そのビットに対応するCOUNTR領域(添え字はGR4)に1加算する必要があります。(※メモリには直接演算できないので、一度GR3に代入し加算後メモリに戻しています。)加算する処理は既にONラベルから記述されていますので、あふれたビットが1のときにラベルONに飛ぶ命令が空欄bに入ります。

よって、
空欄b  JOV ON ・・・ ウ
となります。

繰り返す毎にその値とGR5を比較し、大きければGR5の内容を置き換えているのは、集計結果の最大値をGR5に保持しておくためです。3つ目の区切りで登場しますが、棒グラフの最大とグラフ領域の高さを合わせる目的で使用します。

要するにLOOP3は、1人分のアンケート結果をCOUNTR領域に加算し、その最大値をGR5にセットする処理なのです。

ではLOOP2ですが、全員分のアンケートを集計するために順次読み込む作業が必要となります。ですから、LOOP2ラベルの1行下でアンケートを読み込んでいます。順次読み込むためには、アンケートのアドレスであるGR1を1ずつ増分する必要があります。

よって、
空欄c  LAD GR1,1,GR1 ・・・ イ
となります。

要するにLOOP2は、全員のアンケートを読み終えるまで、順次読み込みLOOP3へ渡す処理なのです。

3つ目の区切りは、LOOP4から空欄dです。まずはその中にあるLOOP5から見て行きましょう。LOOP5は2つ目の区切りで集計されたCOUNTR+GR4の値を順次読み込んでGR5(最大値)と比較しています。一致したらそれに対応する出力領域PBUF+GR3に*をセットしています。冒頭で説明したとおり、COUNTR1語に対しPBUF3語が対応しておりますので、添え字の増分はCOUNTR側(GR4)が1。PBUF側(GR3)が3となります。COUNTRが16語分読み終えたら、繰り返しを脱出し、1行出力します。

要するにLOOP5は、集計結果=最大値の出力領域に*をセットする処理なのです。

LOOP4は、その出力領域を出力し、最大値を1減らしています。そうすることで、最大値に満たない集計結果値を検査する準備をしLOOP5に渡すのです。そのためにはラベルLOOP4まで戻る命令が必要となります。しかも空欄dの直前の命令がSUBA GR5,=1なので、GR5の値を見てジャンプすることになります。たとえばグラフの最大値が3であったなら、棒グラフの長さは当然3つ分になります。*が縦に3個並ぶようにOUT命令を実行するにはGR5が0になった時点で繰り返しを脱出する必要があります。

よって、
空欄d  JPL LOOP4 ・・・ ア
となります。

要するにLOOP4は、LOOP5に入るための準備と、LOOP5の結果を出力する処理なのです。

CASL20秋13 ef設問2では、図のようなアンケート結果のとき20行目のSLL命令は[ e ]回実行され、44行目のST命令は[ f ]回実行される。と問われています。

図の赤い小さな字は各アンケート結果がシフトアウトした順番を書いています。これよりGR1+0は8回、GR1+1は5回、GR1+2は7回とわかり、8+5+7=20となります。

よって、
空欄e  20 ・・・ カ
となります。

44行目のST命令は、それぞれのグラフの頂上の時しか*をセットしませんので、図の青い矢印の回数分行われることになります。

よって、
空欄f  6 ・・・ イ
となります。

 

 

「遅かったなJOHOコップ・・・ さらばだ

 

怪盗ハットはどこだ・・・
なに『話が長い』だと・・・フッ

                           つづく

JOHOコップ

n-08695340 at 16:33 | コメント(0) | トラックバック(0) | この記事のURL | |

コメントする

名前
 
  絵文字