平成18年 秋期 基本情報技術者 午後 問13
問13 CASL次のアセンブラプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕 (1) 副プログラム BREP は,16 ビットからなるビット列 A の中に, n ビットの ビット列 B と一致する部分ビット列があれば,それを n ビットのビット列 C に置き換えるプログラムである。 例:
@ GR1 〜 GR4 にはそれぞれ次の内容を設定して,主プログラムから渡される。 GR1:ビット列 A を格納している語のアドレス GR2:ビット列 B(左詰めで設定され,残りのビットには0が設定されている。) GR3:ビット列 C(左詰めで設定され,残りのビットには0が設定されている。) GR4: n ( 1 ≦ n ≦ 16) A ビット列Aの中にビット列 B に一致する部分ビット列が複数個あれば, それらのすべてをビット列 C に置き換える。 B ビット列 A の左端から検索する。 ビット列 B に一致する部分ビット列をビット列 C に置き換えた場合, その部分ビット列の右隣のビットから検索を続ける。 C 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。 (2) 副プログラム ROTSL は,16 ビットからなるビット列を m ビットだけ左に 循環シフトするプログラムである。 例:
@ GR0 と GR1 にはそれぞれ次の内容を設定して,主プログラムから渡される。 GR0: m ( 0 ≦ m ≦ 16) GR1:ビット列を格納している語のアドレス A 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。 〔プログラム〕 BREP START RPUSH LD GR5,=16 ; 未検査ビット数の初期化 LD GR6,=#8000 ; SRA GR6,-1,GR4 ; LOOP LD GR7,0,GR1 ; GR7 ←ビット列 A ; 左端 n ビット以外のビットを 0 にする。 CPL GR7,GR2 ; 左端 n ビットとビット列 B を比較 JZE MATCH ; 一致 LD GR0,=1 ; 左循環シフトするビット数 JUMP CONT MATCH LD GR7,0,GR1 ; GR7←ビット列 A SLL GR7,0,GR4 ; SRL GR7,0,GR4 ; ; ビット列 C を左端 n ビットに設定 ST GR7,0,GR1 ; 元の領域に戻す。 LD GR0,GR4 ; 左循環シフトするビット数 CONT CALL ROTSL ; ビット列 A を左循環シフト SUBA GR5,GR0 ; 未検査ビット数の更新 CPA GR5,GR4 ; 未検査ビット数と n を比較 ; n 未満であれば終了処理へ JUMP LOOP FIN LD GR0,GR5 ; 未検査ビット数 CALL ROTSL ; ビット位置を元に戻す。 RPOP RET ; ROTSL RPUSH LD GR3,GR0 ; GR3← m LD GR4,=16 SUBA GR4,GR3 ; GR4←(16−m) LD GR5,0,GR1 LD GR6,GR5 SLL GR5,0,GR3 ; はみ出すビット列 OR GR5,GR6 ; はみ出すビット列を右端に設定 ST GR5,0,GR1 ; 元の領域に戻す。 RPOP RET END 設問1 プログラム中の に入れる正しい答えを,解答群の中から選べ。
a,b に関する解答群 ア AND GR7,GR3 イ AND GR7,GR6 ウ OR GR7,GR3 エ OR GR7,GR6 c に関する解答群 ア JMI FIN イ JNZ FIN ウ JPL FIN エ JZE FIN d に関する解答群 ア SLL GR6,0,GR3 イ SLL GR6,0,GR4 ウ SRL GR6,0,GR3 エ SRL GR6,0,GR4
設問2 次の記述中の に入れる正しい答えを, 解答群の中から選べ。 主プログラムから渡されたビット列 A,B,C 及び n が次のとおりであったとき, 副プログラム BREP は副プログラム ROTSL を 回呼び出す。 ビット列 A: 0001110100111001 ビット列 B: 0111 ビット列 C: 1001 n : 4 解答群 ア 2 イ 6 ウ 8 エ 12 オ 16 [←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ] |