![]()
平成31年 春期 基本情報技術者 午後 問12
問12 CASL次のアセンブラプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 主記憶上の連続した語から成る領域(以下,ビット領域という)内において, 指定されたビット列(以下,対象ビット列という)に対する操作を行うための副プログラム群である。 対象ビット列は,連続したビットの並びであり,開始位置(以下,ビット位置という)と ビット数(以下,ビット長という)で表す。ビット位置は,ビット領域全体を 連続したビット列と捉えて,ビット領域の最初の語の最上位ビットを 0 ビット目としたときの 相対位置である。対象ビット列はビット領域内に収まるものとする。 図1に,ビット領域及び対象ビット列(網掛け部分)の例を示す。ビット位置が 44 でビット長が 24 の場合,ビット領域の最初の語を 0 語目としたとき, 対象ビット列の最初のビットを含む語は,2 語目なので,これを相対アドレス 2 と表す。 対象ビット列の最初のビットは,相対アドレス 2 の語の最上位ビットを 0 ビット目としたとき, 12 ビット目なので,この位置をビットインデックス 12 と表す。対象ビット列の最後のビットの位置を, 相対アドレス 4 の語のビットインデックス 3 と表す。
![]() 図1 ビット領域及び対象ビット列の例 (1) プログラム1は,対象ビット列の全ビットを 1 にする副プログラム BITSON である。 主プログラムは,連続した 3 語に,ビット領域の先頭アドレス,対象ビット列のビット位置, 及び対象ビット列のビット長をこの順に格納して,その 3 語の先頭アドレスを GR1 に設定して呼び出す。 ビット位置及びビット長は,符号のない数値である。ビット長が 0 の場合は, 対象ビット列に対する操作は行わない。 (2) プログラム2は,GRØ で与えるビットマスクの値とビット領域内で操作の対象となる 1 語の 値との論理和を求め,結果を同じ語に格納する副プログラム SETOP である。 GRØ に 1 語内のビット操作の対象となるビットを 1 で表すビットマスクを, GR1 にビット領域の先頭アドレスを格納した語のアドレスを,GR2 に操作の対象となる語への 相対アドレスを設定して,呼び出される。 (3) 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。 〔プログラム1〕
(行番号) 1 BITSON START 2 RPUSH 3 LD GR3,1,GR1 ; GR3: ビット位置 4 ; ビット位置を,相対アドレス (GR2) と 5 ; ビットインデックス (GR3) とに変換 6 LD GR2,GR3 7 a 8 AND GR3,=#ØØØF 9 LD GR4,2,GR1 ; GR4: ビット長(初期値) 1Ø ; (ビットインデックス + ビット長)≧ 16 の間,ビット操作を行う 11 LOOP LD GRØ,GR4 12 ADDL GRØ,GR3 13 CPL GRØ,BITSPW 14 JMI BREAK 15 LD GR5,BITSPW ; GR5: 語内で対象となるビット数 16 LD GR3,GR3 17 JZE FULL 18 b 19 SUBL GR3,GR3 ; GR3 ← Ø 2Ø FULL SUBL GR4,GR5 ; 操作するビット数だけビット長を減らす 21 LD GRØ,=1 22 SLL GRØ,Ø,GR5 23 SUBL GRØ,=1 ; GRØ: ビットマスク 24 CALL SETOP 25 ADDL GR2,=1 ; GR2: 次の語の相対アドレス 26 JUMP LOOP 27 BREAK LD GR4,GR4 ; 操作の対象になる未処理のビットあり? 28 c 29 ; 未操作のビット数分の右詰めのビットマスクを生成し, 3Ø ; 必要なビット数だけ左ヘシフト 31 LD GRØ,=1 32 SLL GRØ,Ø,GR4 33 SUBL GRØ,=1 34 LD GR5,BITSPW 35 SUBL GR5,GR3 36 d 37 SLL GRØ,Ø,GR5 ; GRØ: ビットマスク 38 CALL SETOP 39 FIN RPOP 4Ø RET 41 BITSPW DC 16 ; 1 語のビット数 42 END 〔プログラム2〕
(行番号) 1 SETOP START 2 RPUSH 3 LD GR3,Ø,GR1 4 ADDL GR3,GR2 5 OR GRØ,Ø,GR3 6 ST GRØ,Ø,GR3 7 RPOP 8 RET 9 END
a に関する解答群 エ SRL GR2,Ø,GR3 オ SRL GR2,4 カ SRL GR2,4,GR3 b,d に関する解答群 エ SUBL GR5,GR2 オ SUBL GR5,GR3 カ SUBL GR5,GR4 c に関する解答群 エ JPL LOOP オ JZE FIN カ JZE LOOP
対象ビット列の全ビットを 0 にする副プログラムを新規に作成することを考える。 ビット領域内の操作の対象になる語の相対アドレスやビットインデックスを求める処理などは, プログラム1で実装されている。そこで,新規の副プログラムを作成する前に, 既存の副プログラム群を再編成し,対象ビット列の全ビットを 1 にする副プログラム及び 0 にする副プログラムが,プログラム1の処理を利用できるようにする。 プログラム1に変更を加え,それに伴つて副プログラム BITSON を, その仕様は変更せずに再実装する方法を,次の (1)〜(3) に示す。 (1) 次に示すプログラム3を新たな副プログラム BITSON(以下,新 BITSON という)とする。 新 BITSON は,既存の副プログラム SETOP のアドレスを GR7 に設定して変更後のプログラム1を呼び出す。
〔プログラム3〕 (行番号) 1 BITSON START 2 RPUSH 3 LAD GR7,SETOP 4 CALL BITSOP 5 RPOP 6 RET 7 END (2) プログラム1の入口名を変更するために,行番号1のラベルを e にする。 (3) プログラム1の行番号 24 と行番号 38 の CALL 命令のオペランドを fに変更する。 このように,既存の副プログラム群を再編成した後に,対象ビット列の全ビットを 0 にする処理の ための副プログラム BITSOFF(プログラムは省略)と,それが変更後のプログラム1を 介して呼び出す副プログラム RESETOP(プログラムは省略)を作成する。 二つの副プログラムの概要を,次の (1),(2) に示す。 (1) 副プログラム BITSOFFは,新 BITSON と同様に,副プログラム RESETOP の アドレスを GR7 に設定して副プログラム BITSOP を呼び出す。 (2) 副プログラム RESETOP は,副プログラム SETOP と同様のインタフェースで呼び出される。 GRØ には,1 語内でビット操作の対象になるビットを表すビットマスクが設定されているので, GRØ の全ビットについて 0 と 1 を反転させた値と,GR1 と GR2 とで指定された語の値との論理積を求め, 結果を同じ語に格納する。 e に関する解答群 f に関する解答群 エ BITSON,GR6 オ Ø,GR7 カ BITSON,GR7
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||