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