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=44b74e39bf52d166af2d14ee28504397fcf4849e;hb=fb54b1c9d2fbc3d4a62c6b4d38ff68e9d3b25c26;hp=0000000000000000000000000000000000000000;hpb=b4e48008c95b35c692827326191698c22b06124f;p=YACASL2.git diff --git a/test/integration/CASL2/minim_call/0.txt b/test/integration/CASL2/minim_call/0.txt new file mode 100644 index 0000000..44b74e3 --- /dev/null +++ b/test/integration/CASL2/minim_call/0.txt @@ -0,0 +1,677 @@ +../../../../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