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

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

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

〔プログラムの説明〕

メモリプールの管理を行う副プログラム MPMGR である。 MPMGR は,割当て要求に対して,要素領域中の未使用の1要素を割り当てる。 また,返却要求に対して,指定された1要素を未使用の状態にする。

(1) メモリプールは,要素領域と,それを管理する管理領域からなる。 要素領域は連続する 80 要素からなり,各要素は連続する2語からなる。 各要素には,管理領域の1ビットずつが先頭から順に対応する。 管理領域のビットの値が1のとき,対応する要素領域の要素は使用中とし, 管理領域のビットの値が0のとき,対応する要素領域の要素は未使用とする。

(2) MPMGR は,GR1 に設定された値によって,次の処理を行う。 括弧内は各処理に対応したラベルである。

  0: 初期化(MINI)
   すべての要素を未使用に設定する。

  1: 要素の割当て(MSER)

   未使用要素を検索し,見つかればその要素の先頭アドレスを GR0 に設定するとともに, その要素を使用中に設定する。 未使用要素がなければ,GR0 に −1 を設定する。   2: 要素の返却(MREL)
   GR0 に設定されたアドレスに対応する要素を未使用に設定する。

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

〔プログラム〕
MPMGR  START
       RPUSH
       LD    GR1,LTBL,GR1
          ; 指定された処理への分岐
; 初期化
MINI   LAD   GR3,0
       LD    GR0,GR3
LP     ST    GR0,MFRG,GR3
       LAD   GR3,1,GR3
       CPA   GR3,MFSZ
       JNZ   LP
       JUMP  FIN
; 要素の割当て
MSER   LAD   GR2,0
       LD    GR0,=-1        ; 戻り値の初期設定
LP1    LD    GR7,MFRG,GR2   ; 管理領域から1語取出し
       LAD   GR3,-1         ; 1語内ビット位置カウンタ初期化
LP2    LAD   GR3,1,GR3
       CPA   GR3,=16        ; 1語分のチェック終了か?
       JZE   CONT
       SLL   GR7,1
       
       JUMP  FIND
CONT   LAD   GR2,1,GR2
       CPA   GR2,MFSZ       ; 管理領域全体のチェック完了か?
       JZE   FIN
       JUMP  LP1
FIND   LD    GR1,=#8000     ; マスクパターンの生成
       SRL   GR1,0,GR3
       LD    GR7,MFRG,GR2   ; 対象ビットを含む語の取出し
       
       ST    GR7,MFRG,GR2
       SLL   GR2,4
       ADDL  GR2,GR3        ; 管理領域先頭から通しのビット位置
       SLL   GR2,1          ; 要素領域先頭からの差分
       LAD   GR0,MPDT,GR2
       JUMP  FIN

; 要素の返却
MREL   LD    GR2,GR0        ; GR2 ← 返却対象アドレス
       LAD   GR7,MPDT
       SUBL  GR2,GR7        ; 要素領域先頭からの差分
       SRL   GR2,1          ; 先頭から通しの要素位置
       LD    GR4,GR2        ; 管理領域先頭から通しのビット位置
       AND   GR4,=#000F     ; 1語内でのビット位置
       LD    GR1,=#8000     ; マスクパターンの生成
       SRL   GR1,0,GR4      ; 例: GR4=2 の場合,GR1 ← 0010000000000000
       
       SRL   GR2,4          ; 対象ビットを含む語を指すための差分
       LD    GR7,MFRG,GR2
       AND   GR7,GR1        ; 対象ビットを未使用に設定
       ST    GR7,MFRG,GR2
FIN    RPOP
       RET
MFSZ   DC    5              ; 管理領域の大きさ
MFRG   DS    5              ; 管理領域
MPDT   DS    160            ; 要素領域
LTBL   DC    MINI           ; 分岐ラベル表
       DC    MSER
       DC    MREL
       END

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

a に関する解答群

ア CALL 0,GR1        イ CALL 1,GR1        ウ CALL LTBL,GR1

エ JUMP 0,GR1        オ JUMP 1,GR1        カ JUMP LTBL,GR1

b に関する解答群

ア JMI LP1        イ JMI LP2        ウ JNZ LP1

エ JNZ LP2        オ JOV LP1        カ JOV LP2

c に関する解答群

ア AND GR7,GR1       イ OR GR7,GR1       ウ SLL GR7,0,GR1

エ SLL GR7,0,GR3      オ SRL GR7,0,GR1      カ SRL GR7,0,GR3

d に関する解答群

ア AND GR1,=#8000      イ AND GR1,=#FFFF      ウ OR GR1,=#8000

エ OR GR1,=#FFFF      オ XOR GR1,=#8000      カ XOR GR1,=#FFFF

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

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

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

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

基本情報技術者試験


設問2 管理領域の最初の語の値が #C800 のとき,GR1 に1を設定して MPMGR を 呼び出した。

ラベル FIND に制御が移ったときの GR3 の内容として,正しい答えを解答群の中から選べ。

解答群

ア 0       イ 1       ウ 2

エ 3       オ 4       カ 5

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

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