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