基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成24年 春期 基本情報技術者 午後 問12
問12   CASL

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

〔プログラム1の説明〕

 主プログラムから渡された二つの数字列(数字列1と数字列2)をそれぞれ正の 10 進数とみなして加算し, 結果を数字列で返す副プログラム ADDC である。二つの数字列の加算の例を図1に示す。


   図1 二つの数字列の加算の例

(1) 汎用レジスタ GR1 〜 GR5 には,それぞれ次の内容が設定されて,主プログラムから渡される。

GR1:数字列1の先頭アドレス
GR2:数字列2の先頭アドレス
GR3:結果領域の先頭アドレス
GR4:数字列1の長さ(文字数)
GR5:数字列2の長さ(文字数)
(2) 数字は1語に1文字格納する。

(3) 結果の数字列は結果領域に格納し,長さ(文字数)は GR0 に設定して,主プログラムに返す。

(4) 数字列1と数字列2の長さ(文字数)は,それぞれ1以上とする。

(5) 数字列1と数字列2の左端の文字は,“0”でないものとする。

(6) 副プログラムから戻るとき,汎用レジスタ GR0 〜 GR7 の内容は元に戻す。

〔プログラム1〕

(行番号)

 1 ADDC    START
 2         RPUSH
 3         CPA     GR4,GR5
 4         JPL     CONT
 5         PUSH    0,GR4         ;
 6         LD      GR4,GR5       ;
 7         POP     GR5           ; GR4≧GR5 となるように
 8         PUSH    0,GR1         ; 数字列1と数字列2のポインタ
 9         LD      GR1,GR2       ; を入替え
10         POP     GR2           ;
11 CONT    ADDA    GR1,GR4
12         ADDA    GR2,GR5
13         LD      GR0,=0        ; 桁上げフラグを初期化
14         PUSH    0             ; スタックデータの終わりの印
15 LOOP1   LAD     GR2,-1,GR2
16         LD      GR6,0,GR2
17         AND     GR6,=#000F
18 LOOP2   LAD     GR1,-1,GR1
19         ADDA    GR6,0,GR1     ; 1桁加算
20         ADDA    GR6,GR0       ; 桁上げフラグを加算
21         CPA     GR6,='9'      ; 桁上げ?
22         JPL     CARRY
23         LD      GR0,=0        ; 桁上げフラグをクリア
24         JUMP    NEXT
25 CARRY   LD      GR0,=1        ; 桁上げフラグを設定
26         
27 NEXT    PUSH    0,GR6         ; 加算結果1桁を保存
28         
29         JZE     END1
30         
31         JPL     LOOP1
32         LD      GR6,=0
33         JUMP    LOOP2
34 END1    LD      GR0,GR0       ; 左端を桁上げ?
35         JZE     NOCARRY
36         LD      GR1,='1'      ; 左端に'1'を追加
37 LOOP3   ST      GR1,0,GR3
38         LAD     GR3,1,GR3
39 NOCARRY POP     GR1           ; 加算結果1桁取出し
40         LD      GR1,GR1
41         JZE     END2
42         ADDA    GR0,=1
43         JUMP    LOOP3
44 END2    RPOP
45         RET
46         END

設問1 プログラム1中の に入れる正しい答えを, 解答群の中から選べ。

解答群

ア SUBA GR4,=1     イ SUBA GR4,=9     ウ SUBA GR4,=10

エ SUBA GR5,=1     オ SUBA GR5,=9     カ SUBA GR5,=10

キ SUBA GR6,=1     ク SUBA GR6,=9     ケ SUBA GR6,=10

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

基本情報技術者試験


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

 図1の数字列1と数字列2を引数として副プログラム ADDC を実行した場合, 行番号 25 の LD 命令は 回実行される。

解答群

ア 0     イ 1     ウ 2     エ 3     オ 4

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


設問3 副プログラム ADDC を使用して,n 個 ( n ≧ 1 )の数字列を入力し, 総和を求めて数字列で出力するプログラム SUMC を作成した。n=5 の場合の例を図2に示す。

 プログラム2中の に入れる正しい答えを,解答群の中から選べ。

 なお,入力される数字列,総和は 256 桁以内に収まるものとする。


図2 数字列1〜5の総和の例

〔プログラム2〕

SUMC   START
       LAD    GR1,BUF1      ; 数字列1のポインタを設定
       IN     BUF1,LEN1     ; 最初の数字列を入力し数学列1とする
       LD     GR4,LEN1      ; 数字列1の長さを設定
       LAD    GR3,BUF3      ; BUF3 を総和の領域として設定
       LAD    GR2,BUF2      ; 数字列2のポインタを設定
LOOP   IN     BUF2,LEN2     ; 次の数字列を入力し数字列2とする
       LD     GR5,LEN2      ; 数字列2の長さを設定
       JMI    FIN1          ; 入力終了
       CALL   ADDC
       
       PUSH   0,GR1         ; 総和の領域のポインタと
       LD     GR1,GR3       ; 数字列1のポインタを入替え
       POP    GR3           ;
       JUMP   LOOP
FIN1   
       CPA    GR1,GR3       ; 総和の領域を判定
       JZE    FIN2
       ST     GR4,LEN1
       OUT    BUF1,LEN1
       JUMP   FIN3
FIN2   ST     GR4, LEN3
       OUT    BUF3,LEN3
FIN3   RET
BUF1   DS     256           ; 数字列1又は総和
BUF2   DS     256           ; 数字列2
BUF3   DS     256           ; 総和又は数字列1
LEN1   DS     1
LEN2   DS     1
LEN3   DS     1
       END

解答群

ア LAD GR3,BUF1     イ LAD GR3,BUF2     ウ LAD GR3,BUF3

エ LD GR3,GR0     オ LD GR4,GR0     カ LD GR5,GR0

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]