X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=test%2Fintegration%2FCASL2%2Fminim_call%2F0.txt;fp=test%2Fintegration%2FCASL2%2Fminim_call%2F0.txt;h=0000000000000000000000000000000000000000;hb=350188e12a316928e5b2d8473f580528b2780d8b;hp=44b74e39bf52d166af2d14ee28504397fcf4849e;hpb=faec695d5b7ecf7dd3e4a07ac926ea93ca89020b;p=YACASL2.git diff --git a/test/integration/CASL2/minim_call/0.txt b/test/integration/CASL2/minim_call/0.txt deleted file mode 100644 index 44b74e3..0000000 --- a/test/integration/CASL2/minim_call/0.txt +++ /dev/null @@ -1,677 +0,0 @@ -../../../../casl2 -sla ../../../../as/FUNC/minim_call.casl ../../../../as/FUNC/minim.casl ../../../../as/FUNC/outa.casl - -Assemble ../../../../as/FUNC/minim_call.casl (0) -../../../../as/FUNC/minim_call.casl:1:;;; casl2 minim_call.casl minim.casl outa.casl -../../../../as/FUNC/minim_call.casl:2:MAIN START -../../../../as/FUNC/minim_call.casl:3: LAD GR1,DATA -../../../../as/FUNC/minim_call.casl:4: LD GR2,CNT -../../../../as/FUNC/minim_call.casl:5: CALL MINIM -../../../../as/FUNC/minim_call.casl:6: LD GR1,GR0 -../../../../as/FUNC/minim_call.casl:7: CALL OUTA -../../../../as/FUNC/minim_call.casl:8: RET -../../../../as/FUNC/minim_call.casl:9:DATA DC 23,78,2,45,67,-39,86 -../../../../as/FUNC/minim_call.casl:10:CNT DC 7 -../../../../as/FUNC/minim_call.casl:11: END - -Assemble ../../../../as/FUNC/minim.casl (0) -../../../../as/FUNC/minim.casl:1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する -../../../../as/FUNC/minim.casl:2:MINIM START -../../../../as/FUNC/minim.casl:3: LD GR0,0,GR1 -../../../../as/FUNC/minim.casl:4: ST GR0,MIN -../../../../as/FUNC/minim.casl:5: LAD GR3,0 -../../../../as/FUNC/minim.casl:6:S1 CPA GR3,GR2 -../../../../as/FUNC/minim.casl:7: JZE LRET -../../../../as/FUNC/minim.casl:8: LAD GR1,1,GR1 -../../../../as/FUNC/minim.casl:9: LD GR0,0,GR1 -../../../../as/FUNC/minim.casl:10: CPA GR0,MIN -../../../../as/FUNC/minim.casl:11: JPL S2 -../../../../as/FUNC/minim.casl:12: JZE S2 -../../../../as/FUNC/minim.casl:13: ST GR0,MIN -../../../../as/FUNC/minim.casl:14:S2 LAD GR3,1,GR3 -../../../../as/FUNC/minim.casl:15: JUMP S1 -../../../../as/FUNC/minim.casl:16:LRET LD GR0,MIN -../../../../as/FUNC/minim.casl:17: RET -../../../../as/FUNC/minim.casl:18:MIN DS 1 -../../../../as/FUNC/minim.casl:19: END - -Assemble ../../../../as/FUNC/outa.casl (0) -../../../../as/FUNC/outa.casl:1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示 -../../../../as/FUNC/outa.casl:2:OUTA START -../../../../as/FUNC/outa.casl:3: RPUSH -../../../../as/FUNC/outa.casl:4: LAD GR2,10 ; GR2に10進数の「10」を格納。 -../../../../as/FUNC/outa.casl:5: LAD GR0,0 ; GR0 <- 0 -../../../../as/FUNC/outa.casl:6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1 -../../../../as/FUNC/outa.casl:7: ST GR0,LEN ; LENの初期化 -../../../../as/FUNC/outa.casl:8: AND GR1,GR1 ; GR1をテスト -../../../../as/FUNC/outa.casl:9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ -../../../../as/FUNC/outa.casl:10: JPL STI ; GR1が正数の場合、STIにジャンプ -../../../../as/FUNC/outa.casl:11: LAD GR4,1 ; GR1が負数の場合、GR4をオン -../../../../as/FUNC/outa.casl:12: CALL OABS ; GR1を正数に変換 -../../../../as/FUNC/outa.casl:13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出 -../../../../as/FUNC/outa.casl:14: JMI STLST ; ↓ -../../../../as/FUNC/outa.casl:15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納 -../../../../as/FUNC/outa.casl:16: LD GR1,GR3 ; GR1にGR3をコピー -../../../../as/FUNC/outa.casl:17: LD GR1,NCHAR,GR1 ; GR1を文字に変換 -../../../../as/FUNC/outa.casl:18: CALL STSTR ; GR1をSTR領域に格納 -../../../../as/FUNC/outa.casl:19: LD GR1,GR0 ; GR0をGR1にコピー -../../../../as/FUNC/outa.casl:20: JUMP STI ; ループ終端 -../../../../as/FUNC/outa.casl:21:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換 -../../../../as/FUNC/outa.casl:22: CALL STSTR ; GR1をSTR領域に格納 -../../../../as/FUNC/outa.casl:23: AND GR4,GR4 ; 正数の場合 -../../../../as/FUNC/outa.casl:24: JZE PRT ; ↓ -../../../../as/FUNC/outa.casl:25: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納 -../../../../as/FUNC/outa.casl:26: CALL STSTR ; ↓ -../../../../as/FUNC/outa.casl:27: JUMP PRT ; PRTにジャンプ -../../../../as/FUNC/outa.casl:28:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納 -../../../../as/FUNC/outa.casl:29: CALL STSTR ; ↓ -../../../../as/FUNC/outa.casl:30:PRT LD GR2,LEN ; GR2にLENの値を格納 -../../../../as/FUNC/outa.casl:31: LAD GR1,STR ; GR1に文字列のアドレスを格納 -../../../../as/FUNC/outa.casl:32: CALL REV ; 文字列を逆順に並べ替え -../../../../as/FUNC/outa.casl:33: OUT STR,LEN ; 文字列を出力 -../../../../as/FUNC/outa.casl:34: RPOP -../../../../as/FUNC/outa.casl:35: RET -../../../../as/FUNC/outa.casl:36:STR DS 17 -../../../../as/FUNC/outa.casl:37:LEN DS 1 -../../../../as/FUNC/outa.casl:38:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' -../../../../as/FUNC/outa.casl:39: END -../../../../as/FUNC/outa.casl:40:;; GR1をSTR領域に格納し、LENをインクリメント -../../../../as/FUNC/outa.casl:41:STSTR START -../../../../as/FUNC/outa.casl:42: PUSH 0,GR1 -../../../../as/FUNC/outa.casl:43: PUSH 0,GR2 -../../../../as/FUNC/outa.casl:44: LD GR2,LEN ; GR2にLENの値をロード -../../../../as/FUNC/outa.casl:45: ST GR1,STR,GR2 ; STR+GR2 <- GR1 -../../../../as/FUNC/outa.casl:46: LAD GR2,1,GR2 ; GR2 <- GR2 + 1 -../../../../as/FUNC/outa.casl:47: ST GR2,LEN ; LENにGR2を格納 -../../../../as/FUNC/outa.casl:48: POP GR2 -../../../../as/FUNC/outa.casl:49: POP GR1 -../../../../as/FUNC/outa.casl:50: RET -../../../../as/FUNC/outa.casl:51: END -../../../../as/FUNC/outa.casl:52:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する -../../../../as/FUNC/outa.casl:53:;;; 0〜65535の範囲の数値を扱う -../../../../as/FUNC/outa.casl:54:ODIVL START -../../../../as/FUNC/outa.casl:55: PUSH 0,GR1 -../../../../as/FUNC/outa.casl:56: PUSH 0,GR2 -../../../../as/FUNC/outa.casl:57: PUSH 0,GR4 -../../../../as/FUNC/outa.casl:58: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ -../../../../as/FUNC/outa.casl:59: JZE ODFIN ; ↓ -../../../../as/FUNC/outa.casl:60: ST GR2,ODY ; ODYにGR2の初期値を保存 -../../../../as/FUNC/outa.casl:61: LAD GR0,0 ; GR0の初期化 -../../../../as/FUNC/outa.casl:62: LAD GR3,0 ; GR3の初期化 -../../../../as/FUNC/outa.casl:63: LAD GR4,1 ; GR4の初期化。対象ビットを表す -../../../../as/FUNC/outa.casl:64:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出 -../../../../as/FUNC/outa.casl:65: JPL ODLOOP ; ↓ -../../../../as/FUNC/outa.casl:66: SLL GR4,1 ; GR4を1回左シフト -../../../../as/FUNC/outa.casl:67: SLL GR2,1 ; GR2を1回左シフト -../../../../as/FUNC/outa.casl:68: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ -../../../../as/FUNC/outa.casl:69: JUMP ODSL ; ループ終端 -../../../../as/FUNC/outa.casl:70:ODYOV SRL GR2,1 -../../../../as/FUNC/outa.casl:71: LAD GR2,#8000,GR2 -../../../../as/FUNC/outa.casl:72: SRL GR4,1 -../../../../as/FUNC/outa.casl:73: JUMP ODLPIN -../../../../as/FUNC/outa.casl:74:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト -../../../../as/FUNC/outa.casl:75: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出 -../../../../as/FUNC/outa.casl:76: SRL GR2,1 ; GR2を1回右シフト -../../../../as/FUNC/outa.casl:77: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出 -../../../../as/FUNC/outa.casl:78: JMI ODFIN ; ↓ -../../../../as/FUNC/outa.casl:79: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ -../../../../as/FUNC/outa.casl:80: JMI ODLOOP ; ↓ -../../../../as/FUNC/outa.casl:81:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 -../../../../as/FUNC/outa.casl:82: ADDL GR0,GR4 ; GR0 <- GR0 + GR4 -../../../../as/FUNC/outa.casl:83: JUMP ODLOOP ; ループ終端 -../../../../as/FUNC/outa.casl:84:ODFIN LD GR3,GR1 -../../../../as/FUNC/outa.casl:85: POP GR4 -../../../../as/FUNC/outa.casl:86: POP GR2 -../../../../as/FUNC/outa.casl:87: POP GR1 -../../../../as/FUNC/outa.casl:88: RET -../../../../as/FUNC/outa.casl:89:ODY DS 1 -../../../../as/FUNC/outa.casl:90: END -../../../../as/FUNC/outa.casl:91:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える -../../../../as/FUNC/outa.casl:92:;; 例: 12345 -> 54321、54321- -> -12345 -../../../../as/FUNC/outa.casl:93:REV START -../../../../as/FUNC/outa.casl:94: RPUSH -../../../../as/FUNC/outa.casl:95: LAD GR3,0 ; GR3の初期化 -../../../../as/FUNC/outa.casl:96:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出 -../../../../as/FUNC/outa.casl:97: JZE RNEXT ; ↓ -../../../../as/FUNC/outa.casl:98: LD GR4,GR1 ; GR4にGR1の値をコピー -../../../../as/FUNC/outa.casl:99: ADDL GR4,GR3 ; GR4 <- GR4 + GR3 -../../../../as/FUNC/outa.casl:100: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納 -../../../../as/FUNC/outa.casl:101: PUSH 0,GR5 ; GR5をプッシュ -../../../../as/FUNC/outa.casl:102: LAD GR3,1,GR3 ; GR3 <- GR3 + 1 -../../../../as/FUNC/outa.casl:103: JUMP RPU ; ループ終端 -../../../../as/FUNC/outa.casl:104:RNEXT LAD GR3,0 ; GR3の初期化 -../../../../as/FUNC/outa.casl:105:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出 -../../../../as/FUNC/outa.casl:106: JZE RFIN ; ↓ -../../../../as/FUNC/outa.casl:107: POP GR5 ; GR5にポップ -../../../../as/FUNC/outa.casl:108: LD GR4,GR1 ; GR4にGR1の値をコピー -../../../../as/FUNC/outa.casl:109: ADDL GR4,GR3 ; GR4 <- GR4 + GR3 -../../../../as/FUNC/outa.casl:110: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納 -../../../../as/FUNC/outa.casl:111: LAD GR3,1,GR3 ; GR3 <- GR3 + 1 -../../../../as/FUNC/outa.casl:112: JUMP RPO ; ループ終端 -../../../../as/FUNC/outa.casl:113:RFIN RPOP -../../../../as/FUNC/outa.casl:114: RET -../../../../as/FUNC/outa.casl:115: END -../../../../as/FUNC/outa.casl:116:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。 -../../../../as/FUNC/outa.casl:117:;; 例: -10 -> 10, -20 -> 20 -../../../../as/FUNC/outa.casl:118:OABS START -../../../../as/FUNC/outa.casl:119: XOR GR1,=#FFFF ; GR1の値を反転 -../../../../as/FUNC/outa.casl:120: LAD GR1,1,GR1 ; GR1 <- GR1 + 1 -../../../../as/FUNC/outa.casl:121: RET -../../../../as/FUNC/outa.casl:122: END - -Label:::: -STI ---> #004E -ODYOV ---> #00ED -STSTR ---> #00C2 -STR ---> #008C -ODY ---> #010B -MIN ---> #002E -S1 ---> #0018 -S2 ---> #0027 -RNEXT ---> #0129 -CNT ---> #0011 -RFIN ---> #0137 -REV ---> #010C -PRT ---> #006C -OABS ---> #013F -NCHAR ---> #009E -DATA ---> #000A -STLST ---> #005B -LRET ---> #002B -MAIN ---> #0000 -ODIVL ---> #00D1 -RPO ---> #012B -OUTA ---> #002F -MINIM ---> #0012 -RPU ---> #011C -ODSL ---> #00E2 -LEN ---> #009D -ODFIN ---> #0106 -ZPRT ---> #0068 -ODLOOP ---> #00F5 -ODLPIN ---> #0102 - -Assemble ../../../../as/FUNC/minim_call.casl (1) -../../../../as/FUNC/minim_call.casl:1:;;; casl2 minim_call.casl minim.casl outa.casl -../../../../as/FUNC/minim_call.casl:2:MAIN START -../../../../as/FUNC/minim_call.casl:3: LAD GR1,DATA - #0000 #1210 - #0001 #000A -../../../../as/FUNC/minim_call.casl:4: LD GR2,CNT - #0002 #1020 - #0003 #0011 -../../../../as/FUNC/minim_call.casl:5: CALL MINIM - #0004 #8000 - #0005 #0012 -../../../../as/FUNC/minim_call.casl:6: LD GR1,GR0 - #0006 #1410 -../../../../as/FUNC/minim_call.casl:7: CALL OUTA - #0007 #8000 - #0008 #002F -../../../../as/FUNC/minim_call.casl:8: RET - #0009 #8100 -../../../../as/FUNC/minim_call.casl:9:DATA DC 23,78,2,45,67,-39,86 - #000A #0017 - #000B #004E - #000C #0002 - #000D #002D - #000E #0043 - #000F #FFD9 - #0010 #0056 -../../../../as/FUNC/minim_call.casl:10:CNT DC 7 - #0011 #0007 -../../../../as/FUNC/minim_call.casl:11: END - -Assemble ../../../../as/FUNC/minim.casl (1) -../../../../as/FUNC/minim.casl:1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する -../../../../as/FUNC/minim.casl:2:MINIM START -../../../../as/FUNC/minim.casl:3: LD GR0,0,GR1 - #0012 #1001 - #0013 #0000 -../../../../as/FUNC/minim.casl:4: ST GR0,MIN - #0014 #1100 - #0015 #002E -../../../../as/FUNC/minim.casl:5: LAD GR3,0 - #0016 #1230 - #0017 #0000 -../../../../as/FUNC/minim.casl:6:S1 CPA GR3,GR2 - #0018 #4432 -../../../../as/FUNC/minim.casl:7: JZE LRET - #0019 #6300 - #001A #002B -../../../../as/FUNC/minim.casl:8: LAD GR1,1,GR1 - #001B #1211 - #001C #0001 -../../../../as/FUNC/minim.casl:9: LD GR0,0,GR1 - #001D #1001 - #001E #0000 -../../../../as/FUNC/minim.casl:10: CPA GR0,MIN - #001F #4000 - #0020 #002E -../../../../as/FUNC/minim.casl:11: JPL S2 - #0021 #6500 - #0022 #0027 -../../../../as/FUNC/minim.casl:12: JZE S2 - #0023 #6300 - #0024 #0027 -../../../../as/FUNC/minim.casl:13: ST GR0,MIN - #0025 #1100 - #0026 #002E -../../../../as/FUNC/minim.casl:14:S2 LAD GR3,1,GR3 - #0027 #1233 - #0028 #0001 -../../../../as/FUNC/minim.casl:15: JUMP S1 - #0029 #6400 - #002A #0018 -../../../../as/FUNC/minim.casl:16:LRET LD GR0,MIN - #002B #1000 - #002C #002E -../../../../as/FUNC/minim.casl:17: RET - #002D #8100 -../../../../as/FUNC/minim.casl:18:MIN DS 1 - #002E #0000 -../../../../as/FUNC/minim.casl:19: END - -Assemble ../../../../as/FUNC/outa.casl (1) -../../../../as/FUNC/outa.casl:1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示 -../../../../as/FUNC/outa.casl:2:OUTA START -../../../../as/FUNC/outa.casl:3: RPUSH - #002F #7001 - #0030 #0000 - #0031 #7002 - #0032 #0000 - #0033 #7003 - #0034 #0000 - #0035 #7004 - #0036 #0000 - #0037 #7005 - #0038 #0000 - #0039 #7006 - #003A #0000 - #003B #7007 - #003C #0000 -../../../../as/FUNC/outa.casl:4: LAD GR2,10 ; GR2に10進数の「10」を格納。 - #003D #1220 - #003E #000A -../../../../as/FUNC/outa.casl:5: LAD GR0,0 ; GR0 <- 0 - #003F #1200 - #0040 #0000 -../../../../as/FUNC/outa.casl:6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1 - #0041 #1240 - #0042 #0000 -../../../../as/FUNC/outa.casl:7: ST GR0,LEN ; LENの初期化 - #0043 #1100 - #0044 #009D -../../../../as/FUNC/outa.casl:8: AND GR1,GR1 ; GR1をテスト - #0045 #3411 -../../../../as/FUNC/outa.casl:9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ - #0046 #6300 - #0047 #0068 -../../../../as/FUNC/outa.casl:10: JPL STI ; GR1が正数の場合、STIにジャンプ - #0048 #6500 - #0049 #004E -../../../../as/FUNC/outa.casl:11: LAD GR4,1 ; GR1が負数の場合、GR4をオン - #004A #1240 - #004B #0001 -../../../../as/FUNC/outa.casl:12: CALL OABS ; GR1を正数に変換 - #004C #8000 - #004D #013F -../../../../as/FUNC/outa.casl:13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出 - #004E #4512 -../../../../as/FUNC/outa.casl:14: JMI STLST ; ↓ - #004F #6100 - #0050 #005B -../../../../as/FUNC/outa.casl:15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納 - #0051 #8000 - #0052 #00D1 -../../../../as/FUNC/outa.casl:16: LD GR1,GR3 ; GR1にGR3をコピー - #0053 #1413 -../../../../as/FUNC/outa.casl:17: LD GR1,NCHAR,GR1 ; GR1を文字に変換 - #0054 #1011 - #0055 #009E -../../../../as/FUNC/outa.casl:18: CALL STSTR ; GR1をSTR領域に格納 - #0056 #8000 - #0057 #00C2 -../../../../as/FUNC/outa.casl:19: LD GR1,GR0 ; GR0をGR1にコピー - #0058 #1410 -../../../../as/FUNC/outa.casl:20: JUMP STI ; ループ終端 - #0059 #6400 - #005A #004E -../../../../as/FUNC/outa.casl:21:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換 - #005B #1011 - #005C #009E -../../../../as/FUNC/outa.casl:22: CALL STSTR ; GR1をSTR領域に格納 - #005D #8000 - #005E #00C2 -../../../../as/FUNC/outa.casl:23: AND GR4,GR4 ; 正数の場合 - #005F #3444 -../../../../as/FUNC/outa.casl:24: JZE PRT ; ↓ - #0060 #6300 - #0061 #006C -../../../../as/FUNC/outa.casl:25: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納 - #0144 #002D - #0062 #1010 - #0063 #0144 -../../../../as/FUNC/outa.casl:26: CALL STSTR ; ↓ - #0064 #8000 - #0065 #00C2 -../../../../as/FUNC/outa.casl:27: JUMP PRT ; PRTにジャンプ - #0066 #6400 - #0067 #006C -../../../../as/FUNC/outa.casl:28:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納 - #0068 #1010 - #0069 #009E -../../../../as/FUNC/outa.casl:29: CALL STSTR ; ↓ - #006A #8000 - #006B #00C2 -../../../../as/FUNC/outa.casl:30:PRT LD GR2,LEN ; GR2にLENの値を格納 - #006C #1020 - #006D #009D -../../../../as/FUNC/outa.casl:31: LAD GR1,STR ; GR1に文字列のアドレスを格納 - #006E #1210 - #006F #008C -../../../../as/FUNC/outa.casl:32: CALL REV ; 文字列を逆順に並べ替え - #0070 #8000 - #0071 #010C -../../../../as/FUNC/outa.casl:33: OUT STR,LEN ; 文字列を出力 - #0072 #7001 - #0073 #0000 - #0074 #7002 - #0075 #0000 - #0076 #1210 - #0077 #008C - #0078 #1020 - #0079 #009D - #007A #F000 - #007B #0002 - #007C #1210 - #007D #0145 - #0145 #000A - #007E #1220 - #007F #0001 - #0080 #F000 - #0081 #0002 - #0082 #7120 - #0083 #7110 -../../../../as/FUNC/outa.casl:34: RPOP - #0084 #7170 - #0085 #7160 - #0086 #7150 - #0087 #7140 - #0088 #7130 - #0089 #7120 - #008A #7110 -../../../../as/FUNC/outa.casl:35: RET - #008B #8100 -../../../../as/FUNC/outa.casl:36:STR DS 17 - #008C #0000 - #008D #0000 - #008E #0000 - #008F #0000 - #0090 #0000 - #0091 #0000 - #0092 #0000 - #0093 #0000 - #0094 #0000 - #0095 #0000 - #0096 #0000 - #0097 #0000 - #0098 #0000 - #0099 #0000 - #009A #0000 - #009B #0000 - #009C #0000 -../../../../as/FUNC/outa.casl:37:LEN DS 1 - #009D #0000 -../../../../as/FUNC/outa.casl:38:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - #009E #0030 - #009F #0031 - #00A0 #0032 - #00A1 #0033 - #00A2 #0034 - #00A3 #0035 - #00A4 #0036 - #00A5 #0037 - #00A6 #0038 - #00A7 #0039 - #00A8 #0041 - #00A9 #0042 - #00AA #0043 - #00AB #0044 - #00AC #0045 - #00AD #0046 - #00AE #0047 - #00AF #0048 - #00B0 #0049 - #00B1 #004A - #00B2 #004B - #00B3 #004C - #00B4 #004D - #00B5 #004E - #00B6 #004F - #00B7 #0050 - #00B8 #0051 - #00B9 #0052 - #00BA #0053 - #00BB #0054 - #00BC #0055 - #00BD #0056 - #00BE #0057 - #00BF #0058 - #00C0 #0059 - #00C1 #005A -../../../../as/FUNC/outa.casl:39: END -../../../../as/FUNC/outa.casl:40:;; GR1をSTR領域に格納し、LENをインクリメント -../../../../as/FUNC/outa.casl:41:STSTR START -../../../../as/FUNC/outa.casl:42: PUSH 0,GR1 - #00C2 #7001 - #00C3 #0000 -../../../../as/FUNC/outa.casl:43: PUSH 0,GR2 - #00C4 #7002 - #00C5 #0000 -../../../../as/FUNC/outa.casl:44: LD GR2,LEN ; GR2にLENの値をロード - #00C6 #1020 - #00C7 #009D -../../../../as/FUNC/outa.casl:45: ST GR1,STR,GR2 ; STR+GR2 <- GR1 - #00C8 #1112 - #00C9 #008C -../../../../as/FUNC/outa.casl:46: LAD GR2,1,GR2 ; GR2 <- GR2 + 1 - #00CA #1222 - #00CB #0001 -../../../../as/FUNC/outa.casl:47: ST GR2,LEN ; LENにGR2を格納 - #00CC #1120 - #00CD #009D -../../../../as/FUNC/outa.casl:48: POP GR2 - #00CE #7120 -../../../../as/FUNC/outa.casl:49: POP GR1 - #00CF #7110 -../../../../as/FUNC/outa.casl:50: RET - #00D0 #8100 -../../../../as/FUNC/outa.casl:51: END -../../../../as/FUNC/outa.casl:52:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する -../../../../as/FUNC/outa.casl:53:;;; 0〜65535の範囲の数値を扱う -../../../../as/FUNC/outa.casl:54:ODIVL START -../../../../as/FUNC/outa.casl:55: PUSH 0,GR1 - #00D1 #7001 - #00D2 #0000 -../../../../as/FUNC/outa.casl:56: PUSH 0,GR2 - #00D3 #7002 - #00D4 #0000 -../../../../as/FUNC/outa.casl:57: PUSH 0,GR4 - #00D5 #7004 - #00D6 #0000 -../../../../as/FUNC/outa.casl:58: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ - #00D7 #3422 -../../../../as/FUNC/outa.casl:59: JZE ODFIN ; ↓ - #00D8 #6300 - #00D9 #0106 -../../../../as/FUNC/outa.casl:60: ST GR2,ODY ; ODYにGR2の初期値を保存 - #00DA #1120 - #00DB #010B -../../../../as/FUNC/outa.casl:61: LAD GR0,0 ; GR0の初期化 - #00DC #1200 - #00DD #0000 -../../../../as/FUNC/outa.casl:62: LAD GR3,0 ; GR3の初期化 - #00DE #1230 - #00DF #0000 -../../../../as/FUNC/outa.casl:63: LAD GR4,1 ; GR4の初期化。対象ビットを表す - #00E0 #1240 - #00E1 #0001 -../../../../as/FUNC/outa.casl:64:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出 - #00E2 #4521 -../../../../as/FUNC/outa.casl:65: JPL ODLOOP ; ↓ - #00E3 #6500 - #00E4 #00F5 -../../../../as/FUNC/outa.casl:66: SLL GR4,1 ; GR4を1回左シフト - #00E5 #5240 - #00E6 #0001 -../../../../as/FUNC/outa.casl:67: SLL GR2,1 ; GR2を1回左シフト - #00E7 #5220 - #00E8 #0001 -../../../../as/FUNC/outa.casl:68: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ - #00E9 #6600 - #00EA #00ED -../../../../as/FUNC/outa.casl:69: JUMP ODSL ; ループ終端 - #00EB #6400 - #00EC #00E2 -../../../../as/FUNC/outa.casl:70:ODYOV SRL GR2,1 - #00ED #5320 - #00EE #0001 -../../../../as/FUNC/outa.casl:71: LAD GR2,#8000,GR2 - #00EF #1222 - #00F0 #8000 -../../../../as/FUNC/outa.casl:72: SRL GR4,1 - #00F1 #5340 - #00F2 #0001 -../../../../as/FUNC/outa.casl:73: JUMP ODLPIN - #00F3 #6400 - #00F4 #0102 -../../../../as/FUNC/outa.casl:74:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト - #00F5 #5340 - #00F6 #0001 -../../../../as/FUNC/outa.casl:75: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出 - #00F7 #6300 - #00F8 #0106 -../../../../as/FUNC/outa.casl:76: SRL GR2,1 ; GR2を1回右シフト - #00F9 #5320 - #00FA #0001 -../../../../as/FUNC/outa.casl:77: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出 - #00FB #4110 - #00FC #010B -../../../../as/FUNC/outa.casl:78: JMI ODFIN ; ↓ - #00FD #6100 - #00FE #0106 -../../../../as/FUNC/outa.casl:79: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ - #00FF #4512 -../../../../as/FUNC/outa.casl:80: JMI ODLOOP ; ↓ - #0100 #6100 - #0101 #00F5 -../../../../as/FUNC/outa.casl:81:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 - #0102 #2712 -../../../../as/FUNC/outa.casl:82: ADDL GR0,GR4 ; GR0 <- GR0 + GR4 - #0103 #2604 -../../../../as/FUNC/outa.casl:83: JUMP ODLOOP ; ループ終端 - #0104 #6400 - #0105 #00F5 -../../../../as/FUNC/outa.casl:84:ODFIN LD GR3,GR1 - #0106 #1431 -../../../../as/FUNC/outa.casl:85: POP GR4 - #0107 #7140 -../../../../as/FUNC/outa.casl:86: POP GR2 - #0108 #7120 -../../../../as/FUNC/outa.casl:87: POP GR1 - #0109 #7110 -../../../../as/FUNC/outa.casl:88: RET - #010A #8100 -../../../../as/FUNC/outa.casl:89:ODY DS 1 - #010B #0000 -../../../../as/FUNC/outa.casl:90: END -../../../../as/FUNC/outa.casl:91:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える -../../../../as/FUNC/outa.casl:92:;; 例: 12345 -> 54321、54321- -> -12345 -../../../../as/FUNC/outa.casl:93:REV START -../../../../as/FUNC/outa.casl:94: RPUSH - #010C #7001 - #010D #0000 - #010E #7002 - #010F #0000 - #0110 #7003 - #0111 #0000 - #0112 #7004 - #0113 #0000 - #0114 #7005 - #0115 #0000 - #0116 #7006 - #0117 #0000 - #0118 #7007 - #0119 #0000 -../../../../as/FUNC/outa.casl:95: LAD GR3,0 ; GR3の初期化 - #011A #1230 - #011B #0000 -../../../../as/FUNC/outa.casl:96:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出 - #011C #4532 -../../../../as/FUNC/outa.casl:97: JZE RNEXT ; ↓ - #011D #6300 - #011E #0129 -../../../../as/FUNC/outa.casl:98: LD GR4,GR1 ; GR4にGR1の値をコピー - #011F #1441 -../../../../as/FUNC/outa.casl:99: ADDL GR4,GR3 ; GR4 <- GR4 + GR3 - #0120 #2643 -../../../../as/FUNC/outa.casl:100: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納 - #0121 #1054 - #0122 #0000 -../../../../as/FUNC/outa.casl:101: PUSH 0,GR5 ; GR5をプッシュ - #0123 #7005 - #0124 #0000 -../../../../as/FUNC/outa.casl:102: LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - #0125 #1233 - #0126 #0001 -../../../../as/FUNC/outa.casl:103: JUMP RPU ; ループ終端 - #0127 #6400 - #0128 #011C -../../../../as/FUNC/outa.casl:104:RNEXT LAD GR3,0 ; GR3の初期化 - #0129 #1230 - #012A #0000 -../../../../as/FUNC/outa.casl:105:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出 - #012B #4532 -../../../../as/FUNC/outa.casl:106: JZE RFIN ; ↓ - #012C #6300 - #012D #0137 -../../../../as/FUNC/outa.casl:107: POP GR5 ; GR5にポップ - #012E #7150 -../../../../as/FUNC/outa.casl:108: LD GR4,GR1 ; GR4にGR1の値をコピー - #012F #1441 -../../../../as/FUNC/outa.casl:109: ADDL GR4,GR3 ; GR4 <- GR4 + GR3 - #0130 #2643 -../../../../as/FUNC/outa.casl:110: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納 - #0131 #1154 - #0132 #0000 -../../../../as/FUNC/outa.casl:111: LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - #0133 #1233 - #0134 #0001 -../../../../as/FUNC/outa.casl:112: JUMP RPO ; ループ終端 - #0135 #6400 - #0136 #012B -../../../../as/FUNC/outa.casl:113:RFIN RPOP - #0137 #7170 - #0138 #7160 - #0139 #7150 - #013A #7140 - #013B #7130 - #013C #7120 - #013D #7110 -../../../../as/FUNC/outa.casl:114: RET - #013E #8100 -../../../../as/FUNC/outa.casl:115: END -../../../../as/FUNC/outa.casl:116:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。 -../../../../as/FUNC/outa.casl:117:;; 例: -10 -> 10, -20 -> 20 -../../../../as/FUNC/outa.casl:118:OABS START -../../../../as/FUNC/outa.casl:119: XOR GR1,=#FFFF ; GR1の値を反転 - #0146 #FFFF - #013F #3210 - #0140 #0146 -../../../../as/FUNC/outa.casl:120: LAD GR1,1,GR1 ; GR1 <- GR1 + 1 - #0141 #1211 - #0142 #0001 -../../../../as/FUNC/outa.casl:121: RET - #0143 #8100 -../../../../as/FUNC/outa.casl:122: END --39