[更新日]1998.05.15


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

 

〔プログラムの説明〕

連続する 49 語の領域を 7 行 7 列の表とみなす。副プログラム RECTGL は,その表と 2 点の座標 (x1,y1),(x2,y2) を主プログラムから 受け取り,表中のその 2 点を対角の頂点とする長方形の内側を,指定された 文字で塗りつぶす。

 

(1) 主プログラムは,図 1 に示す形式のパラメタの先頭アドレスを GR1 に設定し,
RECTGL を呼び出す。

      図1 パラメタの形式

(2) 長方形の各辺は,x 軸又は y 軸と平行とする。

例えば,2 点 (2,3) と (6,5) を頂点とする長方形を,文字“*”で 塗りつぶす場合,図 2のようになる。

      図2 長方形の塗りつぶし例

(3)  1 ≦ x1 ≦ x2 ≦ 7,1 ≦ y1 ≦ y2 ≦ 7 とする。

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

(5) 副プログラム XY2ADR は,座標 (x,y) を値 z に変換し,z を GR3 に設定して返す。

 


〔プログラム〕
(行番号)
01  RECTGL  START
02          PUSH    0,GR2           ;
03          PUSH    0,GR3           ;
04          LEA     GR2,3,GR1       ;
05          CALL    XY2ADR          ;(x2,y2)を変換
06          ADD     GR3,0,GR1       ;長方形の右下のアドレス
07          ST      GR3,ENDADR      ;
08          LEA     GR2,1,GR1       ;
09          CALL    XY2ADR          ;(x1,y1)を変換
10          ADD     GR3,0,GR1       ;長方形の左上のアドレス
11          LD      GR2,3,GR1       ;
12          SUB     GR2,1,GR1       ;  長方形の横幅
13          LEA     GR2,1,GR2       ;
14          ST      GR2,WIDTH       ;
15          LEA     GR2,7           ;
16          SUB     GR2,WIDTH       ;
18          ST      GR2,DISP        ;
19          LD      GR0,5,GR1       ;
20  LOOP1   LD      GR2,WIDTH       ;
21  LOOP2   ST      GR0,0,GR3       ;
22          LEA     GR3,1,GR3       ;  長方形の横1列を塗りつぶす
23          LEA     GR2,-1,GR2      ;
24          JNZ     LOOP2           ;
25          CPA     GR3,ENDADR      ;
26          JPZ     FIN             ;
27          ADD     GR3,DISP        ;
28          JMP     LOOP1           ;
29  FIN     POP     GR3             ;
30          POP     GR2             ;
31          RET                     ;
32  ENDADR  DS      1               ;
33  WIDTH   DS      1               ;
34  DISP    DS      1               ;
35  XY2ADR  PUSH    0,GR1           ;α
36          LD      GR1,1,GR2       ;α
37          LEA     GR3,0           ;α
38  LOOP3   LEA     GR1,-1,GR1      ;α
39          JZE     ADDX            ;α
40          LEA     GR3,7,GR3       ;α
41          JMP     LOOP3           ;α
42  ADDX    ADD     GR3,0,GR2       ;α
43          LEA     GR3,-1,GR3      ;α
44          POP     GR1             ;α
45          RET                     ;α
46          END                     ;

設問1 副プログラム XY2ADR(プログラム中のαの部分)の処理において, x,y,z の関係を示す正しい式を,解答群の中から選べ。

解答群

ア z = (x−1) + 7(y−1)    イ z = (x−1) + 7y

ウ z = 7(x−1) + (y−1)    エ z = 7x + 7(y−1)

オ z = 7x + y         カ z = x + 7y

 

設問2 主プログラムから渡された 2 点の座標を (3,4),(6,5) とする。 副プログラム RECTGL を実行した後,主プログラムに戻るとき,34 行目の 領域 DISP の値として正しい答えを,解答群の中から選べ。

 

解答群

ア 0    イ 1    ウ 2

エ 3    オ 4    カ 5

キ 6    ク 7

 

設問3 副プログラム RECTGL を使用して,図 3 のように,長方形の外側を 指定された文字で塗りつぶし,長方形の内側を空白で塗りつぶす副プログラム SPREC を作成した。 に入れる 正しい答えを,解答群の中から選べ。

     図3 SPREC の実行例


SPREC   START
        LD      GR0,0,GR1
        ST      GR0,PARAM
        
        ST      GR0,CHAR
        PUSH    0,GR1
        LEA     GR1,PARAM
        CALL    RECTGL
        POP     GR1
        LEA     GR0,32          ;空白の文字コード → GR0
        ST      GR0,5,GR1
        CALL    RECTGL
        LD      GR0,CHAR
        ST      GR0,5,GR1
        RET
PARAM   DS      1 
        
CHAR    DS      1
        END

a に関する解答群

ア LD   GR0,5,GR1    イ LD   GR0,6,GR1    ウ LEA  GR0,5,GR1
エ LEA  GR0,20      オ LEA  GR0,32

b に関する解答群

ア DC     0    イ DC     0    ウ DC     0
  DC     0      DC     0      DC     0
  DC     0      DC     6      DC     7
  DC     0      DC     6      DC     7
エ DC     1    オ DC     1
  DC     1      DC     1
  DC     6      DC     7
  DC     6      DC     7

戻る 次頁:問15