MAIN    START
        LAD    GR1,NUM      ;数字の先頭アドレス
        CALL   CHECKD       ;副プログラムの呼び出し
        ST     GR0,CK       ;検査文字の格納
        OUT    NUM,LEN      ;結果の出力
        RET
NUM     DC     '2131'
CK      DS     1
LEN     DC     5
        END
CHECKD  START               ;検査文字 [b08.cas]
        RPUSH               ;汎用レジスタの退避
        LAD    GR4,0        ;数値の合計
        LAD    GR6,0        ;ループカウンタ
LP      LD     GR3,0,GR1    ;1文字取り出す
        AND    GR3,=#000F   ;数値に変換
        LD     GR5,AD,GR6   ; [  a  ]
        JUMP   0,GR5
AD1     ADDA   GR4,GR3      ;GR4+GR3 → GR4
AD2     ADDA   GR4,GR3      ;GR4+GR3 → GR4
AD3     ADDA   GR4,GR3      ;GR4+GR3 → GR4
AD4     ADDA   GR4,GR3      ;GR4+GR3 → GR4 [  b  ]
        LAD    GR1,1,GR1    ;GR1+1 → GR1
        LAD    GR6,1,GR6    ;GR6+1 → GR6
        CPA    GR6,=4       ;終了判定
        JNZ    LP
LP2     SUBA   GR4,=11      ;11で割る
        JMI    NEXT
        JUMP   LP2          ;正の場合繰り返す
NEXT    ADDA   GR4,=11      ;11を加算
        LD     GR0,ABC,GR4  ;検査文字を求める [  c  ]
        RPOP                ;汎用レジスタの復元
        RET
AD      DC     AD1,AD2,AD3,AD4
ABC     DC     'ABCDEFGHIJK'
        END