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


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

〔プログラムの説明〕

副プログラム ADDP は,主プログラムから,BCD コードで表現された二つの整数 a,b(a ≧ 0,b ≧ 0)を受け取り,a と b の和を BCD コードとして求める。

(1) BCD コードとは,10 進数の値に対して,その 10 進数の各けたを 4 ビットの 2 進数で表現したものである。例えば,10 進数の 5973 を BCD コードで表現すると, 次のとおりになる。

千の位

百の位

十の位

一の位

5

9

7

3

0101

1001

0111

0011

(2) a と b は共に 4 けた(16 ビット)であり,それぞれ GR1 と GR2 に格納されて,主プログラムから渡される。

(3) 副プログラム ADDP の実行例を図に示す。

図 副プログラム ADDP の実行例

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

〔副プログラム ADDP〕

ADDP     START                  ;
         ST      GR1,A          ; 
         ST      GR2,B          ;
         PUSH    0,GR3          ;
         LEA     GR3,0          ;  結果の領域の初期化
         ST      GR3,RES        ;
LOOP1    AND     GR1,MASK1      ;整数aから4ビットを抽出
         AND     GR2,MASK1      ;整数bから4ビットを抽出
         LEA     GR0,0          ;
         ST      GR2,WORK       ;  4ビットの加算
         ADD     GR1,WORK       ;
         CPA     GR1,TEN        ;結果≧10?
         JMI     NOTOVR         ;NO
         SUB     GR1,TEN        ;結果から10減算
         LEA     GR0,1          ;けた上げの設定
NOTOVR   SLL     GR1,0,GR3      ;4ビットの加算結果を元のビット位置へ
         OR      GR1,RES        ;中間結果に併合
         LEA     GR3,4,GR3      ;
         CPA     GR3,SIXTEN     ;全けた終了?
         JZE     FIN1           ;YES
         ST      GR1,RES        ;中間結果を格納
         LD      GR1,A          ;  整数aの次の4ビットを右端へ
         SRL     GR1,0,GR3      ;
         LD      GR2,B          ;  整数bの次の4ビットを右端へ
         SRL     GR2,0,GR3      ;
         ST      GR0,WORK       ;  けた上げ分を加算
         ADD     GR1,WORK       ;
         JMP     LOOP1          ;
FIN1     POP     GR3            ;
         LD      GR2,B          ;
         RET                    ;
MASK1    DC      #000F          ;
TEN      DC      10             ;
SIXTEN   DC      16             ;
A        DS      1              ;
B        DS      1              ;
RES      DS      1              ;
WORK     DS      1              ;
         END                    ;

設問1 次の文中の に 入れる正しい答えを,解答群の中から選べ。

主プログラムから渡された GR1 と GR2 の内容が次のとおりであった場合, ADDP はその実行後,GR0 に を,GR1 に を 設定して,主プログラムに返す。

GR1 = 0101 0010 1001 1000

GR2 = 0100 1000 0101 0011

解答群

 ア 0000 0000 0000 0000    イ 0000 0000 0000 0001

 ウ 0000 0001 0101 0001    エ 0100 1000 0101 0011

 オ 0101 0010 1001 1000    カ 1001 1001 1001 1001

 キ 1010 0001 0101 0001    ク 1111 1111 1111 1111

設問2 副プログラム ADDP を使用して, BCD コードで表現された二つの整数 m,n
(m ≧ 0,n ≧ 0)に対し, ある演算を行う副プログラム CALC を作成した。

(1) m と n は,それぞれ GR1 と GR2 に格納されて,主プログラムから渡される。

(2) 演算結果を GR1 に格納する。

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

表は,主プログラムから渡される m と n の値,主プログラムに返す GR1 の値,及び 副プログラム ADDP を呼び出す回数を示す。ただし,表中及び 解答群中の値はすべて 10 進数とする。

表中の に入れる 正しい答えを,解答群の中から選べ。

表 各値の対応

主プログラムから渡される値

主プログラムに返す

GR1 の値

ADDP を

呼び出す回数

m

n

123

45

51

3579

〔副プログラム CALC〕

CALC      START                    ;
          PUSH    0,GR2            ;  レジスタの退避
          PUSH    0,GR3            ;
          ST      GR1,M            ;
          LEA     GR1,0            ;結果の初期化
          LD      GR3,M            ;
LOOP2     AND     GR3,MASK2        ;ループ回数→GR3
          JZE     NDIGIT           ;
LOOP3     CALL    ADDP             ;
          CPA     GR0,ZERO         ;
          JNZ     FIN3             ;あふれ
          LEA     GR3,-1,GR3       ;
          JNZ     LOOP3            ;
NDIGIT    LD      GR3,M            ;
          SRL     GR3,4            ;M÷10
          JZE     FIN3             ;
          ST      GR3,M            ;
          CPA     GR2,LIMIT        ;
          JPZ     FIN2             ;あふれ
          SLL     GR2,4            ;N×10
          JMP     LOOP2            ;
FIN2      LEA     GR0,1            ;
FIN3      POP     GR3              ;  レジスタの復元
          POP     GR2              ;
          RET                      ;
MASK2     DC      #000F            ;
ZERO      DC      0                ;
LIMIT     DC      #1000            ;
M         DS      1                ;
          END                      ;

c,e に関する解答群

 ア 0    イ 70    ウ 78    エ 168

 オ 737    カ 2529    キ 3528    ク 3579

 ケ 5535    コ 7158

 

d,f に関する解答群

 ア 0    イ 1    ウ 2    エ 3

 オ 6    カ 9    キ 45    ク 51

 ケ 123    コ 3579


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