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