- XOR GR1,GR1 ; GR1:各桁の数値 初期化
- LAD GR2,10 ; GR2:10進数の「10」 初期化
- LAD GR3,0 ; GR3:値の一時格納 初期化
- LAD GR4,0 ; GR4:インデックス 初期化
-STOL CPL GR4,ILEN ; ループ先頭。(GR4 = ILEN)の場合、ループ脱出
+ LAD GR1,IBUF
+ LD GR2,ILEN
+ CPA GR2,LENMAX
+ JPL LENOV
+ CALL STR2L
+ JOV FIN
+ LD GR0,GR2
+ JUMP FIN
+LENOV LAD GR0,#FFFF
+ SRA GR0,1
+FIN RET
+ILEN DS 1
+LENMAX DC 5
+IBUF DS 5
+ END
+;;; 10進数の整数を表す文字列を数値に変換
+;;; 数値の範囲は、0から65535
+;;; 入力 GR1: 文字列を格納するアドレス
+;;; GR2: 文字列の長さ。最大5けた
+;;; 出力 GR0: 数値
+;;; 文字列が最大長より大きい場合や数値以外の場合は、GR0は#FFFF、OFは1
+;;; 依存プログラム: MULL
+STR2L START
+ PUSH 0,GR4
+ PUSH 0,GR5
+ XOR GR0,GR0 ; GR0:初期化
+ AND GR2,GR2 ; (GR2 = 0)の場合、FINへジャンプ
+ JZE FIN ; ↓
+ CPL GR2,MAXLEN ; (GR2 > MAXLEN)の場合、LENOVへジャンプ
+ JPL LENOV ; ↓
+ ST GR1,STR ; STR <- GR1 文字列の開始アドレス
+ ST GR2,LEN ; LEN <- GR2
+ LAD GR2,10 ; GR2:10進数の「10」
+ XOR GR4,GR4 ; GR4:値の一時格納
+ XOR GR5,GR5 ; GR5:インデックス
+STOL CPL GR5,LEN ; ループ先頭。(GR5 = LEN)の場合、ループ脱出