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