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

平成18年 春期 基本情報技術者 午後 問13
問13   CASL

次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。

〔プログラムの説明〕

32 ビット符号なし 2 進整数と 15 ビット符号なし 2 進整数の乗算を 行う副プログラム MULT32 と, 32 ビット符号なし 2 進整数同士の加算を行う副プログラム ADD32 である。

(1) MULT32 は,32 ビットの被乗数が格納されている領域の先頭番地を GR2 に, 15 ビットの乗数を GR1 に設定して呼び出される。 MULT32 は,32 ビットの乗算結果を被乗数の格納領域に上書きして呼出し元に戻る。 乗算結果のうち,格納領域からはみ出した部分は無視する。 MULT32 は,その処理の過程で ADD32 を利用する。

(2) ADD32 は,被加数の格納されている領域の先頭番地を GR2 に, 加数の上位語と下位語をそれぞれ GR1 と GR0 に設定して呼び出される。 ADD32 は,32 ビットの加算結果を被加数の格納領域に上書きして呼出し元に戻る。 加算結果のうち,格納領域からはみ出した部分は無視する。

(3) 被乗数と被加数の格納形式を,次に示す。

 上位語    下位語  
 (GR2)+0   (GR2)+1

(4) 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。

〔プログラム〕

(行番号)

 1  MULT32  START            ; シフトによる乗算
 2          RPUSH  
 3          LD    GR5,0,GR2  ;被乗数の退避
 4          ST    GR5,H      ; ”
 5          LD    GR5,1,GR2  ; ”
 6          ST    GR5,L      ; ”
 7          LD    GR5,=0     ;乗算結果格納領域の初期化  
 8          ST    GR5,0,GR2  ; ”
 9          ST    GR5,1,GR2  ; ”
10          LAD   GR3,15     ; 被乗数シフト用カウンタ初期化
11          LAD   GR4,1      ; GR4 ← 16−GR3
12          LD    GR6,GR1    ; 乗数を GR6 に設定,GR1 は作業用に解放
13  LP      LAD   GR3,-1,GR3
14          LAD   GR4,1,GR4  ; GR3+GR4=16 の関係を維持
15          SLL   GR6,1
16          JZE   FIN
17          JPL   LP         ; 最上位ビットが 0 なら何もしない
18          LD    GR1,H      ; 被乗数の取出し
19          LD    GR0,L
20          LD    GR5,GR0    ; GR3 だけ被乗数(32 ビット)を左シフト
21              ; " 
22          SLL   GR1,0,GR3  ; "
23          SLL   GR0,0,GR3  ; "
24          OR    GR1,GR5    ; "
25          CALL  ADD32      ; シフトされた被乗数を中間結果に加算
26          JUMP  LP
27  FIN     RPOP
28          RET
29  H       DS    1          ; 被乗数上位語の退避場所
30  L       DS    1          ;  〃 下位語  〃
31  ;
32  ADD32   RPUSH            ; Z ← X+Y
33                           ; X の上位語を XH,下位語を XL などと表記
34          LD    GR4,GR0    ; YL を GR4 に設定
35          ADDL  GR0,1,GR2  ; ZL ← XL+YL,ZL を GR0 に設定
36          XOR   GR4,1,GR2  ;  けた上がりの判定
37          JMI   DIFF       ;  @ XL と YL の最上位ビットが,
38          XOR   GR4,1,GR2  ;   ともに 1 のときけた上がり
39          JUMP  NEXT       ;  A XL と YL の最上位ビットが異なり,
40  DIFF    XOR   GR4,GR0    ;   ZL の最上位ビットが 0 のときけた上がり
41  NEXT    SRL   GR4,15     ; けた上がりを GR4 の最下位ビットへ移動
42           
43          ADDL  GR1,0,GR2
44          ST    GR1,0,GR2
45          ST    GR0,1,GR2
46          RPOP
47          RET
48          END

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

a に関する解答群

ア SLL GR5,0,GR3      イ SLL GR5,0,GR4      ウ SRA GR5,0,GR3

エ SRA GR5,0,GR4      オ SRL GR5,0,GR3      カ SRL GR5,0,GR4

b に関する解答群

ア ADDL GR0,GR4      イ ADDL GR1,GR4      ウ OR GR0,GR4

エ OR GR1,GR4      オ SUBL GR0,GR4      カ SUBL GR1,GR4

情報処理試験.jp


設問2 次の記述中の に入れる正しい答えを, 解答群の中から選べ。

MULT32 の受け取る乗数を 16 ビット符号なし2進整数とするため, 行番号 10,11 を次のとおりに変更する。

10     LAD GR3,16   ; 被乗数シフト用カウンタ初期化
11     LAD GR4,0   ; GR4 ← 16−GR3

さらに,行番号 16,17 を次の命令群で置き換える。

      
       JUMP LP
ONBIT  NOP

解答群

ア JOV LP          イ JOV ONBIT         ウ JPL FIN
  JPL ONBIT          JZE FIN             JOV ONBIT

エ JPL ONBIT        オ JZE FIN           カ JZE FIN
  JZE FIN            JOV ONBIT           JPL ONBIT

情報処理試験.jp


設問3 次の記述中の に入れる正しい答えを, 解答群の中から選べ。

MULT32 を使用して,再帰的に階乗計算を行う副プログラム FACT を作成した。

(1) 正の整数 n の階乗 F(n) は,次式で求められる。

F(n) = n × F(n−1) (ただし,F(0) = 1)

例:F(3) = 3 × F(2) = 3 × 2 × F(1) = 3 × 2 × 1 × F(0) = 3 × 2 × 1 × 1 = 6

(2) FACT は,n を GR1 に,計算結果を格納する領域の先頭番地を GR2 に設定して呼び出される。 n は,その階乗 F(n) が 32 ビット符号なし2進整数の範囲に収まるように与えられる(1 ≦ n ≦ 12)。 計算結果格納領域の形式は,MULT32 の被乗数の格納形式と同じとする。

(3) 副プログラムから戻るとき,汎用レジスタ GR1 〜 GR7 の内容は元に戻す。

(行番号)

 1  FACT  START
 2        RPUSH
 3        CALL RMAIN       ; 再帰処理の本体を呼ぶ
 4        RPOP
 5        RET              ; 主プログラムに戻る
 6  RMAIN LD   GR1,GR1     ; N=0?
 7        JNZ  CONT        ; N≠0 なら CONT へ
 8        ST   GR1,0,GR2   ; N=0 の場合
 9        LD   GR1,=1      ;  F(0) の値 (=1) を
10        ST   GR1,1,GR2   ;  計算結果格納領域に設定し
11        RET              ;  行番号 15 に戻る
12  CONT  PUSH 0,GR1       ; N の退避(N は n → n−1 →…→ 1 の順に変化)
13        LAD  GR1,-1,GR1  ; GR1 ← N−1
14        CALL RMAIN       ; F(N−1) を計算し計算結果格納領域に設定
15        POP  GR1         ; N の復元(N は 1 → 2 →…→ n の順に変化)
16        CALL MULT32      ; F(N−1)×N を計算し計算結果格納領域に設定
17        RET              ; 再帰処理の終了時は行番号 4 に,
18        END              ;  それ以外のときは行番号 15 に戻る

F(3) を計算するとき,行番号 6 のラベル RMAIN の命令には 回制御が移る。 また,行番号 11 の RET 命令は 回実行される。

解答群

ア 1        イ 2        ウ 3

エ 4        オ 5        カ 6


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