平成9年度 春期 第二種 午後 問14

                        [更新日]1997.05.30
問14 次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラムの説明〕 連続する2語を32ビットのビット列とみなす。このビット列を指定されたビット数 nだけ右に循環シフトする副プログラム SHIFTR である。 右に循環シフトするとは,図1で示すように,シフトの結果,右にはみ出したビッ ト列を左端に格納することである。図1において,ビット番号0〜15のビット列が第 1語,16〜31のビット列が第2語である。
図1 nビット右循環シフト
(1) ビット列の先頭番地はGR1に,シフトするビット数nはGR2に格納され,主プ ログラムから渡される。 (2) シフトした結果は,もとの領域に格納する。 (3) GR2=9 の場合の実行例を図2に示す。
図2 実行例
(4) 0≦n≦l6とする。 (5) この副プログラムから戻ったとき,汎用レジスタGRl〜GR3の内容は,呼出し 前の内容と同じである。 〔プログラム〕 SHIFTR START PUSH 0,GR3 LD GR0,0,GR1 CALL DIVIDE ;第1語を二つの部分に分ける ST GR0,PART1 ST GR3,PART2 LD GR0,1,GR1 CALL DIVIDE ;第2語を二つの部分に分ける OR GR3,PART1 ST GR3,0,GR1 OR GR0,PART2 ST GR0,1,GR1 POP GR3 RET PART1 DS 1 PART2 DS 1 ; DIVIDE ST GR2,SAVE ST GR0,WORK SRL GR0,0,GR2 LEA GR2,16 SUB GR2,SAVE LD GR3,WORK SLL GR3,0,GR2 LD GR2,SAVE RET SAVE DS 1 WORK DS 1 END 設問1 図2の例を実行した場合,副プログラムSHIFTRの実行終了時点での,領域 PART1とPART2の内容はどうなっているか,解答群の中から選ベ。 解答群 ア PART1 = 0000000001001011 PART2 = 0111100110000000 イ PART1 = 0000000001011000 PART2 = 0000000110101110 ウ PART1 = 0000000001011000 PART2 = 1101011100000000 工 PART1 = 1001011000000000 PART2 = 0111100110000000 オ PART1 = 1011000000000000 PART2 = 1101011100000000 設問2 SHIFTRを利用し,0≦n≦32のときも正しく実行できる副プログラム LSHFTRを作成した。[ ]に入れる正しい答えを,解答群の中から選ベ。 LSHFTR START PUSH 0,GR2 PUSH 0,GR3 CPA GR2,C17 JMI SHIFT LD GR3,0,GR1 LD GR0,1,GR1 ST GR3,1,GR1 ST GR0,0,GR1 [ ] SHIFT CALL SHIFTR POP GR3 POP GR2 RET C17 DC 17 END 解答群 ア LEA GR2,-16,GR2 イ LEA GR2,-8,GR2 ウ LEA GR2,8 エ LEA GR2,8,GR2 オ LEA GR2,16 カ LEA GR2,16,GR2 設問3 nビット(0≦n≦32)左に循環シフトする副プログラムLSHFTLを作 成した。[ ]に入れる正しい答えを,解答群の中から選ベ。 LSHFTL START PUSH 0,GR2 ST GR2,N [ a ] SUB GR2,N [ b ] POP GR2 RET N DS 1 END a関する解答群 ア LEA GR2,-32,GR2 イ LEA GR2,-16,GR2 ウ LEA GR2,16 エ LEA GR2,16,GR2 オ LEA GR2,32 カ LEA GR2,32,GR2 bに関する解答群 ア CALL DIVIDE イ CALL LSHFTL ウ CALL LSHFTR エ CALL SHIFTL オ CALL SHIFTR

戻る  前頁:問13  次頁:問15