情報処理技術者試験の過去問と解説なら「情報処理試験.jp」
[広告] 身体のケア
桜の情報開花予想千鳥ヶ淵隅田公園弘前公園魚の旬年賀はがき
コンサートワクワク学校アルバム大野智櫻井翔相葉雅紀二宮和也松本潤

平成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 に関する解答群

ア JMI  ON      イ JNZ  ON       ウ JOV  ON      エ JPL  ON

b に関する解答群

ア SLL GR4,-1,GR2      イ SLL GR4,0,GR2

ウ SRL GR4,-1,GR2      エ SRL GR4,0,GR2


設問2 連続した n 語( n ≧ 1 )を 16 × n ビットのビット列とみなす。 副プログラム REVRS を利用して,このビット列のビットの並びを,図2に示すように逆転する 副プログラム LREVRS を作成した。

   図2 n 語のビット列のビットの並びを逆転

 主プログラムから渡されるレジスタの内容は,次のとおりとする。

  GR1:ビット列が格納されている領域の先頭アドレス

  GR2:n

 副プログラム LREVRS 中の に入れる正しい答えを, 解答群の中から選べ。

〔プログラム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

解答群

ア JMI LOOP1      イ JNZ LOOP1       ウ JNZ LOOP2

エ JPL LOOP1      オ JZE FIN3       カ JZE LOOP2


設問3 副プログラム REVRS を使用して,16 ビット(1語)からなるビット列中の 部分ビット列αのビットの並びを,図3に示すように逆転する副プログラム PREVRS を作成した。p,q は,それぞれ部分ビット列の直前までのビット数及び 部分ビット列のビット数を表す。

 ここで,p ≧ 0,q > 1,p + q ≦ 16 とする。

  図3 部分ビット列αのビットの並びを逆転

 主プログラムから渡されるレジスタの内容は,次のとおりとする。

  GR1: ビット列が格納されている語のアドレス

  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

解答群

ア OR GR6,GR5        イ OR GR6,0,GR1

ウ SLL GR5,0,GR6      エ SLL GR5,0,GR3


[←前の問題] [次の問題→] [問題一覧表] [分野別] [情報処理試験.jpのTOP]