Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

平成22年度秋季基本情報午後問12

平成22年度秋季 基本情報技術者試験(FE)の午後問題12(アセンブラ言語CASL)は、

  • ビット列の並びを逆転させるプログラム

に関する問題でした。

設問1

ポイントは、SRL命令を実行したとき、

  • OFにはレジスタから最後に送り出されたビットの値が設定される
  • ZFが1のときは、ラベルFIN2の処理を行う

ということでしょうか。

実行結果

作成したプログラムを「CASLシミュレータ(CASL II 対応)」で実行してみました。#0005番地に格納されている値(#B3D1)が実行後は#8BCDになっています。

  • 実行前

f:id:rahaema:20181118162020p:plain

  • 実行後

f:id:rahaema:20181118162125p:plain

設問2

LOOP1は、n語の並びを逆順にする処理(第1語と第n語の入れ替え、第2語と第n-1語の入れ替え、…)、LOOP2は各語それぞれについて設問1のREVRSを使ってビットの並びを逆転させていますね。

実行結果

#0007番地から「#B3D1,#8000,#0001」を設定して実行してみました。

  • 実行前

f:id:rahaema:20181118164853p:plain

  • 実行後

f:id:rahaema:20181118164940p:plain

設問3

プログラムの中に適切なコメントが記載されているので、GR1,GR2,GR3に具体的な値を設定して紙上でビット遊びをすることが大切なんだろうなと思います。ビット列が右に左に移動して、ANDしたりORするうちに望みのビット列が得られる様子は面白いですね。

解くためには,

  • 算術シフトと論理シフトの違い
  • 「XOR GR6,=#FFFF」はビット反転

ということを知っていればよいのではないでしょうか。

実行結果

#B3D1に対して、真ん中の8ビットが逆順になるように、pを4、qを8で実行してみました。

  • 実行前

f:id:rahaema:20181118170320p:plain

  • 実行後

f:id:rahaema:20181118170329p:plain