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

                        [更新日]1996.06.04
問14 次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜4に答えよ。 〔プログラムの説明〕 このプログラムは,2語(32ビット)で表現された倍精度整数の加算を行う副プロ グラムである。 (1) 倍精度整数は32ビットの2進数で表現され,負数は2の補数を使うものとする。 倍精度整数を構成する各語は,倍精度整数を表す記号に,上位語にはH,下位語に はLをつけて表記する。 (2) 主プログラムは,二つの倍精度整数X,Yを図2のようにスタックに置き,副プ ログラムを呼ぶ。 │ │ ├────────┤ SP→│ YH │ SP:スタックポインタ(=GR4) ├────────┤ │ YL │↑ ├────────┤│ │ XH ││ ├────────┤│ │ XL │ パラメタPUSH順 └────────┘ 図2 副プログラム呼出し前のスタヅク (3) 副プログラムは,加算結果 Z(=X+Y) の上位語をGR0に,下位語をGR1に設定 し主プログラムに戻る。なお,Zがオーバフローしたかどうかについては考慮し ない。 (4) 副プログラムから戻るとき,汎用レジスタGE3の内容は呼び出される前の値に 復元する。 〔プログラム〕 (行番号) 1 DADD START ; 2 PUSH 0,GR3 ; 3 LEA GR3, 0,GR4 ; 4 LEA GR4, -2,GR4 ; 作業領域(局所変数Z)確保 5 LD GR0, 5, GR3 ; ┐ 6 ADD GR0, 3,GR3 ; ├ XL+YL→ZL 7 ST GR0, -1, GR3 ; ┘ 8 LD GR0,5,GR3 ; ┐ XL,YLのビット0が同じ値か? 9 [ CPA GR0, 3,GR3 ] ; ┘ [←この行は間違い?設問3参照] 10 JMI NEXTCK ; 11 EOR GR0,5,GR3 ; XL,YLのビット0が同じ場合の処理 12 JMP CYSET ; 13 NEXTCK EOR GR0, -1, GR3 ; XL,YLのビット0が異なる場合の処理 14 CYSET SRL GR0, 15 ; GR0のビット0からCYを生成 15 ADD 6R0,4,GR3 ; ┐ 16 ADD GR0,2.GR3 ; ┴ CY + XH + YH → ZH 17 LD GR1, -1,GR3 ; 18 LEA GR4, 0, GR3 ; 19 POP GR3 ; 20 RET 21 END 設問1 行番号4が終了するところまでプログラムの実行が進行したとき,スタック の状態として正しい答えを,解答群の中から選ベ。 解答群 ア │ │ イ │ │ ├────────┤ ├────────┤ GR3→│ │ SP→│ │ │ 作業領域(2語) │ │ 作業領域(2語) │ │ │ │ │ ├────────┤ ├────────┤ SP→│ GR3 退避領域 │ GR3→│ GR3 退避領域 │ ├────────┤ ├────────┤ │ 戻り番地 │ │ 戻り番地 │ ├────────┤ ├────────┤ │ YH │ │ YH │ ├────────┤ ├────────┤ │ YL │ │ YL │ ├────────┤ ├────────┤ │ XH │ │ XH │ ├────────┤ ├────────┤ │ XL │ │ XL │ └────────┘ └────────┘ ウ │ │ エ │ │ ├────────┤ ├────────┤ GR3→│ GR3 退避領域 │ SP→│ GR3 退避領域 │ ├────────┤ ├────────┤ SP→│ │ GR3→│ │ │ 作業領域(2語) │ │ 作業領域(2語) │ │ │ │ │ ├────────┤ ├────────┤ │ 戻り番地 │ │ 戻り番地 │ ├────────┤ ├────────┤ │ YH │ │ YH │ ├────────┤ ├────────┤ │ YL │ │ YL │ ├────────┤ ├────────┤ │ XH │ │ XH │ ├────────┤ ├────────┤ │ XL │ │ XL │ └────────┘ └────────┘ 設問2 次の記述中の [ ] に入れる正しい答えを,解答群の中か なお,解答は重複して選んでもよい。 このプログラムでの倍精度整数の加算では,下位語から上位語へのけた上が りを次のように処理する。 (1) 下位語同士の加算(XL+YL→ZL)を行う。 (2) (1)でのけた上がりの有無を調べる。 ・XL,YLのビット0がともに1の場合,けた上がりが発生する ・XL,YLのビット0がともに0の場合,けた上がりが [ a ]。 ・XL,YLのビット0のいずれか一方だけが1の場合,けた上がりが発生 する可能性がある。 (3) (2)でけた上がりが発生する可能性がある場合,更に次の判定を行なう。 ・ZLのビット0が0になっていれば,けた上がりが [ b ]。 ・ZLのビット0がlになっていれば,けた上がりが [ c ]。 (4) (2),(3)でけた上がりが発生していれば,けた上がりの値(CY)を1とし さもなければ0とする。 (5) (4)で求めたけた上がりの値に各上位語を加算(CY+XH+YH → ZH) する。 解答群 ア 発生する イ 発生しない ウ 発生する可能性がある 設問3 プログラム中の行番号9について,誤っているのではないかという指摘を受 けた。どう訂正すべきかを,解答群の中から選ベ。 解答群 ア AND GR0,3,GR3 イ OR GR0, 3, GR3 ウ EOR GR0, 3, GR3 エ CPL GR0,3,GR3 オ 訂正の必要はない 設問4 主プログラムは,副プログラムからの復帰直後にスタックポインタの調整を 行うための命令を必ず実行し,副プログラムの呼出しに関連するスタックの消 費をすべて解消するものとする。このとき実行すべき適切な命令を,解答群の 中から選ベ。 解答群 ア POP GR0 イ LEA GR4, -2, GR4 POP GR1 ウ LEA GR4, -4, GR4 エ LEA GR4, 2, GR4 オ LEA GR4, 4, GR4