From: j8takagi Date: Mon, 3 Jan 2011 14:28:39 +0000 (+0900) Subject: CASL2LIBで、固定小数点表示のプログラムを中心に修正 X-Git-Tag: v0.1p15~2 X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=commitdiff_plain;h=63d02a76014f85f18c2b095b9a8e0d5724f91338 CASL2LIBで、固定小数点表示のプログラムを中心に修正 --- diff --git a/as/casl2lib/mull.casl b/as/casl2lib/mull.casl index 7de759b..f40c0f6 100644 --- a/as/casl2lib/mull.casl +++ b/as/casl2lib/mull.casl @@ -1,31 +1,42 @@ ;;; 0〜65535の範囲にある正数のかけ算(筆算方式)を行う ;;; 入力 GR1:被乗数 GR2:乗数 -;;; 出力 GR0:積 -;;; 積が65535より大きい場合は、GR0は積の下位16ビットになり、オーバーフロー +;;; 出力 GR0:積の下位WORD GR3:積の上位WORD +;;; 積が65535より大きい場合は、オーバーフロー MULL START - PUSH 0,GR1 - PUSH 0,GR3 + PUSH 0,GR4 + PUSH 0,GR5 XOR GR0,GR0 ; 積 + XOR GR3,GR3 ; 上位word + XOR GR5,GR5 ; 上位wordの一時値 AND GR1,GR1 ; (GR1 = 0)の場合、終了 - JZE FIN ; ↓ + JZE CHKOV ; ↓ AND GR2,GR2 ; (GR2 = 0)の場合、終了 - JZE FIN ; ↓ - LAD GR3,1 ; 対象ビット -LOOP PUSH 0,GR3 ; ループ先頭。GR2のビット中でGR3が示すビットが0の場合、NEXTへジャンプ - AND GR3,GR2 ; ↓ - POP GR3 ; ↓ - JZE NEXT ; ↓ + JZE CHKOV ; ↓ + LAD GR4,1 ; 対象ビット +LOOP PUSH 0,GR4 ; ループ先頭。GR2のビット中でGR4が示すビットが0の場合、NEXTへジャンプ + AND GR4,GR2 ; ↓ + POP GR4 ; ↓ + JZE NEXT1 ; ↓ + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 ADDL GR0,GR1 ; GR0 <- GR0 + GR1 - JOV FIN ; GR0がオーバーフローした場合、ループ脱出 -NEXT SLL GR3,1 ; GR3を1回左シフト - AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出 - JZE FIN ; ↓ - CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出 - JPL FIN ; ↓ + JOV AHB1 ; GR0がオーバーフローした場合、AHB1へジャンプ + JUMP NEXT1 ; ↓ +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4を1回左シフト + JOV CHKOV ; ↓ + SLL GR5,1 ; GR5を1回左シフト + CPL GR4,GR2 ; (GR4 > GR2)の場合、CHKOVへジャンプ + JPL CHKOV ; ↓ SLL GR1,1 ; GR1を1回左シフト - JOV FIN ; GR1がオーバーフローした場合、ループ脱出 - JUMP LOOP ; ループ終端 -FIN POP GR3 - POP GR1 + JOV AHB2 ; GR1がオーバーフローした場合、AHBへジャンプ + JUMP NEXT2 ; ↓ +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ループ終端 +CHKOV AND GR3,GR3 ; GR3 = 0の場合、終了 + JZE FIN ; ↓ + LAD GR4,#FFFF ; GR3 <> 0の場合、オーバーフロー + SLL GR4,1 ; ↓ +FIN POP GR5 + POP GR4 RET END diff --git a/as/casl2lib/mull_temp.casl b/as/casl2lib/mull_temp.casl deleted file mode 100644 index 951d6be..0000000 --- a/as/casl2lib/mull_temp.casl +++ /dev/null @@ -1,35 +0,0 @@ -;;; 0〜65535の範囲にある正数のかけ算(筆算方式)を行う -;;; 入力 GR1:被乗数 GR2:乗数 -;;; 出力 GR0:積 GR3:オーバーフロー値 -;;; 積が65535より大きい場合は、GR0は積の下位16ビットになり、オーバーフロー -MULL START - PUSH 0,GR1 ; 被乗数 - PUSH 0,GR2 ; 乗数 - PUSH 0,GR4 ; ビット位置を表す - XOR GR0,GR0 ; 積 - XOR GR3,GR3 ; オーバーフロー値 - AND GR1,GR1 ; (GR1 = 0)の場合、終了 - JZE FIN ; ↓ - AND GR2,GR2 ; (GR2 = 0)の場合、終了 - JZE FIN ; ↓ - LAD GR4,1 ; 対象ビット -LOOP PUSH 0,GR4 ; ループ先頭。GR2のビット中でGR4が示すビットが0の場合、NEXTへジャンプ - AND GR4,GR2 ; ↓ - POP GR4 ; ↓ - JZE NEXT ; ↓ - LD GR3,GR1 ; GR3 <- GR1 - ADDL GR0,GR1 ; GR0 <- GR0 + GR1 - JOV FIN ; GR0がオーバーフローした場合、ループ脱出 -NEXT SLL GR4,1 ; GR4を1回左シフト - AND GR4,GR4 ; (GR4 = 0)の場合、ループ脱出 - JZE FIN ; ↓ - CPL GR4,GR2 ; (GR4 > GR2)の場合、ループ脱出 - JPL FIN ; ↓ - SLL GR1,1 ; GR1を1回左シフト - JOV FIN ; GR1がオーバーフローした場合、ループ脱出 - JUMP LOOP ; ループ終端 -FIN POP GR4 - POP GR2 - POP GR1 - RET - END diff --git a/as/casl2lib/outa_q15.casl b/as/casl2lib/outa_q15.casl new file mode 100644 index 0000000..7c0e01c --- /dev/null +++ b/as/casl2lib/outa_q15.casl @@ -0,0 +1,46 @@ +;; GR1に格納された値を、10進数の符号付き小数値として表示 +OUTAQ15 START + RPUSH + LAD GR2,10 ; GR2に10進数の「10」を格納 + XOR GR4,GR4 ; 整数値の長さ + XOR GR3,GR3 ; 出力する文字を一時的に格納 + AND GR1,GR1 ; GR1の符号をチェック + JPL STDN ; ↓ GR1が正数の場合、STDNにジャンプ + LD GR3,='-' ; ↓ GR1が負数の場合、「-」をSTR領域に格納 + ST GR3,STR ; ↓ ↓ + LAD GR4,1,GR4 ; ↓ ↓ GR4 <- GR4 + 1 + CPA GR1,=#8000 ; (GR1 = #8000)の場合、MINONEへジャンプ + JZE MINONE ; ↓ + CALL ABS ; GR1を正数に変換 +STDN LD GR3,='0' ; 「0」をSTR領域に格納 + ST GR3,STR,GR4 ; ↓ + AND GR1,GR1 ; GR1が0の場合、PRTへジャンプ + JZE PRT ; ↓ + LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 + LD GR3,='.' ; 「.」をSTR領域に格納 + ST GR3,STR,GR4 ; ↓ + LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 + SLL GR1,1 ; GR1を1回左シフト +;; GR1の内容を小数値と見なし、10進数の文字列に変換してSTRに格納 +TODIG AND GR1,GR1 ; GR1が0の場合は、ループを脱出 + JZE PRT ; ↓ + CALL MULL ; GR1とGR2の、積をGR1、オーバーフロー値をGR3に格納 + LD GR1,GR0 ; GR0をGR1にコピー + ADDA GR3,='0' ; GR1を文字に変換 + ST GR3,STR,GR4 ; (STR + GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP TODIG ; ループ +;; GR1 = -1の場合 +MINONE LD GR1,='1' ; GR1が#8000の場合、-1を出力 + ST GR1,STR,GR4 ; (STR + GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP PRT ; ↓ +;; 値を出力 +PRT ST GR4,LEN ; LEN <- GR4 + OUT STR,LEN ; ↓ + RPOP + RET +STR DS 20 +LEN DS 1 + END + 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 diff --git a/as/casl2lib/outd_q15_.casl b/as/casl2lib/outd_q15_.casl deleted file mode 100644 index cf62af3..0000000 --- a/as/casl2lib/outd_q15_.casl +++ /dev/null @@ -1,55 +0,0 @@ -;; GR1に格納された値を、10進数の小数値として表示 -OUTD START - RPUSH - XOR GR0,GR0 ; 負数フラグ。GR1が負数の場合、GR0は1 - LAD GR2,10 ; GR2に10進数の「10」を格納 - XOR GR4,GR4 ; インデックス - AND GR1,GR1 ; GR1が0の場合 - JZE ZPRT ; ↓ -STDN LD GR0,='0' ; 「0」をSTR領域に格納 - ST GR0,STR,GR4 ; ↓ - LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 - LD GR0,='.' ; 「.」をSTR領域に格納 - ST GR0,STR,GR4 ; ↓ - LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 -;; GR1の内容を小数値と見なし、10進数の文字列に変換してSTRに格納 -TODIG AND GR1,GR1 ; GR1が0の場合は、ループを脱出 - JZE PRT ; ↓ - CALL MULL ; GR1とGR2の、積をGR0、オーバーフロー値をGR3に格納 - ADDA GR3,='0' ; GR0を文字に変換 - ST GR3,STR,GR4 ; (STR + GR4) <- GR0 - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 - LD GR1,GR0 ; GR0をGR1にコピー - JUMP TODIG ; ループ -ZPRT LD GR0,='0' ; 「0」をSTR領域に格納 - ST GR0,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とGR2の、積をGR0、オーバーフロー値をGR3に格納 -MULL START - PUSH 0,GR1 - PUSH 0,GR2 - PUSH 0,GR4 - XOR GR0,GR0 - XOR GR3,GR3 ; オーバーフロー値 - LAD GR4,1 ; インデックス -LOOP CPA GR4,GR2 ; GR4がGR2の値になったら、ループ脱出 - JZE FIN ; ↓ - ADDA GR0,GR1 ; GR0 <- GR0 + GR1 - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 - JOV OVADD ; オーバーフローした場合、OVADDへジャンプ - JUMP LOOP ; ループにジャンプ -OVADD LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - AND GR1,=#7FFF ; GR1の最上位ビットをクリア - JUMP LOOP ; ループにジャンプ -FIN POP GR4 - POP GR2 - POP GR1 - RET - END diff --git a/as/casl2lib/outl_q15.casl b/as/casl2lib/outl_q15.casl new file mode 100644 index 0000000..2ae4b25 --- /dev/null +++ b/as/casl2lib/outl_q15.casl @@ -0,0 +1,29 @@ +;; GR1に格納された値を、10進数の符号なし小数値として表示 +OUTLQ15 START + RPUSH + LAD GR2,10 ; GR2に10進数の「10」を格納 + XOR GR4,GR4 ; 整数値の長さ +STDN LD GR3,='0' ; 「0」をSTR領域に格納 + ST GR3,STR,GR4 ; ↓ + AND GR1,GR1 ; GR1が0の場合、PRTへジャンプ + JZE PRT ; ↓ + LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 + LD GR3,='.' ; 「.」をSTR領域に格納 + ST GR3,STR,GR4 ; ↓ + LAD GR4,1,GR4 ; ↓ GR4 <- GR4 + 1 +;; GR1の内容を小数値と見なし、10進数の文字列に変換してSTRに格納 +TODIG AND GR1,GR1 ; GR1が0の場合は、ループを脱出 + JZE PRT ; ↓ + CALL MULL ; GR1とGR2の、積をGR0、オーバーフロー値をGR3に格納 + LD GR1,GR0 ; GR0をGR1にコピー + ADDA GR3,='0' ; GR3を文字に変換 + ST GR3,STR,GR4 ; (STR + GR3) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP TODIG ; ループ +PRT ST GR4,LEN ; LEN <- GR4 + OUT STR,LEN ; 文字列を出力 + RPOP + RET +STR DS 20 +LEN DS 1 + END diff --git a/as/casl2lib/str2l.casl b/as/casl2lib/str2l.casl index a358c3e..1394131 100644 --- a/as/casl2lib/str2l.casl +++ b/as/casl2lib/str2l.casl @@ -6,8 +6,8 @@ ;;; 文字列が最大長より大きい場合や数値以外の場合は、GR0は#FFFF、OFは1 ;;; 依存プログラム: MULL STR2L START - PUSH 0,GR3 PUSH 0,GR4 + PUSH 0,GR5 XOR GR0,GR0 ; GR0:初期化 AND GR2,GR2 ; (GR2 = 0)の場合、FINへジャンプ JZE FIN ; ↓ @@ -16,43 +16,43 @@ STR2L START ST GR1,STR ; STR <- GR1 文字列の開始アドレス ST GR2,LEN ; LEN <- GR2 LAD GR2,10 ; GR2:10進数の「10」 - XOR GR3,GR3 ; GR3:値の一時格納 - XOR GR4,GR4 ; GR4:インデックス -STOL CPL GR4,LEN ; ループ先頭。(GR4 = LEN)の場合、ループ脱出 + XOR GR4,GR4 ; GR4:値の一時格納 + XOR GR5,GR5 ; GR5:インデックス +STOL CPL GR5,LEN ; ループ先頭。(GR5 = LEN)の場合、ループ脱出 JZE CP ; ↓ LD GR1,STR ; GR1に、入力文字列中の次の桁を格納 - ADDL GR1,GR4 ; ↓ + ADDL GR1,GR5 ; ↓ LD GR1,0,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 <- LEN - NLEN - 1 - LD GR4,LEN ; ↓ - SUBA GR4,NLEN ; ↓ -MUL10 CPA GR4,=1 ; ループ先頭。GR1 <- 10 ** GR4 - JZE NEXT ; (GR4 = 1)の場合、ループ脱出 + ST GR5,NLEN ; GR5 <- LEN - NLEN - 1 + LD GR5,LEN ; ↓ + SUBA GR5,NLEN ; ↓ +MUL10 CPA GR5,=1 ; ループ先頭。GR1 <- 10 ** GR5 + JZE NEXT ; (GR5 = 1)の場合、ループ脱出 JMI NEXT ; ↓ CALL MULL ; MULLを呼び出し、GR0 <- GR1 * GR2 JOV FIN ; ↓ オーバーフロー時は、プログラム終端へジャンプ LD GR1,GR0 ; GR1 <- GR0 - LAD GR4,-1,GR4 ; GR4 <- GR4 -1 + LAD GR5,-1,GR5 ; GR5 <- GR5 -1 JUMP MUL10 ; ループ終端へジャンプ -NEXT LD GR4,NLEN ; GR4 <- NLEN。復元 - ADDL GR3,GR1 ; GR3 <- GR3 + GR1 +NEXT LD GR5,NLEN ; GR5 <- NLEN。復元 + ADDL GR4,GR1 ; GR4 <- GR4 + GR1 JOV FIN ; ↓ - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + LAD GR5,1,GR5 ; GR5 <- GR5 + 1 JUMP STOL ; ループ終端 NAN LAD GR2,#FFFF ; GR2 <- #FFFF JUMP FIN ; FINへジャンプ -CP LD GR1,GR3 ; GR0 <- GR3 +CP LD GR1,GR4 ; GR0 <- GR4 LD GR0,LEN ; GR0 <- LEN JUMP FIN ; プログラム終端へジャンプ LENOV LAD GR0,#FFFF ; 文字列が最大長より大きい場合、GR0 <- #FFFF SRA GR0,1 ; ↓ オーバーフロー発生 -FIN POP GR4 - POP GR3 +FIN POP GR5 + POP GR4 RET ZERO DC '0' NINE DC '9' diff --git a/test/system/casl2/lib_mull/0.txt b/test/system/casl2/lib_mull/0.txt index 145c1c4..5e21666 100644 --- a/test/system/casl2/lib_mull/0.txt +++ b/test/system/casl2/lib_mull/0.txt @@ -54,37 +54,47 @@ 2 2 -------------------- -1 -127 +2 127 +254 -------------------- -1 128 128 +16384 -------------------- -1 -255 +16384 255 +overflow +49152 +63 -------------------- -1 -256 +63 256 +16128 -------------------- -1 -257 +16128 257 +overflow +16128 +63 -------------------- -1 -32767 +63 32767 +overflow +32705 +31 -------------------- -1 +31 32768 +overflow 32768 +15 -------------------- -1 -65535 +15 65535 +overflow +65521 +14 -------------------- 2 0 @@ -98,37 +108,47 @@ 2 4 -------------------- -2 +4 127 -254 +508 -------------------- -2 -128 256 +128 +32768 -------------------- -2 +32768 255 -510 +overflow +32768 +127 -------------------- -2 +127 256 -512 +32512 -------------------- -2 +32512 257 -514 +overflow +32512 +127 -------------------- -2 +127 32767 -65534 +overflow +32641 +63 -------------------- -2 +63 +32768 +overflow 32768 -Warning: overflow +31 -------------------- -2 +31 65535 -Warning: overflow +overflow +65505 +30 -------------------- 127 0 @@ -142,37 +162,47 @@ Warning: overflow 2 254 -------------------- +254 127 -127 -16129 +32258 -------------------- -127 -128 16256 +128 +overflow +49152 +31 -------------------- -127 +31 255 -32385 +7905 -------------------- -127 +3968 256 -32512 +overflow +32768 +15 -------------------- -127 +15 257 -32639 +3855 -------------------- -127 +3840 32767 -Warning: overflow +overflow +61696 +1919 -------------------- -127 +1919 32768 -Warning: overflow +overflow +32768 +959 -------------------- -127 +959 65535 -Warning: overflow +overflow +64577 +958 -------------------- 128 0 @@ -186,37 +216,47 @@ Warning: overflow 2 256 -------------------- -128 +256 127 -16256 +32512 -------------------- -128 -128 16384 --------------------- 128 +overflow +0 +32 +-------------------- +32 255 -32640 +8160 -------------------- -128 +4096 256 -32768 +overflow +0 +16 -------------------- -128 +16 257 -32896 +4112 -------------------- -128 +4096 32767 -Warning: overflow +overflow +61440 +2047 -------------------- -128 +2047 32768 -Warning: overflow +overflow +32768 +1023 -------------------- -128 +1023 65535 -Warning: overflow +overflow +64513 +1022 -------------------- 255 0 @@ -230,37 +270,47 @@ Warning: overflow 2 510 -------------------- -255 +510 127 -32385 +64770 -------------------- -255 -128 32640 +128 +overflow +49152 +63 -------------------- +63 255 -255 -65025 +16065 -------------------- -255 +8064 256 -65280 +overflow +32768 +31 -------------------- -255 +31 257 -65535 +7967 -------------------- -255 +7936 32767 -Warning: overflow +overflow +57600 +3967 -------------------- -255 +3967 +32768 +overflow 32768 -Warning: overflow +1983 -------------------- -255 +1983 65535 -Warning: overflow +overflow +63553 +1982 -------------------- 256 0 @@ -274,37 +324,47 @@ Warning: overflow 2 512 -------------------- -256 +512 127 -32512 +65024 -------------------- -256 -128 32768 +128 +overflow +0 +64 -------------------- -256 +64 255 -65280 +16320 -------------------- +8192 256 -256 -Warning: overflow +overflow +0 +32 -------------------- -256 +32 257 -Warning: overflow +8224 -------------------- -256 +8192 32767 -Warning: overflow +overflow +57344 +4095 -------------------- -256 +4095 +32768 +overflow 32768 -Warning: overflow +2047 -------------------- -256 +2047 65535 -Warning: overflow +overflow +63489 +2046 -------------------- 257 0 @@ -318,37 +378,47 @@ Warning: overflow 2 514 -------------------- -257 +514 127 -32639 +65278 -------------------- -257 -128 32896 +128 +overflow +16384 +64 -------------------- -257 +64 255 -65535 +16320 -------------------- -257 +8192 256 -Warning: overflow +overflow +0 +32 -------------------- +32 257 -257 -Warning: overflow +8224 -------------------- -257 +8192 32767 -Warning: overflow +overflow +57344 +4095 -------------------- -257 +4095 32768 -Warning: overflow +overflow +32768 +2047 -------------------- -257 +2047 65535 -Warning: overflow +overflow +63489 +2046 -------------------- 32767 0 @@ -362,37 +432,49 @@ Warning: overflow 2 65534 -------------------- -32767 +65534 127 -Warning: overflow +overflow +65282 +126 -------------------- -32767 +126 128 -Warning: overflow +16128 -------------------- -32767 +16128 255 -Warning: overflow +overflow +49408 +62 -------------------- -32767 +62 256 -Warning: overflow +15872 -------------------- -32767 +15872 257 -Warning: overflow +overflow +15872 +62 -------------------- +62 32767 -32767 -Warning: overflow +overflow +65474 +30 -------------------- -32767 +30 32768 -Warning: overflow +overflow +0 +15 -------------------- -32767 +15 65535 -Warning: overflow +overflow +65521 +14 -------------------- 32768 0 @@ -404,39 +486,51 @@ Warning: overflow -------------------- 32768 2 -Warning: overflow +overflow +0 +1 -------------------- -32768 +1 +127 127 -Warning: overflow -------------------- -32768 +64 128 -Warning: overflow +8192 -------------------- -32768 +8192 255 -Warning: overflow +overflow +57344 +31 -------------------- -32768 +31 256 -Warning: overflow +7936 -------------------- -32768 +7936 257 -Warning: overflow +overflow +7936 +31 -------------------- -32768 +31 32767 -Warning: overflow +overflow +32737 +15 -------------------- +15 32768 +overflow 32768 -Warning: overflow +7 -------------------- -32768 +7 65535 -Warning: overflow +overflow +65529 +6 -------------------- 65535 0 @@ -448,37 +542,49 @@ Warning: overflow -------------------- 65535 2 -Warning: overflow +overflow +65534 +1 -------------------- -65535 +1 +127 127 -Warning: overflow -------------------- -65535 +64 128 -Warning: overflow +8192 -------------------- -65535 +8192 255 -Warning: overflow +overflow +57344 +31 -------------------- -65535 +31 256 -Warning: overflow +7936 -------------------- -65535 +7936 257 -Warning: overflow +overflow +7936 +31 -------------------- -65535 +31 32767 -Warning: overflow +overflow +32737 +15 -------------------- -65535 +15 32768 -Warning: overflow +overflow +32768 +7 -------------------- +7 65535 -65535 -Warning: overflow +overflow +65529 +6 -------------------- diff --git a/test/system/casl2/lib_mull/mull.casl b/test/system/casl2/lib_mull/mull.casl index b7d6997..6085ce1 100644 --- a/test/system/casl2/lib_mull/mull.casl +++ b/test/system/casl2/lib_mull/mull.casl @@ -1,12 +1,12 @@ MAIN START - LAD GR3,0 ; Xのインデックス -LOOPX CPA GR3,XCNT ; (GR3 = XCNT)の場合、ループ脱出 + LAD GR4,0 ; Xのインデックス +LOOPX CPA GR4,XCNT ; (GR4 = XCNT)の場合、ループ脱出 JZE FIN ; ↓ - LD GR1,X,GR3 ; GR1に、(X+GR3)番地の値を転送 - LAD GR4,0 ; Yのインデックス -LOOPY CPA GR4,YCNT ; (GR4 = YCNT)の場合、ループ脱出 + LD GR1,X,GR4 ; GR1に、(X+GR4)番地の値を転送 + LAD GR5,0 ; Yのインデックス +LOOPY CPA GR5,YCNT ; (GR5 = YCNT)の場合、ループ脱出 JZE XNEXT ; ↓ - LD GR2,Y,GR4 ; GR2に、(X+GR4)番地の値を転送 + LD GR2,Y,GR5 ; GR2に、(X+GR5)番地の値を転送 CALL OUTL ; GR1の数値を出力 PUSH 0,GR1 ; GR2の数値を出力 LD GR1,GR2 ; ↓ @@ -19,11 +19,19 @@ LOOPY CPA GR4,YCNT ; (GR4 = YCNT)の場合、ループ脱出 CALL OUTL ; ↓ POP GR1 ; ↓ YNEXT OUT SEP,SLEN ; 区切り線を出力 - LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + LAD GR5,1,GR5 ; GR5 <- GR5 + 1 JUMP LOOPY ; LOOPYへジャンプ WOV OUT YOMSG,YLEN ; オーバーフローした場合のメッセージを表示 + PUSH 0,GR1 ; GR0の数値を出力 + LD GR1,GR0 ; ↓ + CALL OUTL ; ↓ + POP GR1 ; ↓ + PUSH 0,GR1 ; GR3の数値を出力 + LD GR1,GR3 ; ↓ + CALL OUTL ; ↓ + POP GR3 ; ↓ JUMP YNEXT ; YNEXTへジャンプ -XNEXT LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +XNEXT LAD GR4,1,GR4 ; GR4 <- GR4 + 1 JUMP LOOPX ; LOOPXへジャンプ FIN RET X DC 0,1,2,127,128,255,256,257,32767,#8000,#FFFF @@ -32,6 +40,6 @@ XCNT DC 11 YCNT DC 11 SEP DC '--------------------' SLEN DC 20 -YOMSG DC 'Warning: overflow' -YLEN DC 17 +YOMSG DC 'overflow' +YLEN DC 8 END diff --git a/test/system/casl2/lib_outd_q15/0.txt b/test/system/casl2/lib_outa_q15/0.txt similarity index 100% rename from test/system/casl2/lib_outd_q15/0.txt rename to test/system/casl2/lib_outa_q15/0.txt diff --git a/test/system/casl2/lib_outd_q15/Makefile b/test/system/casl2/lib_outa_q15/Makefile similarity index 100% rename from test/system/casl2/lib_outd_q15/Makefile rename to test/system/casl2/lib_outa_q15/Makefile diff --git a/test/system/casl2/lib_outa_q15/cmd b/test/system/casl2/lib_outa_q15/cmd new file mode 100755 index 0000000..d2b6a5b --- /dev/null +++ b/test/system/casl2/lib_outa_q15/cmd @@ -0,0 +1 @@ +../../../../casl2 outa_q15.casl ../../../../as/casl2lib/outa_q15.casl ../../../../as/casl2lib/mull.casl ../../../../as/casl2lib/abs.casl diff --git a/test/system/casl2/lib_outd_q15/outd_q15.casl b/test/system/casl2/lib_outa_q15/outa_q15.casl similarity index 96% rename from test/system/casl2/lib_outd_q15/outd_q15.casl rename to test/system/casl2/lib_outa_q15/outa_q15.casl index fc2ef1a..1ea1f12 100644 --- a/test/system/casl2/lib_outd_q15/outd_q15.casl +++ b/test/system/casl2/lib_outa_q15/outa_q15.casl @@ -2,7 +2,7 @@ MAIN START LAD GR2,0 LOOP LD GR1,VAL,GR2 - CALL OUTD + CALL OUTAQ15 LAD GR2,1,GR2 CPA GR2,CNT JZE FIN diff --git a/test/system/casl2/lib_outd_q15/cmd b/test/system/casl2/lib_outd_q15/cmd deleted file mode 100755 index 8c90cf3..0000000 --- a/test/system/casl2/lib_outd_q15/cmd +++ /dev/null @@ -1 +0,0 @@ -../../../../casl2 outd_q15.casl ../../../../as/casl2lib/outd_q15.casl diff --git a/test/system/casl2/lib_outl_q15/0.txt b/test/system/casl2/lib_outl_q15/0.txt new file mode 100644 index 0000000..464db4b --- /dev/null +++ b/test/system/casl2/lib_outl_q15/0.txt @@ -0,0 +1,33 @@ +0.0000152587890625 +0.000030517578125 +0.00006103515625 +0.0001220703125 +0.000244140625 +0.00048828125 +0.0009765625 +0.001953125 +0.00390625 +0.0078125 +0.015625 +0.03125 +0.0625 +0.125 +0.25 +0.4999847412109375 +0.5 +0.5000152587890625 +0.75 +0.875 +0.9375 +0.96875 +0.984375 +0.9921875 +0.99609375 +0.998046875 +0.9990234375 +0.99951171875 +0.999755859375 +0.9998779296875 +0.99993896484375 +0.999969482421875 +0.9999847412109375 diff --git a/test/system/casl2/lib_outl_q15/Makefile b/test/system/casl2/lib_outl_q15/Makefile new file mode 100644 index 0000000..e38b63c --- /dev/null +++ b/test/system/casl2/lib_outl_q15/Makefile @@ -0,0 +1,3 @@ +include ../Define.mk +include ../Define_test.mk +include ../Test.mk diff --git a/test/system/casl2/lib_outl_q15/cmd b/test/system/casl2/lib_outl_q15/cmd new file mode 100755 index 0000000..b43bed6 --- /dev/null +++ b/test/system/casl2/lib_outl_q15/cmd @@ -0,0 +1 @@ +../../../../casl2 outl_q15.casl ../../../../as/casl2lib/outl_q15.casl ../../../../as/casl2lib/mull.casl diff --git a/test/system/casl2/lib_outl_q15/outl_q15.casl b/test/system/casl2/lib_outl_q15/outl_q15.casl new file mode 100644 index 0000000..dd06ee0 --- /dev/null +++ b/test/system/casl2/lib_outl_q15/outl_q15.casl @@ -0,0 +1,21 @@ +;; outd_q15.caslを呼び出し、33個の数値を表示する +MAIN START + LAD GR2,0 +LOOP LD GR1,VAL,GR2 + CALL OUTLQ15 + LAD GR2,1,GR2 + CPA GR2,CNT + JZE FIN + JUMP LOOP +FIN RET +VAL DC #0001,#0002,#0004,#0008 + DC #0010,#0020,#0040,#0080 + DC #0100,#0200,#0400,#0800 + DC #1000,#2000,#4000,#7FFF + DC #8000 + DC #8001,#C000,#E000,#F000 + DC #F800,#FC00,#FE00,#FF00 + DC #FF80,#FFC0,#FFE0,#FFF0 + DC #FFF8,#FFFC,#FFFE,#FFFF +CNT DC 33 + END