REI5B START
LAD GR0,0 ;各桁を加算するレジスタ
LAD GR1,0 ;重みを入れるインデックス
IN BUFF,LEN ;文字の入力
LD GR2,LEN ;桁数を読み込む
LAD GR2,-1,GR2 ;制御変数をデクリメント
CPA GR2,=0 ; 0と比較
JZE SAIGO ;入力した文字が1桁のとき
YOMU LD GR3,BUFF,GR2 ;文字の読み込み
AND GR3,=#000F ;マスク処理(数値データへ)
LD GR4,WK,GR1 ;桁の重み
CALL MULTI ;乗算処理
ADDA GR0,GR4 ;各桁を累算する
LAD GR1,1,GR1 ;インクリメント
LAD GR2,-1,GR2 ;制御変数のデクリメント
SLA GR2,0 ; フラグのセット
JNZ YOMU ; GR2でないときは繰り返し
SAIGO LD GR3,BUFF ;先頭の桁の処理
CPA GR3,='-' ;先頭の桁がマイナスか判断
JZE MINUS ;マイナスのときは分岐
AND GR3,=#000F ;プラスのときはマスク処理
LD GR4,WK,GR1 ;重みの読み込み
CALL MULTI ;乗算処理
ADDA GR0,GR4 ;各桁を累算する
JUMP OWARI ;処理終了
MINUS XOR GR0,=#FFFF ;マイナスのときの処理
ADDA GR0,=1 ; 1の補数にして1加算
OWARI RET
BUFF DS 10 ;文字データ格納場所
LEN DS 1
WK DC 1,10,100,1000,10000
END