MAIN START
LAD GR0,0 ;パリティビットのセット処理
LAD GR1,DATA
CALL PARITY ;副プログラムの呼び出し
RET
DATA DC 4,#1234,#7BCD,#4567
END
PARITY START ;ビットの状態 [c08.cas]
PUSH 0,GR4 ;汎用レジスタの退避
PUSH 0,GR3 ; 〃
PUSH 0,GR2 ; 〃
PUSH 0,GR1 ; 〃
LD GR2,0,GR1 ;ブロック長
LAD GR2,-1,GR2 ;ループカウント
LOOP1 LAD GR4,0 ;判定語の初期化
LAD GR1,1,GR1
LD GR3,0,GR1 ;データの取り出し
LOOP2 SLL GR3,1 ;論理左シフト
JZE CNTEND
JPL LOOP2
XOR GR4,=#8000 ;判定語のビットを反転 [ a ]
JUMP LOOP2
CNTEND LD GR0,GR0 ;GR0のチェック
JZE SET ;セット処理へ
XOR GR4,0,GR1 ;パリティビットの検査
JMI ERROR ; [ b ]
JUMP NEXTCH
SET OR GR4,0,GR1 ;パリティビットを付加
ST GR4,0,GR1 ;データの保存
NEXTCH SUBA GR2,=1 ;ループカウンタを1減らす
JPL LOOP1 ; [ c ]
LAD GR0,0 ;OK
POP GR1 ;汎用レジスタの復元
FIN POP GR2 ; 〃
POP GR3 ; 〃
POP GR4 ; 〃
RET
ERROR POP GR1
LD GR0,0,GR1 ; [ d ]
SUBL GR0,GR2 ;エラーの語番号
JUMP FIN
END