MAIN START
LAD GR1,CHECK
LAD GR0,DATA
CALL MARKCK ;副プログラムの呼び出し
RET
CHECK DS 2
DATA DC #0002,#0003,#0009,#0000
END
MARKCK START ;マークカード [b07.cas]
RPUSH ;汎用レジスタの退避
LAD GR2,0 ;ノーマークの数
LAD GR3,0 ;ダブルマークの数
LAD GR4,1 ;個数(40)まで [ a ]
LD GR5,GR0
NEXT LAD GR7,0 ;マークの数
LD GR6,0,GR5
SHIFT SRL GR6,1 ;1ビット右シフト
JOV BIT ;オーバーフローのチェック
JZE ZERO ;ゼロの場合
JUMP SHIFT
BIT LAD GR7,1,GR7 ;GR7を1加算
CPA GR7,=2 ;ダブルマークか? [ b ]
JNZ SHIFT
LAD GR3,1,GR3 ;ダブルマークの数
LB1 LAD GR4,1,GR4 ;カウントアップ
CPA GR4,=4 ;40桁?(4桁に変更)
JPL FIN
LAD GR5,1,GR5 ;次のマーク位置 [ c ]
JUMP NEXT
ZERO CPA GR7,=0
JNZ LB1
LAD GR2,1,GR2 ;ノーマークの数を1加算
JUMP LB1
FIN ST GR2,0,GR1 ;ノーマークの数
ST GR3,1,GR1 ;ダブルマークの数
RPOP ;汎用レジスタの復元
RET
END