Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

平成30年度秋季基本情報午後問12

平成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日のようです。

f:id:rahaema:20181028140414p:plain

あっているかRubyスクリプトと比較してみたところ、無事、同じ結果となりました。

$ ruby -rdate -e "puts (Date.today - Date.new(1970,1,1)).to_i"
17832