MAIN START
LAD GR1,YYMMDD
CALL DATE ;副プログラムの呼び出し
RET
YYMMDD DC 2000,8,31
END
DATE START ;月と日の検査 [c11.cas]
RPUSH ;汎用レジスタを退避
LD GR2,1,GR1 ;月を取り出す
CPA GR2,=12
JPL ERROR
CPA GR2,=1 ;月のチェック
JMI ERROR ; [ a ]
LD GR2,2,GR1 ;日を取り出す
CPA GR2,=1
JMI ERROR
LD GR2,1,GR1 ;月を取り出す
CPA GR2,=2 ;2月か?
JNZ NOT2
LD GR3,0,GR1 ;西暦年を取り出す
AND GR3,=3 ; 4で割った
JNZ HEINEN ; 余りが1か?
LD GR3,0,GR1 ;西暦年を取り出す
LAD GR4,0
LOOP ADDA GR4,=1 ;100で割る
SUBA GR3,=100 ; 〃 [ b ]
JPL LOOP
JNZ URUU
;100で割り切れた場合
AND GR4,=#0003 ;400で割る
JNZ HEINEN ; 〃
URUU LAD GR3,29 ;うるう年
JUMP CHKDD
HEINEN LAD GR3,28 ;平年
JUMP CHKDD ; [ c ]
NOT2 LD GR3,GR2 ;2月以外の場合
SRL GR3,3 ;8で割る
ADDA GR3,1,GR1 ;1加算
AND GR3,=#0001 ;最右ビットを取り出す
ADDA GR3,=30 ;30を加算
CHKDD CPA GR3,2,GR1 ;最終日のチェック
JMI ERROR
LAD GR0,0 ;チェックOK
END RPOP ;汎用レジスタの復元\\
RET
ERROR LAD GR0,1 ;エラー
JUMP END
END