X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=as%2Fcasl2lib%2Fsrc_inl%2Finl_main.casl;fp=as%2Fcasl2lib%2Fsrc_inl%2Finl_main.casl;h=20237e417c4d298972b951506874eec48542e752;hb=c9a6eaa0b802459a7f62d15510c9676664b3a51d;hp=84a78e9dc91bc08e6a0f74c5911560d2f2e20248;hpb=e0de529cf2de73a298288fd294b24b964abdba34;p=YACASL2.git diff --git a/as/casl2lib/src_inl/inl_main.casl b/as/casl2lib/src_inl/inl_main.casl index 84a78e9..20237e4 100644 --- a/as/casl2lib/src_inl/inl_main.casl +++ b/as/casl2lib/src_inl/inl_main.casl @@ -1,54 +1,22 @@ ;;; 0〜65535の範囲にある整数の入力を受け付ける ;;; 入力 (SVC) -;;; 出力 GR1: 入力された数値 GR0: 文字の長さ。入力が数字以外の場合は、#FFFF +;;; 出力 GR1: 入力された数値 +;;; GR0: 文字列の長さ。入力が数字以外の場合は、#FFFF ;;; 65536以上の正数が入力された場合はエラー INL START - 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:値の一時格納 初期化 - LAD GR4,0 ; GR4:インデックス 初期化 -STOL CPL GR4,ILEN ; ループ先頭。(GR4 = ILEN)の場合、ループ脱出 - JZE CP ; ↓ - LD GR1,IBUF,GR4 ; GR1に、入力文字列中の次の桁を格納 - CPL GR1,ZERO ; (GR1 < '0')の場合、NANへジャンプ - JMI NAN ; ↓ - CPL GR1,NINE ; (GR1 > '9')の場合、NANへジャンプ - JPL NAN ; ↓ - SUBL GR1,ZERO ; GR1の文字を、対応する数値に変換 - ST GR4,NLEN ; GR4 <- ILEN - NLEN - 1 - LD GR4,ILEN ; ↓ - SUBA GR4,NLEN ; ↓ -MUL10 CPA GR4,=1 ; ループ先頭。GR1 <- 10 ** GR4 - JZE NEXT ; (GR4 = 1)の場合、ループ脱出 - JMI NEXT ; ↓ - CALL MULL ; MULLを呼び出し、GR0 <- GR1 * GR2 - JOV FIN ; ↓ - LD GR1,GR0 ; GR1 <- GR0 - LAD GR4,-1,GR4 ; GR4 <- GR4 -1 - JUMP MUL10 ; ループ終端 -NEXT LD GR4,NLEN ; GR4 <- NLEN。復元 - ADDL GR3,GR1 ; GR3 <- GR3 + GR1 - JOV FIN ; ↓ - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 - JUMP STOL ; ループ終端 -NAN LAD GR0,#FFFF ; GR0 <- #FFFF - JUMP FIN ; FINへジャンプ -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' -IBUF DS 5 + 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 -NLEN DS 1 +LENMAX DC 5 +IBUF DS 5 END -