[更新日]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
設問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