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

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

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

 

〔プログラム1の説明〕

 0 〜 65534 の整数を表す数字から成る文字列(以下,数字列という)を 数値に変換する副プログラム DTOB である。

(1) 文字列は,DC 命令の文字定数と同じ形式で主記憶に格納される。数字列 567 を 格納した例を,図1に示す。

 

図1 数字列の格納例

 

(2) 主プログラムは,数字列が格納されている領域の先頭アドレスを GR1 に, 数字列の長さを GR2 に設定して,DTOB を呼ぶ。DTOB は, 数値に変換して得た値を GRØ に格納して呼出し元に戻る。

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

 

〔プログラム1〕

DTOB    START
        RPUSH
        ADDL   GR2,GR1
        LAD    GRØ,Ø           ; 戻り値の初期化
LP      CPL    GR1,GR2         ; 変換終了?
        JZE    FIN
        LD     GR4,Ø,GR1       ; 数字1文字の取出し
        SUBL   GR4,='Ø'        ; 1 桁を数値に変換
        SLL    GRØ,1           ; GRØ を 1Ø 倍して GR4 を加算
        LD     GR5,GRØ
        
        ADDL   GRØ,GR5
        ADDL   GRØ,GR4
        LAD    GR1,1,GR1
        JUMP   LP
FIN     RPOP
        RET
        END

 

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

 

a に関する解答群 ア ADDL  GR5,GR4       イ SLL  GR4,1       ウ SLL  GR4,2

エ SLL  GR5,1        オ SLL  GR5,2

 

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

基本情報技術者試験


設問2  文字列の先頭から数字列を探索し,順に,対応する数値を管理テーブルに 格納する副プログラム GETWD を,DTOB を使用して作成した。 プログラム2中の に入れる正しい答えを, 解答群の中から選べ。

 

〔プログラム2の説明〕

(1) 文字列は,一つ以上の空白文字で区切られた任意の個数の数字列を含み, 最後はピリオドで終わる。最後の数字列とピリオドの間, 又は文字列の先頭に一つ以上の空白文字があってもよい。文字列の例を,図2に示す。

 

図2 文字列の例

 

(2) 管理テーブルには,文字列中に数字列が現れるごとに,順に 1 語から成る要素を追加し, 数字列を数値に変換して得た値を格納する。数字列の探索が終了したとき, 管理テーブルの最後に 1 語から成る要素を追加し,数値の終わりを示す印として −1 を格納する。 図2の文字列を GETWD で処理して得た管理テーブルを,図3に示す。

 

図3 GETWD で処理して得た管理テーブル

 

(3) 主プログラムは,文字列が格納されている領域の先頭アドレスを GR1 に, 管理テーブルの先頭アドレスを GR2 に設定して,GETWD を呼ぶ。

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

 

〔プログラム2〕

GETWD   START
        RPUSH
        LD     GR6,GR1
        LD     GR7,GR2
        LD     GR3,=-1       ; 数字列の処理状態フラグの初期化
        LAD    GR6,-1,GR6
LP      LAD    GR6,1,GR6
        LD     GR4,Ø,GR6     ; 1文字の取出し
        CPL    GR4,='.'
        JZE    FIN
        CPL    GR4,=' '
        
        CALL   SETWD
        JUMP   LP
NUM     LD     GR3,GR3       ; 数字列の処理中?
        JZE    LP
        LD     GR3,=Ø        ; 次の数字列の処理開始
        LD     GR1,GR6       ; 数字列の先頭アドレスを退避
        JUMP   LP
FIN     CALL   SETWD
        LD     GR2,=-1
        ST     GR2,Ø,GR7     ; 数値の終わりを示す印を格納
        RPOP
        RET
SETWD   LD     GR3,GR3
        
        LD     GR2,GR6
        SUBL   GR2,GR1
        CALL   DTOB          ; 数字列を数値に変換
        ST     GRØ,Ø,GR7
        LD     GR3,=-1       ; 数字列の処理中状態を解除
        
FIN2    RET
        END

 

b に関する解答群 ア JNZ  FIN       イ JNZ  LP       ウ JNZ  NUM

エ JZE  FIN       オ JZE  LP       カ JZE  NUM

 

c に関する解答群 ア JNZ  FIN       イ JNZ  FIN2       ウ JNZ  NUM

エ JZE  FIN       オ JZE  FIN2       カ JZE  NUM

 

d に関する解答群 ア LAD  GR6,1,GR1       イ LAD  GR6,1,GR6       ウ LAD  GR7,1,GR2

エ LAD  GR7,1,GR7       オ LD   GR6,GR1        カ LD  GR7,GR2

 

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

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

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

基本情報技術者試験


設問3  GETWD を使用して,二つの整数の積を求める副プログラム MULT を作成した。 プログラム3中の に入れる正しい答えを, 解答群の中から選べ。

 

〔プログラム3の説明〕

(1) MULT は,数字列を二つだけ合む,〔プログラム2の説明〕の (1) で示した形式の 文字列について,最初の数字列に対応する数値を被乗数とし,2番目の数字列に 対応する数値を乗数として乗算を行う。乗算においてあふれは発生しないものとする。

(2) 主プログラムは,文字列が格納されている領域の先頭アドレスを GR1 に設定して, MULT を呼ぶ。MULT は,演算結果を GRØ に格納して呼出し元に戻る。

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

 

〔プログラム3〕

MULT   START
       RPUSH
       LAD     GR2,CTBL
       CALL    GETWD
       LD      GR4,Ø,GR2    ; GR4 ← 被乗数
       LD      GR5,1,GR2    ; GR5 ← 乗数
       LD      GRØ,=Ø
       LD      GR5,GR5
LP     
       LD      GR3,GR5
       AND     GR3,=#ØØØ1   ; 乗数の最下位ビットのチェック
       JZE     NEXT
       ADDL    GRØ,GR4
NEXT   SLL     GR4,1        ; 被乗数を1ビット左論理シフト
       
       JUMP
FIN    RPOP
       RET
CTBL   DS      3            ; GETWD 用管理テーブル
       END

 

e に関する解答群 ア JMI  FIN       イ JMI  NEXT       ウ JPL  FIN

エ JPL  NEXT       オ JZE  FIN       カ JZE  NEXT

 

f に関する解答群 ア ADDL  GRØ,GR5      イ ADDL  GR5,GR4      ウ LD  GR5,GR4

エ SLL  GR5,1       オ SRL  GR5,1

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

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


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