projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
masterをマージ
[YACASL2.git]
/
as
/
casl2lib
/
inl.casl
diff --git
a/as/casl2lib/inl.casl
b/as/casl2lib/inl.casl
index
aa9c6f8
..
0584e5f
100644
(file)
--- a/
as/casl2lib/inl.casl
+++ b/
as/casl2lib/inl.casl
@@
-1,7
+1,13
@@
-;;; 入力された数値をGR0に格納する
+;;; 数値の入力を受け付ける
+;;; 入力 (SVC)
+;;; 出力 GR1: 入力された数値 GR0: 文字の長さ
INL START
INL START
- RPUSH
+ PUSH 0,GR2
+ PUSH 0,GR3
+ PUSH 0,GR4
IN IBUF,ILEN ; 入力文字列を格納
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:値の一時格納 初期化
XOR GR1,GR1 ; GR1:各桁の数値 初期化
LAD GR2,10 ; GR2:10進数の「10」 初期化
LAD GR3,0 ; GR3:値の一時格納 初期化
@@
-28,11
+34,14
@@
NEXT LD GR4,NLEN ; GR4 <- NLEN。復元
ADDL GR3,GR1 ; GR3 <- GR3 + GR1
LAD GR4,1,GR4 ; GR4 <- GR4 + 1
JUMP STOL ; ループ終端
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へジャンプ
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'
RET
ZERO DC '0'
NINE DC '9'