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


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

〔プログラムの説明〕

連続する 16 語に格納されたデータを 16 × 16 ビットの図形とみなす。 副プログラムROTATE は,そのビットの図形を 90 度回転する。

(1) ビットの図形の先頭アドレスは GR1 に格納されて,主プログラムから渡される。

(2) GR3 には 1 又は−1 が格納されて,主プログラムから渡される。GR3 の内容が 1 のときは右に 90 度,−1 のときは左に 90 度回転する。

(3) 回転した図形を,GR2 で指定する領域に格納する。

(4) GR1 と GR2 で指定する領域は,重なっていないものとする。

(5) 副プログラム ROTATE の実行例を図 1 に示す。

図1 副プログラム ROTATE の実行例

(6) 右に 90 度回転する場合は,図 2 に示すように,元の図形の先頭語 のビット列を矢印の方向に 1 ビットずつ a(結果の図形の右端)のビット列に移す。次に を b に, を c に,… と順に処理する。左に 90 度回転する場合は,図 3 に示すように,元の図形の最終語から順に, を a に, を b に, を c に,…と順に処理する。


図2 右に回転する場合の処理順序   図3 左に回転する場合の処理順序

 

(7) 主プログラムに戻るとき,汎用レジスタ GR1〜GR3 の内容を元に戻す。

〔プログラム〕

ROTATE  START                     ;
        PUSH      0,GR1           ;
        PUSH      0,GR2           ;  レジスタの退避
        PUSH      0,GR3           ;
        ST        GR3,INCR        ;
        LEA       GR3,0,GR3       ;
        JPZ       RIGHT           ;
        LEA       GR1,15,GR1      ;
        LEA       GR2,15,GR2      ;
RIGHT   ST        GR1,SOURCE      ;
        ST        GR2,TARGET      ;
        LEA       GR0,1           ;  ビット位置の初期化
        ST        GR0,BITPOS      ;
        LEA       GR3,16          ;  語数カウンタ
LOOP1   ST        GR3,COUNTR      ;
        LD        GR1,0,GR1       ;元の図形の1語→GR1
        LD        GR0,0,GR2       ;結果の図形の1語→GR0
        OR        GR0,BITPOS      ;結果の1語内のビットをオン
        LEA       GR3,16          ;ビット数カウンタ
        LEA       GR1,0,GR1       ;  元の図形のビット検査
LOOP2   JMI       RESTOR          ;
         ;オンにしたビットをオフ
RESTOR  ST        GR0,0,GR2       ;結果の図形に格納
        LEA       GR3,-1,GR3      ;
        JZE       NWORD           ;
        ADD       GR2,INCR        ;  結果の図形の次語→GR0
        LD        GR0,0,GR2       ;
        OR        GR0,BITPOS      ;結果の1語内のビットをオン
        SLL       GR1,1           ;  元の図形のビット検査
         ;
NWORD   LD        GR1,SOURCE      ;
        ADD       GR1,INCR        ;  元の図形の次語アドレス→GR1
        ST        GR1,SOURCE      ;
        LD        GR2,TARGET      ;結果の図形のアドレス→GR2
        LD        GR0,BITPOS      ;
         ;  ビット位置の更新
        ST        GR0,BITPOS      ;
        LD        GR3,COUNTR      ;
        LEA       GR3,-1,GR3      ;
         ;
        POP       GR3             ;
        POP       GR2             ;  レジスタの復元
        POP       GR1             ;
        RET                       ;
SOURCE  DS        1               ;
TARGET  DS        1               ;
BITPOS  DS        1               ;
INCR    DS        1               ;増分(+1又は-1)
COUNTR  DS        1               ;
        END                       ;
設問 プログラム中の に入れる正しい答えを,解答群の中から選べ。

a,c に関する解答群

 ア AND GR0,0,GR2    イ AND GR0,BITPOS

 ウ EOR GR0,0,GR2    エ EOR GR0,BITPOS

 オ LEA GR0,0    カ LEA GR0,32768

 キ SLL GR0,1    ク SRL GR0,1

 

b,d に関する解答群

 ア JMI LOOP1    イ JMI LOOP2

 ウ JMP LOOP1    エ JMP LOOP2

 オ JNZ LOOP1    カ JPZ LOOP2

 キ JZE LOOP1    ク JZE LOOP2

 


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