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