平成30年度秋季 基本情報技術者試験(FE)の午後問題12(アセンブラ言語CASL)は、
- 1970年1月1日から、指定された日付までの日数を求める問題
でした。
プログラム(h30a_fe_pm12.casl)
- 05行目:本日の日付(2018年10月28日)をセット
- 13行目:(空欄a)GR4に10月までの経過日数が格納されているメモリアドレスをセットする
- 14行目:9月までの合計日数をGR1に加算する(10月まで加算してはダメ)。
- 22行目:(空欄b)すでに2018年(今年)分の日数は足しているので、処理している年(GR2)と等しくなったら22〜26行目の加算処理はしない
- 36行目:GR0を0で初期化(0は平年、1はうるう年)
- 39行目:(空欄c)38行目で3とAND演算をしている。結果が0の場合は4の倍数である。
- 42行目:(空欄d)41行目の実行結果で、GR0に100で割り切れた場合は1が、割り切れなかった場合は0が格納されている。100で割り切れなかった場合は、うるう年なのでビット反転する操作が必要になる。
- 49行目:DIVISIBLは繰り返し引き算を行って割り切れるかどうかを判定している。
実行結果
作成したプログラムを「CASLシミュレータ(CASL II 対応)」で実行してみました。1970年1月1日から本日(2018年10月28日)までの日数は、GR0の値から17832日のようです。
あっているかRubyのスクリプトと比較してみたところ、無事、同じ結果となりました。
$ ruby -rdate -e "puts (Date.today - Date.new(1970,1,1)).to_i" 17832