[更新日]1998.05.15


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

〔プログラムの説明〕

キューへデータを格納する副プログラム QIN と,キューからデータを 取り出す副プログラム QOUT である。キューのデータは,格納した順に 取り出される。

(1) キューを,図に示すように,N 個(1 < N < 32768)の 要素からなる領域と管理テーブルで実現する。

図 キューの構造と管理テーブル

(2) キューを表現する領域の末尾( QADDR+ (N−1) )は先頭( QADDR ) につながっているものとみなす。すなわち,領域の末尾を越えてデータを 格納しようとした場合,領域の先頭に戻って格納を試みる。

(3) キューへデータを格納したいプログラムは,GR1 に管理テーブルの 先頭番地を,GR0 に格納するデータを設定して,QIN を呼ぶ。QIN は,END の位置にデータを格納し,END の値を更新した後,GR0 に 0 を設定して 処理を終える。ただし,既に
N−1 個のデータが格納済みならば,GR0 に−1 を設定して処理を終える。

  なお,−1 はキューに格納される値としては,出現しないものとする。

(4) キューからデータを取り出したいプログラムは,GR1 に管理テーブル の先頭番地を設定して,QOUT を呼ぶ。QOUT は,TOP の位置のデータを GR0 に設定し,TOPの値を更新した後,処理を終える。ただし,キューが空ならば, GR0 に−1 を設定して処理を終える。

(5) TOP と END は 0 に初期化されているものとする。

(6) QIN と QOUT は,主プログラムに戻るとき,汎用レジスタ GR2,GR3 の内容を元に戻す。


〔プログラム〕
QIN     START
        PUSH    0,GR2
        PUSH    0,GR3
         ;END → GR2
        LEA     GR2,1,GR2
        CALL    ADJ
        CPL     GR2,0,GR1    ;GR2=TOP?
        JZE     QFULL        ;キューが一杯
        LD      GR3,2,GR1
        
        ST      GR0,0,GR3    ;データの格納
        ST      GR2,1,GR1    ;ENDの更新
        LEA     GR0,0
        JMP     FIN
QFULL   LEA     GR0,-1
FIN     POP     GR3
        POP     GR2 
        RET
        END
 
QOUT    START
        PUSH    0,GR2
        PUSH    0,GR3
        LD      GR2,0,GR1    ;TOP → GR2
        CPL     GR2,1,GR1    ;TOP=END?
        JZE     QEMPTY       ;キューが空
        LD      GR3,2,GR1
        ADD     GR3,0,GR1
        LD      GR0,0,GR3    ;データの設定
        LEA     GR2,1,GR2    ;TOP+1 → GR2
        CALL    ADJ
        
        JMP     FIN
QEMPTY  LEA     GR0,-1
FIN     POP     GR3
        POP     GR2 
        RET
        END
 
ADJ     START                ;領域の末尾処理
        CPL     GR2,3,GR1
        JMI     FIN
        
FIN     RET
        END

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

 

a に関する解答群

ア LD GR2,0,GR1    イ LD GR2,1,GR1    ウ LD GR2,2,GR1

エ LD GR2,3,GR1

 

b に関する解答群

ア ADD GR2,1,GR1    イ ADD GR3,1,GR1    ウ LEA GR2,1,GR3

エ LEA GR3,1,GR3    オ SUB GR2,1,GR3    カ SUB GR3,1,GR1

 

c に関する解答群

ア ST GR2,0,GR1    イ ST GR2,0,GR3    ウ ST GR2,1,GR1

エ ST GR2,1,GR3

 

d に関する解答群

ア ADD GR2,2,GR1    イ LD GR2,3,GR1    ウ LEA GR2,0

エ SUB GR2,2,GR1

 


戻る 次頁:問11