X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2Fcasl2lib%2Foutd_q15.casl;fp=as%2Fcasl2lib%2Foutd_q15.casl;h=0000000000000000000000000000000000000000;hp=4728936d181eaa043e8524945833e1bddb4aa632;hb=63d02a76014f85f18c2b095b9a8e0d5724f91338;hpb=ec314f36eb46e257b85d361fb81c81cfd9b2d72c diff --git a/as/casl2lib/outd_q15.casl b/as/casl2lib/outd_q15.casl deleted file mode 100644 index 4728936..0000000 --- a/as/casl2lib/outd_q15.casl +++ /dev/null @@ -1,71 +0,0 @@ -;; GR1に格納された値を、10進数の小数値として表示 -OUTD START - RPUSH - LAD GR2,10 ; GR2に10進数の「10」を格納 - LAD GR0,0 ; 負数フラグ。GR1が負数の場合、GR0は1 - XOR GR4,GR4 ; 整数値の長さ - AND GR1,GR1 ; GR1が0の場合 - JZE ZPRT ; ↓ - JPL STDN ; GR1が正数の場合、STDNにジャンプ - LD GR5,='-' ; GR1が負数の場合、「-」をSTR領域に格納 - ST GR5,STR ; ↓ - LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 - CPA GR1,=#8000 ; GR1が#8000より大きい場合、MDNへジャンプ - JPL MDN ; ↓ - LD GR1,='1' ; GR1が#8000の場合、-1を出力 - ST GR1,STR,GR4 ; (STR + GR4) <- GR1 - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 - JUMP PRT ; ↓ -MDN CALL ABS ; GR1を正数に変換 -STDN LD GR5,='0' ; 「0」をSTR領域に格納 - ST GR5,STR,GR4 ; ↓ - LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 - LD GR5,='.' ; 「.」をSTR領域に格納 - ST GR5,STR,GR4 ; ↓ - LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 -;; GR1の内容を小数値と見なし、10進数の文字列に変換してSTRに格納 -TODIG AND GR1,GR1 ; GR1が0の場合は、ループを脱出 - JZE PRT ; ↓ - CALL MUL ; GR1とGR2の、積をGR1、オーバーフロー値をGR3に格納 - LD GR5,GR3 ; GR3をGR1にコピー - ADDA GR5,='0' ; GR1を文字に変換 - ST GR5,STR,GR4 ; (STR + GR4) <- GR1 - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 - JUMP TODIG ; ループ -ZPRT LD GR5,='0' ; 「0」をSTR領域に格納 - ST GR5,STR,GR4 ; (STR + GR4) <- GR1 - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 -PRT ST GR4,LEN ; LEN <- GR4 - OUT STR,LEN ; ↓ - RPOP - RET -STR DS 20 -LEN DS 1 - END -;; GR1の値を10倍にし、GR3にオーバーフロー値を格納 -MUL START - PUSH 0,GR5 - PUSH 0,GR6 - LAD GR3,0 ; GR3は、オーバーフロー値を格納 - LAD GR5,1 ; GR5は、インデックス - LD GR6,GR1 ; GR6は、GR4の元の値を保持 -MLOOP CPA GR5,=10 ; GR5が10になったらループ脱出 - JZE MFIN ; ↓ - ADDA GR1,GR6 ; GR4 <- GR4 + GR6 - LAD GR5,1,GR5 ; GR5 <- GR5 + 1 - JOV MADD ; オーバーフローした場合、MADDへジャンプ - JUMP MLOOP ; ループ -MADD LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - AND GR1,=#7FFF ; GR4の最上位ビットをクリア - JUMP MLOOP ; ループ -MFIN POP GR6 - POP GR5 - RET - END -;; GR1の値を絶対値に変換する。GR1には0未満の数値が格納されていると想定。 -;; 例: -10 => 10, -20 => 20 -ABS START - XOR GR1,=#FFFF ; GR1の値を反転 - LAD GR1,1,GR1 ; GR1 <- GR1 + 1 - RET - END