-;;; 入力された数値をGR0に格納する
+;;; 数値の入力を受け付ける
+;;; 入力 (SVC)
+;;; 出力 GR1: 入力された数値 GR0: 文字の長さ
INL START
- RPUSH
+ PUSH 0,GR2
+ PUSH 0,GR3
+ PUSH 0,GR4
IN IBUF,ILEN ; 入力文字列を格納
+ LD GR0,ILEN ; ILEN = 0の場合、FINへジャンプ
+ JZE FIN ; ↓
XOR GR1,GR1 ; GR1:各桁の数値 初期化
LAD GR2,10 ; GR2:10進数の「10」 初期化
LAD GR3,0 ; GR3:値の一時格納 初期化
ADDL GR3,GR1 ; GR3 <- GR3 + GR1
LAD GR4,1,GR4 ; GR4 <- GR4 + 1
JUMP STOL ; ループ終端
-OV LAD GR0,1 ; GR0 <- 0。オーバーフローを強制的に発生させる
- ADDL GR0,=#FFFF ; ↓
+OV LAD GR0,#8000 ; GR0 <- 0。オーバーフローを強制的に発生させる
+ SLL GR0,1 ; ↓
JUMP FIN ; FINへジャンプ
-CP LD GR0,GR3 ; GR0 <- GR3
-FIN RPOP
+CP LD GR1,GR3 ; GR0 <- GR3
+ LD GR0,ILEN ; GR0 <- ILEN
+FIN POP GR4
+ POP GR3
+ POP GR2
RET
ZERO DC '0'
NINE DC '9'