ADDPM START
LD GR1,=#5298 ;aの値
LD GR2,=#4853 ;bの値
CALL ADDP ;副プログラムの呼び出し
RET
END
ADDP START ;BCDコード [c04.cas]
ST GR1,A
ST GR2,B
PUSH 0,GR3
LAD GR3,0 ;結果の領域の初期化
ST GR3,RES
LOOP AND GR1,=#000F ;整数aから4ビットを抽出
AND GR2,=#000F ;整数bから4ビットを抽出
ADDA GR1,GR2 ;4ビットの加算 [ a ]
LAD GR0,0
CPA GR1,=10 ;結果≧10?
JMI NOTOVR ;NO
SUBA GR1,=10 ;結果から10減算
LAD GR0,1 ;けた上げの設定
NOTOVR SLL GR1,0,GR3 ;加算結果を元の位置へ
OR GR1,RES ;中間結果に併合
LAD GR3,4,GR3
CPA GR3,=16 ;全けた終了?
JZE FIN ;YES
ST GR1,RES ;中間結果を格納 [ b ]
LD GR1,A ;aの次の4ビットを右端
SRL GR1,0,GR3 ; 〃
LD GR2,B ;bの次の4ビットを右端
SRL GR2,0,GR3 ; 〃
ADDA GR1,GR0 ;けた上げ分を加算
JUMP LOOP
FIN POP GR3
LD GR2,B
RET
A DS 1
B DS 1
RES DS 1
END