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

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

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

〔プログラムの説明〕

10 進数の読取りを行う副プログラム NREAD と,NREAD から呼ばれる副プログラム DTOB である。

(1) NREAD は,入力装置から1レコードを読み取り,読み込んだ文字列を2進数に変換し, 結果を GR0 に格納して,主プログラムに戻る。

(2) NREAD は,入力された文字列中の間隔文字を読み飛ばし,間隔文字以外について, 次の条件を検査する。

@ 最初の文字は数字又は負符号(−)

A 2番目以降の文字はすべて数字

B 一つ以上の数字を含む。

条件を満たしていないとき,GR0 に −32768 を設定して主プログラムに戻る。 条件を満たしているとき,DTOB を呼び出し,DTOB の戻り値 GR0 をそのまま NREAD の戻り値とする。

(3) DTOB は,先頭アドレスを GR1 に設定して渡された数字列を2進数に変換し, GR0 に格納して呼出し元に戻る。 このとき,変換結果が −32767 〜 32767 に収まらない場合はエラーとし, GR0 に −32768 を設定して呼出し元に戻る。

〔数字列の形式〕

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

〔プログラム 1〕
(行番号)

 1  NREAD   START
 2          RPUSH
 3          IN    INBUF,LENG     ; 入力装置から 1 レコード読込み
 4          LD    GR2,LENG
 5          JZE   ERR
 6          JMI   ERR
 7          LAD   GR1,INBUF
 8          ADDL  GR2,GR1        ; 入力データ終端アドレスの設定
 9          LAD   GR3,0          ; 先頭文字確認フラグの初期化
10          LAD   GR5,1          ; NUMSTR 領域カウンタの初期化
11          LAD   GR6,0          ; 数字カウンタの初期化
12  LOOP    CPL   GR1,GR2        ; 入力データ終端?
13          
14          LD    GR4,0,GR1      ; 1 文字の取出し
15          CPL   GR4,=' '       ; 間隔文字ならばスキップ
16          JZE   NEXT
17          LD    GR3,GR3        ; (間隔文字以外の)先頭文字?
18          JNZ   NUMCHK
19          LAD   GR3,1
20          CPL   GR4,='-'
21          JNZ   NUMCHK
22          ST    GR4,NUMSTR,GR5 ; 文字'-'の格納
23          LAD   GR5,1,GR5
24          JUMP  NEXT
25  NUMCHK  CPL   GR4,='9'       ; 数字?
26          JPL   ERR
27          CPL   GR4,='0'
28          JMI   ERR
29          ST    GR4,NUMSTR,GR5
30          LAD   GR5,1,GR5
31          LAD   GR6,1,GR6
32  NEXT    LAD   GR1,1,GR1
33          JUMP  LOOP
34  ERR     LAD   GR0,-32768     ; エラー時の処理
35          JUMP  EXIT
36  CNV     LD    GR6,GR6
37          JZE   ERR
38          LAD   GR5,-1,GR5
39          ST    GR5,NUMSTR     ; 文字数の格納
40          LAD   GR1,NUMSTR
41          CALL  DTOB           ; DTOB 呼出し
42  EXIT    RPOP
43          RET
44  INBUF   DS    256            ; 入力データ領域
45  LENG    DS    1
46  NUMSTR  DS    257            ; DTOB 呼出しパラメタ領域
47          END

〔プログラム 2〕
(行番号)

 1  DTOB    START
 2          RPUSH
 3          LD    GR2,0,GR1  ; 文字数の取出し
 4          ADDL  GR2,GR1    ; 文字列終端アドレスの設定
 5          LAD   GR0,0      ; 戻り値の初期化
 6          LAD   GR3,0      ; 負符号フラグの初期設定
 7          LD    GR4,1,GR1  ; 最初の文字の取出し
 8          CPL   GR4,='-'
 9          JNZ   LOOP
10          LAD   GR3,1      ; 負数であることを記憶
11          LAD   GR1,1,GR1
12  LOOP    LAD   GR1,1,GR1
13          CPL   GR1,GR2    ; 変換終了?
14          JPL   FIN
15          LD    GR4,0,GR1  ; 数字 1 文字の取出し
16          SUBL  GR4,='0'   ; 1 文字を数値に変換
17          SLL   GR0,1      ; GR0(上位けたまでの変換値)を 10 倍する
18          JMI   ERR        ; 〔行番号 20 〜 22 は設問 3 参照〕
19          LD    GR5,GR0    ;    ”
20          SLL   GR0,1      ;    ”
21          JMI   ERR        ;    ”
22          SLL   GR0,1      ;    ”
23          JMI   ERR        ;    ”
24           ;    ”
25          JMI   ERR        ;    ”
26          ADDL  GR0,GR4
27          JMI   ERR
28          JUMP  LOOP
29  ERR     LAD   GR0,-32768 ; −32767 〜 32767の範囲外ならエラー
30          JUMP  EXIT
31  FIN     LD    GR3,GR3    ; 負符号フラグチェック
32          JZE   EXIT
33             
34          ADDA  GR0,=1
35  EXIT    RPOP
36          RET
37          END

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

a に関する解答群

ア JNZ NEXT     イ JNZ NUMCHK     ウ JPL CNV

エ JPL EXIT     オ JZE CNV      カ JZE EXIT

b に関する解答群

ア ADDL GR0,GR4     イ ADDL GR0,GR5     ウ ADDL GR5,GR0

エ ADDL GR5,GR4     オ SLL GR0,1     カ SLL GR4,1

キ SLL GR4,2     ク SLL GR5,1

c に関する解答群

ア AND GR0,=#7FFF     イ AND GR0,GR3

ウ OR GR0,=#8000     エ OR GR0,GR3

オ XOR GR0,=#8000     カ XOR GR0,=#FFFF

キ XOR GR0,GR3

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

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

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


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

IN 命令によって,文字列“△-5△24-△9”(△ は間隔文字)が入力されたとき, 〔プログラム 1〕の ERR へは,行番号 の命令から制御が移る。 ERR に制御が移ったときの GR5 の値は である。

d に関する解答群

ア 5     イ 6     ウ 26      エ 28     オ 37

e に関する解答群

ア 1     イ 2     ウ 4      エ 5     オ 6

カ 7     キ 8

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

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


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

次の数字列が NREAD から渡されたとき,DTOB の戻り値は 16 進表記で
である。 ここで,DTOB の一部である行番号 20 〜 22 の 3 行を“SLL GR0,2”の 1 行で置き換える。 同じ文字列が NREAD から渡されたとき,DTOB の戻り値は 16 進表記で となる。

なお,いずれの場合も,〔プログラム 2〕の行番号 15 で最後の文字'0'を 取り出したとき,GR0 の値は 10 進表記で 8192(16 進表記で 2000)となっている。

NREAD から渡された数字列

   

解答群

ア 0     イ 2000     ウ 4000      エ 8000    オ F000

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

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


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