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

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

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

 

〔プログラムの説明〕

 1970 年1月1日(以下,基準日という)から,指定された日付までの日数を 求める副プログラム群である。日付は,全て西暦(グレゴリオ暦)の日付であり, 基準日以降でなければならない。

(1)プログラム1は,基準日から指定された日付までの日数を計算する 副プログラム DAYOFFST である。日付は,GR2 に設定されたアドレスから始まる 連続した 3 語に年,月,日を表す数値でこの順に格納され,誤りはないものとする。 基準日を 0 日目とし,指定された日付までの日数を,符号のない数値( 0 〜 65535 )と して GRØ に設定して呼出し元に戻る。ただし,日付は基準日から 65535 日目までの日付で 与えられる。

(2)プログラム2は,うるう年を判定する副プログラム LEAPYEAR である。 GR2 に設定された年が平年の場合は 0 を,うるう年の場合は 1 を, GRØ に設定して呼出し元に戻る。年が平年であるか,うるう年であるかの判定は,次の順に行う。

@ 年が 4 で割り切れない場合,平年とする。

A 年が 4 で割り切れ,かつ 100 で割り切れない場合,うるう年とする。

B 年が 400 で割り切れる場合,うるう年とする。

C @〜Bのいずれでも決定しなかった場合,平年とする。

(3)副プログラム DIVISIBL は,GR2 に設定された整数値がGR3に設定された整数値で 割り切れる場合は 1 を,割り切れない場合は 0 を,GRØ に設定して呼出し元に戻る。 プログラムのソースコードは,省略する。

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

〔プログラム1〕

(行番号)

 1 DAYOFFST START
 2          RPUSH
 3          LD     GR5,Ø,GR2  ; GR5: 年
 4          LD     GR3,1,GR2  ; GR3: 月
 5          LD     GR1,2,GR2  ; GR1: 日
 6          SUB    GR1,=1     ; GR1 で日数をカウント
 7          a
 8          ADDL   GR1,-1,GR4 ; 1月1日から日数(平年)を求める
 9          CPA    GR3,=3     ; 月が3月以降のときうるう年を考慮
1Ø          JMI    SKIP
11          LD     GR2,GR5
12          CALL   LEAPYEAR
13          ADDL   GR1,GRØ
14 SKIP     LD     GR2,=197Ø  ; 197Ø年から(年−1)年までの間(ただし,
15 LOOP     CPA    GR2,GR5    ; 年>197Ø),1年の日数を加算
16          b
17          CALL   LEAPYEAR
18          ADDL   GRØ,=365
19          ADDL   GR1,GRØ
2Ø          ADDA   GR2,=1
21          JUMP   LOOP
22 BREAK    LD     GRØ,GR1
23 EXIT     RPOP
24          RET
25 ; ACCMDAYSは,平年の各月1日の1月1日からの日数(1月1日はØ日目)
26 ACCMDAYS DC     O,31,59,9Ø,12Ø,151,181,212,243,273,3Ø4,334
27          END
〔プログラム2〕

(行番号)

 1 LEAPYEAR START
 2          RPUSH
 3          SUBA   GRØ,GRØ
 4          LD     GR3,GR2
 5          AND    GR3,=3
 6          c
 7          LD     GR3,=1ØØ
 8          CALL   DIVISIBL
 9          d
1Ø          JNZ    FIN
11          LD     GR3,=4ØØ
12          CALL   DIVISIBL
13          FIN    RPOP
14          RET
15          END

 

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

 

a に関する解答群 ア LAD  GR4,ACCMDAYS      イ LAD  GR4,ACCMDAYS,GR3

ウ LAD  GR4,ACCMDAYS,GR5     エ LD  GR4,ACCMDAYS

オ LD  GR4,ACCMDAYS,GR3     カ LD  GR4,ACCMDAYS,GR5

b に関する解答群 ア JMI  BREAK     イ JNZ  BREAK     ウ JOV  BREAK

エ JPL  BREAK     オ JUMP  BREAK     カ JZE  BREAK

c に関する解答群 ア JMI  FIN     イ JNZ  FIN     ウ JOV  FIN

エ JUMP  FIN     オ JZE  FIN

d に関する解答群 ア AND  GRØ,=#FFFE      イ AND  GRØ,=1      ウ OR  GRØ,=#FFFE

エ OR  GRØ,=1      オ XOR  GRØ,=#FFFE      カ XOR  GRØ,=1

 

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

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

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

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

基本情報技術者試験


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

 

 副プログラム DAYOFFST に,基準日から 65536 日目以降 32767 年 12 月 31 日までの 日付を与えた場合には,あふれが発生し,正しい結果を返すことができない。 あふれが発生したことを呼出し元に通知するために,フラグレジスタ FR の OF が 1 の状態で 呼出し元に戻るようにしたい。このためには,プログラム1の行番号 e の 行の直後に f 命令を挿入し,ラベル EXIT の行に分岐する必要がある。

 

e に関する解答群 ア 8       イ 13       ウ 18       エ 19       オ  f に関する解答群 ア JMI       イ JNZ       ウ JOV       エ JPL       オ JZE
解答 e ←クリックすると正解が表示されます

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


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