MAIN    START
        LAD    GR1,TIME1    ;データのアドレス
        CALL   CALTIM       ;副プログラムの呼び出し
        RET
TIME1   DC     1,10,20      ;1時10分20秒
TIME2   DC     8,20,15      ;8時20分15秒
TIME    DS     3            ;結果格納領域
        END
CALTIM  START               ;接続時間 [c06.cas]
        RPUSH               ;汎用レジスタの退避
        LAD    GR3,3        ; [  a  ]
        LD     GR2,GR1
        ADDL   GR2,=2
LOOP1   SUBA   GR3,=1       ;指標レジスタを1減らす
        JMI    LABEL1       ;負ならLABEL1へ
        LD     GR0,0,GR2    ;時間を取り出す
        CPA    GR0,MAX,GR3  ;最大値と比較
        JPL    ERROR
        CPA    GR0,=0       ;最小値と比較
        JMI    ERROR
        LD     GR0,3,GR2
        CPA    GR0,MAX,GR3  ;最大値と比較
        JPL    ERROR
        CPA    GR0,=0       ; [  b  ]
        JMI    ERROR
        SUBL   GR2,=1       ;アドレスを減らす
        JUMP   LOOP1
ERROR   OUT    EMSG,LEN     ;エラーメッセージ
        JUMP   FIN          ;終了
LABEL1  LD     GR3,GR1
        ADDL   GR3,=3       ;指標レジスタの初期値
        LAD    GR4,3
LABEL2  LAD    GR0,0        ;接続時間の初期値
LOOP2   SUBL   GR3,=1
        SUBA   GR4,=1       ; [  c  ]
        JMI    FIN
        ADDA   GR0,3,GR3    ;終了時間を加算
        SUBA   GR0,0,GR3    ;開始時間を減算
        ST     GR0,6,GR3    ; [  d  ]
        JPL    LABEL2
        ADDA   GR0,MAX,GR4  ;負の場合の処理
        ST     GR0,6,GR3    ;接続時間を格納
        LAD    GR0,-1
        JUMP   LOOP2        ;LOOP2へ
FIN     RPOP                ;汎用レジスタの復元
        RET
EMSG    DC     'ERROR'
LEN     DC     5
MAX     DC     24,60,60
        END