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