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