[更新日]1998.11.06


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

〔プログラムの説明〕

1 語からなるデータ中のビット番号 m から始まる n ビットの値を取り出し,GR0 の下位 n ビットにその値を設定する副プログラム FGSUB と,それを呼び出す主プログラム MAIN である。図 1 にデータと GR0 の関係を示す。

図1 データと GR0 の関係

(1) MAIN は,GR1 にパラメタの先頭アドレスを格納して FGSUB を呼ぶ。パラメタの形式は,図 2 のとおりである。

図2 パラメタの形式

(2) FGSUB は,パラメタで指定されたデータのビット番号 m から始まる n ビットの値を取り出し,GR0 にその上位 16−n ビットの内容を保持したまま,右詰めで格納する。

(3) FGSUB から戻るとき,汎用レジスタ GR2,GR3 の内容を元に戻す。

〔主プログラム MAIN〕

(行番号) 01 MAIN START 02 LEA GR0,0 03 LEA GR1,PARAM ; パラメタの先頭アドレスを格納する 04 CALL FGSUB ; FGSUBを呼び出す 05 EXIT 06 PARAM DC #ABCD 07 DC 4 08 DC 8 09 END

〔副プログラム FGSUB〕 (行番号) 01 FGSUB START 02 PUSH 0,GR2 03 PUSH 0,GR3 04 ST GR0,WORK 05 LD GR0,0,GR1 06 LD GR2,1,GR1 ; m 07 SLL GR0,0,GR2 08 LEA GR3,-1 09 LD GR2,2,GR1 ; n 10 SLL GR3,0,GR2 11 AND GR3,WORK 12 ST GR3,WORK 13 LEA GR2,16 14 SUB GR2,2,GR1 ; 16−n 15 SRL GR0,0,GR2 16 OR GR0,WORK 17 POP GR3 18 POP GR2 19 RET 20 WORK DS 1 21 END

設問1 MAIN から副プログラム FGSUB を実行する。副プログラム FGSUB の 15 行目の命令を実行する直前の GR0 の値として正しい答えを,解答群の中から選べ。

解答群

ア #000B    イ #00AB    ウ #0ABC

エ #ABCD    オ #BCD0

設問2 次に示す MAIN から仕様外のパラメタで副プログラム FGSUB を実行した。 その結果 GR0 に格納される値として正しい答えを,解答群の中から選べ。

MAIN   START
       LD    GR0,ALLONE
       LEA   GR1,PARAM   ; パラメタの先頭アドレスを格納する
       CALL  FGSUB       ; FGSUBを呼び出す
       EXIT
ALLONE DC    #FFFF
PARAM  DC    #ABCD
       DC    12
       DC    8
       END

解答群

ア #0000    イ #000D    ウ #00D0

エ #FF0D    オ #FFCD    カ #FFD0

キ #FFFD    ク #FFFF

設問3 連続する 2 語からなるデータのビット番号 m(0≦m≦31)から始まる
n(1≦n≦16)ビットの値を,右詰めで GR0 に設定する副プログラム FGET を, FGSUB を使って作成する。GR0 の上位 16−n ビットには 0 を格納する。

図 3 に副プログラムにおけるデータと GR0 との関係を示し,図 4 に パラメタの形式を示す。ビット番号 m とビット数 n の関係が m≦15 かつ m+n>16 の場合の処理手順で に入れる正しい答えを,解答群の中から選べ。

図3 データと GR0 の関係

図4 パラメタの形式

〔処理手順〕

(1) GR0 に 0 を設定する。

(2) FGSUB を呼び出して,上位語のビット番号 のビット列を GR0 に設定する。

(3) GR0 の内容を左へ ビットだけシフト(けた移動)する。

(4) FGSUB を呼び出して,下位語のビット番号 のビット列を GR0 に設定する。

a,c に関する解答群

ア 0 〜 m    イ 16 〜 m+n−1    ウ m+n 〜 31

エ m 〜 15

b に関する解答群

ア 16−m    イ 32−m−n    ウ m

エ m+n−16


戻る 次頁:問15