基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成28年 秋期 基本情報技術者 午後 問12
問12   CASL

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

 

〔プログラム1の説明〕

 リストに対して,要素を挿入又は削除する副プログラム LPROC である。 リストの構造を図1に示す。

 


図 1 リストの構造

 

(1) リストは一つ以上の要素をもち,一つの要素は連続する2語から成る。 1語目には次の要素の先頭アドレス(図中では矢印で表す)が, 2語目にはその要素の保持する値が格納される。 要素は主記憶の 0 番地以外に配置され,最後の要素の1語目には, 次の要素がないことを表すために,0 が設定される。

(2) ROOT は1語から成り,最初の要素(要素1)の先頭アドレスが格納される。

(3) 主プログラムは,表1に示す値を各レジスタに設定して LPROC を呼ぶ。

@ n は操作対象とする要素が,リストの先頭から何番目かを指定する正の整数である。

A 要素の挿入の場合は,その要素が先頭から n 番目となる位置(要素 n の直前)に挿入される。 削除の場合は,先頭から n 番目の要素(要素 n )が消除される。

B n として,リストの現在の要素の個数 N よりも大きい値が与えられたとき, LPROC は何もせずに呼出し元に戻る。

 

表1 LPROC 呼出し時のレジスタ設定
 操作     GRØ   GR1   GR2   GR3 
 挿入    挿入する値  ROOT のアドレス   n    0  
 削除       −  ROOT のアドレス   n    1  

 

(4) LPROC は,要素を挿入又は削除するとき,それぞれ別に用意された副プログラム EGET 又は EFREE を呼ぶ。

(5) EGET は,挿入される要素に必要な領域を記憶管理領域から割り当てるために呼び出され, 新たに割り当てられた,連続する2語から成る領域の先頭アドレスを GR2 に設定して呼出し元に返す。

(6) EFREE は,削除された要素の先頭アドレスを GR2 に設定して呼び出され, 当該要素が使用していた領域を記憶管理領域に戻す。

(7) 副プログラム EGET から戻るとき,GR2 以外の汎用レジスタの内容は元に戻す。

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

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

 

〔プログラム1〕
(行番号)
 1  LPROC  START
 2         RPUSH
 3         LD    GR4,GR2        ; GR4 ← n
 4  LP     LD    GR2,Ø,GR1      ; 次の要素をたどる
 5         JZE   FIN            ; n > N か ?
 6         SUBA  GR4,=1
 7         JZE   NEXT           ; 要素 n に達したか ?
 8         
 9         JUMP  LP
1Ø  NEXT   LD    GR3,LTBL,GR3
11         JUMP  Ø,GR3          ; 指定された処理にジャンプ
12  LINS   LD    GR4,GR2
13         CALL  EGET           ; GR2 ← 挿入される要素の先頭アドレス
14          
15         ST    GR4,Ø,GR2      ; 挿入される要素の1語目を設定
16         ST    GRØ,1,GR2
17         JUMP  FIN
18  LDEL      ; GR4 ← 要素 n+1 の先頭アドレス
19         ST    GR4,Ø,GR2      ; 要素 n−1 の1語目を再設定
2Ø         CALL  EFREE          ; 削除された要素 n の領域を解放
21  FIN    RPOP
22         RET
23  LTBL   DC    LINS           ; 処理の分岐先アドレステーブル
24         DC    LDEL
25         END

 

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

 

a に関する解答群 ア JMI  FIN       イ LAD  GR1,1,GR1      ウ LAD  GR4,1,GR4

エ LD  GR1,GR2      オ LD  GR1,Ø,GR2

 

b に関する解答群 ア LD  GR4,Ø,GR1      イ LD  GR4,Ø,GR2      ウ ST  GR2,Ø,GR1

エ ST  GR2,Ø,GR2      オ ST  GR4,Ø,GR1      カ ST  GR4,Ø,GR2

 

c に関する解答群 ア LD  GR4,Ø,GR1      イ LD  GR4,Ø,GR2      ウ LD  GR4,2,GR1

エ LD  GR4,2,GR2      オ LD  GR4,GR1       カ LD  GR4,GR2

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

基本情報技術者試験


設問2  図2に示す要素数が3個のリストについて,n = 3 で LPROC を実行し,要素を挿入する。 行番号 12 のラベル LINS の命令を実行するとき GR2 に格納されている値として, 正しい答えを,解答群の中から選べ。

 


図2 要素数が3個のリスト

 

解答群 ア 挿入する要素の先頭アドレス      イ 要素2の先頭アドレス

ウ 要素3の先頭アドレス      エ 0

解答 ←クリックすると正解が表示されます

基本情報技術者試験


設問3  ラベル LIST 以降に格納されている要素数が4個のリストについて, プログラム2の MAIN を実行した。実行後のラベル E3 で示される番地の内容として, 正しい答えを,解答群の中から選べ。ここで,EGET で割り当てられた要素の先頭アドレスは, 割り当てられた順に,α1,α2 とする。

 

〔プログラム2〕
MAIN    START
        LD    GRØ,=1
        LD    GR2,=3        ; n = 3
        LD    GR3,Ø
        LAD   GR1,ROOT
        CALL  LPROC
        LD    GRØ,=2
        CALL  LPROC
        LD    GR3,=1
        CALL  LPROC
        RET
ROOT    DC    LIST
LIST    DC    E3,#ØØØA     ; リストの最初の要素(要素1)
E1      DC    E2,#ØØØB
E2      DC    #ØØØØ,#ØØØD  ; リストの最後の要素
E3      DC    E1,#ØØØC
        END

 

解答群 ア α1      イ α2      ウ E1      エ E2      オ Ø
解答 ←クリックすると正解が表示されます

[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]