東京理科大学 infoserv[更新日]2000.5.1


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

〔プログラムの説明〕

与えられたビット列を語に挿入する副プログラム AFLD である。AFLD を作成するために ビット列を移動する副プログラム MVFLD を使用する。

(1) MVFLD は,図 1 に示すようにビット列のデータを移動する。


図1 ビット列のデータ移動

 

(2) AFLD は,図 2 に示す形式のパラメタに基づき,挿入元の第 0 ビットから 長さ m ビットのデータを挿入先の第 p ビットに挿入する。パラメタの先頭アドレスは GR1 に格納されて,主プログラムから渡される。


図2 パラメタの形式

(3) 各副プログラムは呼び出されたプログラムに戻るとき, 汎用レジスタ GR1 〜 GR3 の内容を元に戻す。

〔プログラム〕

(行番号)
01      MVFLD   PUSH  0,GR2         ; レジスタを退避する
02              PUSH  0,GR3         ; 
03              LD    GR3,FULLB     ; マスクの作成
04              SRL   GR3,0,GR1     ;
05              EOR   GR3,FULLB     ;
06              ST    GR3,TEMP      ; マスクデータを格納する
07              AND   GR0,TEMP      ; 複写先の領域をクリアする
08              SRL   GR2,0,GR1     ; 複写元の内容の位置を合わせる
09              ST    GR2,TEMP      ;
10              OR    GR0,TEMP      ; 複写元の内容を格納する
11              POP   GR3           ; レジスタを復元する
12              POP   GR2           ; 
13              RET                 ; 
14      TEMP    DS    1             ;
15      FULLB   DC    #FFFF         ;
16      ;
17      AFLD    PUSH  0,GR2         ; レジスタを退避する
18              PUSH  0,GR3         ;
19              LD    GR3,0,GR1     ; DST の内容を取り出す
20              LD    GR0,0,GR3     ;
21              ST    GR0,SVFLD     ; DST の内容を一時保存する
22              LD    GR3,1,GR1     ; SRC の内容を取り出す
23              LD    GR2,0,GR3     ;
24              PUSH  0,GR1         ;
25              LD    GR1,2,GR1     ; DST の位置を取り出す
26              CALL  MVFLD         ; SRC の内容を DST に格納する
27              POP   GR1           ;
28              LD    GR2,SVFLD     ; DST の壊れた内容を復元する
29              LD    GR3,2,GR1     ; SRC の移動ビット数を求める
30              SLL   GR2,0,GR3     ; DST の内容を左詰めにする
31              PUSH  0,GR1         ;
32              ADD   GR3,3,GR1     ; DST の位置を求める
33              LEA   GR1,0,GR3     ;
34              CALL  MVFLD         ; DST に内容を格納する
35              POP   GR1           ;
36              LD    GR3,0,GR1     ;
37              ST    GR0,0,GR3     ; 結果を格納する
38              POP   GR3           ; レジスタを復元する
39              POP   GR2           ;
40              RET                 ;  
41      SVFLD   DS    1             ;
42              END

 
設問1   次に示すレジスタの値で MVFLD を呼び出す。 13 行目の RET 命令実行直前の,
TEMP の値として正しい答えを,解答群の中から選べ。

GR0     #1234  
GR1     8  
GR2     #5600

解答群

ア #0056    イ #00FF    ウ #1234    エ #1256    オ #FF00

設問2   MVFLD にビット列移動を使わないですむ場合の処理を追加して, 次のようにプログラムを変更した。プログラム中の に入れる正しい答えを,解答群の中から選べ。
    MVFLD  
          JZE   ZEROP
  PUSH  0,GR2         ; レジスタを退避する 
     ・
     ・
     ・
  POP   GR2           ; 
  RET                 ; 
従来の処理
   ZEROP  LEA   GR0,0,GR2     ; 
          RET
   TEMP   DS    1             ;
   FULLB  DC    #FFFF         ;
          ・
          ・
          ・

解答群

ア LD GR0,0,GR1    イ LD GR1,0,GR1    ウ LD GR2,0,GR1

エ LEA GR1,0,GR1    オ LEA GR1,0,GR2    カ LEA GR1,0,GR3

設問3   AFLD を次のパラメタで呼び出す。51 ページの 30 行目の命令を実行した直後の
GR2 の値として正しい答えを,解答群の中から選べ。

解答群

ア #00F0 イ #F0F0 ウ #FF0F エ #FFF0 オ #FFFF

設問4   AFLD でビット列を挿入すると,挿入先から捨てられるビット列がある。 捨てられたビット列を GR0 に左詰めで格納するためのプログラムを, 51 ページの 37 行目の直後に追加した。追加したプログラム中の に入れる正しい答えを, 解答群の中から選べ。
                     LEA   GR3,16
                     SUB   GR3,2,GR1
                     SUB   GR3,3,GR1
                     
                     LEA   GR0,0,GR2

解答群

ア SLL GR2,0,GR1    イ SLL GR2,0,GR3    ウ SLL GR3,0,GR2

エ SRL GR2,0,GR1    オ SRL GR2,0,GR3    カ SRL GR3,0,GR2


東京理科大学 infoserv 戻る 次頁:問15