平成22年 秋期 基本情報技術者 午後 問12
問12 CASL次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラムの説明〕 16 ビット(1語)からなるビット列のビットの並びを,図1に示すように逆転する 副プログラム REVRS である。 図1 ビットの並びを逆転する例 (1) ビット列を格納している語のアドレスは GR1 に設定されて,主プログラムから渡される。 (2) 結果は元の領域に格納して,主プログラムに返す。 (3) 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。 〔プログラム1〕
REVRS START RPUSH LD GR4,=0 ; 結果のビット列を初期化 LAD GR2,15 ; ループカウンタ LD GR3,0,GR1 ; GR3 ← ビット列 LOOP SLL GR4,1 ; 結果のビット列を左シフト SRL GR3,1 ; 元のビット列を右シフト JZE FIN1 ; 元のビット列の残りのビットはすべてゼロ JUMP OFF ON OR GR4,=#0001 OFF SUBA GR2,=1 JMI FIN2 ; 16 ビット処理済み JUMP LOOP FIN1 ; 結果のビット列を残りのビット数だけシフト FIN2 ST GR4,0,GR1 RPOP RET END 設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。 a に関する解答群 b に関する解答群 ウ SRL GR4,-1,GR2 エ SRL GR4,0,GR2
設問2 連続した n 語( n ≧ 1 )を 16 × n ビットのビット列とみなす。 副プログラム REVRS を利用して,このビット列のビットの並びを,図2に示すように逆転する 副プログラム LREVRS を作成した。 図2 n 語のビット列のビットの並びを逆転 主プログラムから渡されるレジスタの内容は,次のとおりとする。
GR2:n
〔プログラム2〕
LREVRS START RPUSH LD GR3,GR1 LD GR4,GR2 SUBA GR4,=1 JZE LOOP2 ADDA GR4,GR1 LOOP1 LD GR5,0,GR3 ; LD GR6,0,GR4 ; GR3 が指す語と GR4 が指す語の内容を ST GR5,0,GR4 ; 入れ替える ST GR6,0,GR3 ; LAD GR3,1,GR3 ; GR3 を次の語に位置付ける LAD GR4,-1,GR4 ; GR4 を一つ前の語に位置付ける CPA GR3,GR4 LOOP2 CALL REVRS LAD GR1,1,GR1 SUBA GR2,=1 FIN3 RPOP RET END 解答群 エ JPL LOOP1 オ JZE FIN3 カ JZE LOOP2
設問3 副プログラム REVRS を使用して,16 ビット(1語)からなるビット列中の 部分ビット列αのビットの並びを,図3に示すように逆転する副プログラム PREVRS を作成した。p,q は,それぞれ部分ビット列の直前までのビット数及び 部分ビット列のビット数を表す。 ここで,p ≧ 0,q > 1,p + q ≦ 16 とする。 図3 部分ビット列αのビットの並びを逆転 主プログラムから渡されるレジスタの内容は,次のとおりとする。 GR2: p GR3: q 副プログラム PREVRS 中の に入れる正しい答えを, 解答群の中から選べ。 〔プログラム3〕
PREVRS START RPUSH LD GR4,0,GR1 ; ビット列を保存 CALL REVRS ; ビット列のビットの並びを逆転 LD GR5,0,GR1 ; GR5 ← 逆転したビット列 LD GR6,=16 SUBA GR6,GR3 ; GR6 ← 16 - q SRL GR5,0,GR2 ; 逆転した部分ビット列αを右端に移動 ; 逆転した部分ビット列αを左端に移動 SRL GR5,0,GR2 ; 逆転した部分ビット列αを p ビットに移動 LD GR6,=#8000 SRA GR6,-1,GR3 ; q ビット連続した1の並びを作成 SRL GR6,0,GR2 XOR GR6,=#FFFF AND GR6,GR4 ; 元のビット列中の部分ビット列αにゼロを設定 ST GR6,0,GR1 RPOP RET END 解答群 ウ SLL GR5,0,GR6 エ SLL GR5,0,GR3
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|