X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=test%2Fintegration%2Fcasl2%2Fcount_call%2F0.txt;h=029f1d141acefdc34b017d2ac9ef7f144783261b;hb=632231943932361e8c8618283f7871ff1df04aa6;hp=6cb4d54277f88d9f6b01426f1c0cfe15e623bf15;hpb=0dab7eab4cf4b834ba7c4628a334a5f32304c167;p=YACASL2.git diff --git a/test/integration/casl2/count_call/0.txt b/test/integration/casl2/count_call/0.txt index 6cb4d54..029f1d1 100644 --- a/test/integration/casl2/count_call/0.txt +++ b/test/integration/casl2/count_call/0.txt @@ -1,654 +1,4 @@ -../../../../casl2 -sla ../../../../as/FUNC/count1_call.casl ../../../../as/FUNC/count1.casl ../../../../as/FUNC/outa.casl - -Assemble ../../../../as/FUNC/count1_call.casl (0) -../../../../as/FUNC/count1_call.casl: 1:;; count1.casl(「アセンブラ言語の仕様」プログラム例)を呼び出し、出力結果を表示 -../../../../as/FUNC/count1_call.casl: 2:;; 使い方: casl2 count1_call.casl count1.casl outa.casl -../../../../as/FUNC/count1_call.casl: 3:MAIN START -../../../../as/FUNC/count1_call.casl: 4: LAD GR2,0 -../../../../as/FUNC/count1_call.casl: 5:LOOP CPA GR2,MAX ; ループ開始。GR2がMAXの値になったらループ脱出 -../../../../as/FUNC/count1_call.casl: 6: JZE FIN ; ↓ -../../../../as/FUNC/count1_call.casl: 7: LD GR1,GR2 ; GR1にVALの値をロード -../../../../as/FUNC/count1_call.casl: 8: CALL COUNT1 ; COUNT1を呼び出す。出力はGR0に格納 -../../../../as/FUNC/count1_call.casl: 9: LD GR1,GR0 ; GR1にGR0の値をコピー -../../../../as/FUNC/count1_call.casl: 10: CALL OUTA ; OUTAを呼び出す -../../../../as/FUNC/count1_call.casl: 11: LAD GR2,1,GR2 ; GR2 <= GR2 + 1 -../../../../as/FUNC/count1_call.casl: 12: JUMP LOOP ; ループ終端 -../../../../as/FUNC/count1_call.casl: 13:FIN RET -../../../../as/FUNC/count1_call.casl: 14:MAX DC 256 -../../../../as/FUNC/count1_call.casl: 15: END - -Assemble ../../../../as/FUNC/count1.casl (0) -../../../../as/FUNC/count1.casl: 1:COUNT1 START -../../../../as/FUNC/count1.casl: 2:; 入力 GR1:検索する語 -../../../../as/FUNC/count1.casl: 3:; 処理 GR1中の'1'のビットの個数を求める -../../../../as/FUNC/count1.casl: 4:; 出力 GR0:GR1中の'1'のビットの個数 -../../../../as/FUNC/count1.casl: 5: PUSH 0,GR1 -../../../../as/FUNC/count1.casl: 6: PUSH 0,GR2 -../../../../as/FUNC/count1.casl: 7: SUBA GR2,GR2 -../../../../as/FUNC/count1.casl: 8: AND GR1,GR1 -../../../../as/FUNC/count1.casl: 9: JZE RETURN -../../../../as/FUNC/count1.casl: 10:MORE LAD GR2,1,GR2 -../../../../as/FUNC/count1.casl: 11: LAD GR0,-1,GR1 -../../../../as/FUNC/count1.casl: 12: AND GR1,GR0 -../../../../as/FUNC/count1.casl: 13: JNZ MORE -../../../../as/FUNC/count1.casl: 14:RETURN LD GR0,GR2 -../../../../as/FUNC/count1.casl: 15: POP GR2 -../../../../as/FUNC/count1.casl: 16: POP GR1 -../../../../as/FUNC/count1.casl: 17: RET -../../../../as/FUNC/count1.casl: 18: 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 ---> #00FC -COUNT1 ---> #0012 -OUTA.LEN ---> #009D -ODIVL.ODLOOP ---> #00E6 -ODIVL.ODLPIN ---> #00F3 -OUTA.ZPRT ---> #0064 -OUTA.STI ---> #0044 -REV.RFIN ---> #0128 -OUTA.STR ---> #008C -ODIVL.ODFIN ---> #00F7 -REV.RPO ---> #011C -REV.RPU ---> #010D -COUNT1.MORE ---> #001A -ODIVL.ODYOV ---> #00DE -REV ---> #00FD -MAIN.FIN ---> #0010 -REV.RNEXT ---> #011A -OABS ---> #0130 -OUTA.NCHAR ---> #009E -ODIVL.ODSL ---> #00D3 -OUTA.STLST ---> #0053 -MAIN ---> #0000 -ODIVL ---> #00C2 -COUNT1.RETURN ---> #0021 -OUTA ---> #0025 -MAIN.LOOP ---> #0002 -OUTA.PRT ---> #006A -MAIN.MAX ---> #0011 - -Assemble ../../../../as/FUNC/count1_call.casl (1) -../../../../as/FUNC/count1_call.casl: 1:;; count1.casl(「アセンブラ言語の仕様」プログラム例)を呼び出し、出力結果を表示 -../../../../as/FUNC/count1_call.casl: 2:;; 使い方: casl2 count1_call.casl count1.casl outa.casl -../../../../as/FUNC/count1_call.casl: 3:MAIN START -../../../../as/FUNC/count1_call.casl: 4: LAD GR2,0 - #0000 #1220 - #0001 #0000 -../../../../as/FUNC/count1_call.casl: 5:LOOP CPA GR2,MAX ; ループ開始。GR2がMAXの値になったらループ脱出 - #0002 #4020 - #0003 #0011 -../../../../as/FUNC/count1_call.casl: 6: JZE FIN ; ↓ - #0004 #6300 - #0005 #0010 -../../../../as/FUNC/count1_call.casl: 7: LD GR1,GR2 ; GR1にVALの値をロード - #0006 #1412 -../../../../as/FUNC/count1_call.casl: 8: CALL COUNT1 ; COUNT1を呼び出す。出力はGR0に格納 - #0007 #8000 - #0008 #0012 -../../../../as/FUNC/count1_call.casl: 9: LD GR1,GR0 ; GR1にGR0の値をコピー - #0009 #1410 -../../../../as/FUNC/count1_call.casl: 10: CALL OUTA ; OUTAを呼び出す - #000A #8000 - #000B #0025 -../../../../as/FUNC/count1_call.casl: 11: LAD GR2,1,GR2 ; GR2 <= GR2 + 1 - #000C #1222 - #000D #0001 -../../../../as/FUNC/count1_call.casl: 12: JUMP LOOP ; ループ終端 - #000E #6400 - #000F #0002 -../../../../as/FUNC/count1_call.casl: 13:FIN RET - #0010 #8100 -../../../../as/FUNC/count1_call.casl: 14:MAX DC 256 - #0011 #0100 -../../../../as/FUNC/count1_call.casl: 15: END - -Assemble ../../../../as/FUNC/count1.casl (1) -../../../../as/FUNC/count1.casl: 1:COUNT1 START -../../../../as/FUNC/count1.casl: 2:; 入力 GR1:検索する語 -../../../../as/FUNC/count1.casl: 3:; 処理 GR1中の'1'のビットの個数を求める -../../../../as/FUNC/count1.casl: 4:; 出力 GR0:GR1中の'1'のビットの個数 -../../../../as/FUNC/count1.casl: 5: PUSH 0,GR1 - #0012 #7001 - #0013 #0000 -../../../../as/FUNC/count1.casl: 6: PUSH 0,GR2 - #0014 #7002 - #0015 #0000 -../../../../as/FUNC/count1.casl: 7: SUBA GR2,GR2 - #0016 #2522 -../../../../as/FUNC/count1.casl: 8: AND GR1,GR1 - #0017 #3411 -../../../../as/FUNC/count1.casl: 9: JZE RETURN - #0018 #6300 - #0019 #0021 -../../../../as/FUNC/count1.casl: 10:MORE LAD GR2,1,GR2 - #001A #1222 - #001B #0001 -../../../../as/FUNC/count1.casl: 11: LAD GR0,-1,GR1 - #001C #1201 - #001D #FFFF -../../../../as/FUNC/count1.casl: 12: AND GR1,GR0 - #001E #3410 -../../../../as/FUNC/count1.casl: 13: JNZ MORE - #001F #6200 - #0020 #001A -../../../../as/FUNC/count1.casl: 14:RETURN LD GR0,GR2 - #0021 #1402 -../../../../as/FUNC/count1.casl: 15: POP GR2 - #0022 #7120 -../../../../as/FUNC/count1.casl: 16: POP GR1 - #0023 #7110 -../../../../as/FUNC/count1.casl: 17: RET - #0024 #8100 -../../../../as/FUNC/count1.casl: 18: 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 - #0025 #7001 - #0026 #0000 - #0027 #7002 - #0028 #0000 - #0029 #7003 - #002A #0000 - #002B #7004 - #002C #0000 - #002D #7005 - #002E #0000 - #002F #7006 - #0030 #0000 - #0031 #7007 - #0032 #0000 -../../../../as/FUNC/outa.casl: 4: LAD GR2,10 ; GR2に10進数の「10」を格納。 - #0033 #1220 - #0034 #000A -../../../../as/FUNC/outa.casl: 5: LAD GR0,0 ; GR0 <- 0 - #0035 #1200 - #0036 #0000 -../../../../as/FUNC/outa.casl: 6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1 - #0037 #1240 - #0038 #0000 -../../../../as/FUNC/outa.casl: 7: LAD GR5,0 ; 整数値の長さ - #0039 #1250 - #003A #0000 -../../../../as/FUNC/outa.casl: 8: AND GR1,GR1 ; GR1をテスト - #003B #3411 -../../../../as/FUNC/outa.casl: 9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ - #003C #6300 - #003D #0064 -../../../../as/FUNC/outa.casl: 10: JPL STI ; GR1が正数の場合、STIにジャンプ - #003E #6500 - #003F #0044 -../../../../as/FUNC/outa.casl: 11: LAD GR4,1 ; GR1が負数の場合、GR4をオン - #0040 #1240 - #0041 #0001 -../../../../as/FUNC/outa.casl: 12: CALL OABS ; GR1を正数に変換 - #0042 #8000 - #0043 #0130 -../../../../as/FUNC/outa.casl: 13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出 - #0044 #4512 -../../../../as/FUNC/outa.casl: 14: JMI STLST ; ↓ - #0045 #6100 - #0046 #0053 -../../../../as/FUNC/outa.casl: 15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納 - #0047 #8000 - #0048 #00C2 -../../../../as/FUNC/outa.casl: 16: LD GR1,GR3 ; GR1にGR3をコピー - #0049 #1413 -../../../../as/FUNC/outa.casl: 17: LD GR1,NCHAR,GR1 ; GR1を文字に変換 - #004A #1011 - #004B #009E -../../../../as/FUNC/outa.casl: 18: ST GR1,STR,GR5 ; (STR + GR5) <- GR1 - #004C #1115 - #004D #008C -../../../../as/FUNC/outa.casl: 19: LAD GR5,1,GR5 ; GR5 <- GR5 + 1 - #004E #1255 - #004F #0001 -../../../../as/FUNC/outa.casl: 20: LD GR1,GR0 ; GR0をGR1にコピー - #0050 #1410 -../../../../as/FUNC/outa.casl: 21: JUMP STI ; ループ終端 - #0051 #6400 - #0052 #0044 -../../../../as/FUNC/outa.casl: 22:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換 - #0053 #1011 - #0054 #009E -../../../../as/FUNC/outa.casl: 23: ST GR1,STR,GR5 ; (STR + GR5) <- GR1 - #0055 #1115 - #0056 #008C -../../../../as/FUNC/outa.casl: 24: LAD GR5,1,GR5 ; GR5 <- GR5 + 1 - #0057 #1255 - #0058 #0001 -../../../../as/FUNC/outa.casl: 25: AND GR4,GR4 ; 正数の場合 - #0059 #3444 -../../../../as/FUNC/outa.casl: 26: JZE PRT ; ↓ - #005A #6300 - #005B #006A -../../../../as/FUNC/outa.casl: 27: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納 - #0135 #002D - #005C #1010 - #005D #0135 -../../../../as/FUNC/outa.casl: 28: ST GR1,STR,GR5 ; (STR + GR5) <- GR1 - #005E #1115 - #005F #008C -../../../../as/FUNC/outa.casl: 29: LAD GR5,1,GR5 ; GR5 <- GR5 + 1 - #0060 #1255 - #0061 #0001 -../../../../as/FUNC/outa.casl: 30: JUMP PRT ; PRTにジャンプ - #0062 #6400 - #0063 #006A -../../../../as/FUNC/outa.casl: 31:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納 - #0064 #1010 - #0065 #009E -../../../../as/FUNC/outa.casl: 32: ST GR1,STR,GR5 ; (STR + GR5) <- GR1 - #0066 #1115 - #0067 #008C -../../../../as/FUNC/outa.casl: 33: LAD GR5,1,GR5 ; GR5 <- GR5 + 1 - #0068 #1255 - #0069 #0001 -../../../../as/FUNC/outa.casl: 34:PRT ST GR5,LEN ; LEN <- GR5 - #006A #1150 - #006B #009D -../../../../as/FUNC/outa.casl: 35: LD GR2,LEN ; GR2にLENの値を格納 - #006C #1020 - #006D #009D -../../../../as/FUNC/outa.casl: 36: LAD GR1,STR ; GR1に文字列のアドレスを格納 - #006E #1210 - #006F #008C -../../../../as/FUNC/outa.casl: 37: CALL REV ; 文字列を逆順に並べ替え - #0070 #8000 - #0071 #00FD -../../../../as/FUNC/outa.casl: 38: 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 #0136 - #0136 #000A - #007E #1220 - #007F #0001 - #0080 #F000 - #0081 #0002 - #0082 #7120 - #0083 #7110 -../../../../as/FUNC/outa.casl: 39: RPOP - #0084 #7170 - #0085 #7160 - #0086 #7150 - #0087 #7140 - #0088 #7130 - #0089 #7120 - #008A #7110 -../../../../as/FUNC/outa.casl: 40: RET - #008B #8100 -../../../../as/FUNC/outa.casl: 41: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: 42:LEN DS 1 - #009D #0000 -../../../../as/FUNC/outa.casl: 43: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: 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 - #00C2 #7001 - #00C3 #0000 -../../../../as/FUNC/outa.casl: 49: PUSH 0,GR2 - #00C4 #7002 - #00C5 #0000 -../../../../as/FUNC/outa.casl: 50: PUSH 0,GR4 - #00C6 #7004 - #00C7 #0000 -../../../../as/FUNC/outa.casl: 51: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ - #00C8 #3422 -../../../../as/FUNC/outa.casl: 52: JZE ODFIN ; ↓ - #00C9 #6300 - #00CA #00F7 -../../../../as/FUNC/outa.casl: 53: ST GR2,ODY ; ODYにGR2の初期値を保存 - #00CB #1120 - #00CC #00FC -../../../../as/FUNC/outa.casl: 54: LAD GR0,0 ; GR0の初期化 - #00CD #1200 - #00CE #0000 -../../../../as/FUNC/outa.casl: 55: LAD GR3,0 ; GR3の初期化 - #00CF #1230 - #00D0 #0000 -../../../../as/FUNC/outa.casl: 56: LAD GR4,1 ; GR4の初期化。対象ビットを表す - #00D1 #1240 - #00D2 #0001 -../../../../as/FUNC/outa.casl: 57:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出 - #00D3 #4521 -../../../../as/FUNC/outa.casl: 58: JPL ODLOOP ; ↓ - #00D4 #6500 - #00D5 #00E6 -../../../../as/FUNC/outa.casl: 59: SLL GR4,1 ; GR4を1回左シフト - #00D6 #5240 - #00D7 #0001 -../../../../as/FUNC/outa.casl: 60: SLL GR2,1 ; GR2を1回左シフト - #00D8 #5220 - #00D9 #0001 -../../../../as/FUNC/outa.casl: 61: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ - #00DA #6600 - #00DB #00DE -../../../../as/FUNC/outa.casl: 62: JUMP ODSL ; ループ終端 - #00DC #6400 - #00DD #00D3 -../../../../as/FUNC/outa.casl: 63:ODYOV SRL GR2,1 - #00DE #5320 - #00DF #0001 -../../../../as/FUNC/outa.casl: 64: LAD GR2,#8000,GR2 - #00E0 #1222 - #00E1 #8000 -../../../../as/FUNC/outa.casl: 65: SRL GR4,1 - #00E2 #5340 - #00E3 #0001 -../../../../as/FUNC/outa.casl: 66: JUMP ODLPIN - #00E4 #6400 - #00E5 #00F3 -../../../../as/FUNC/outa.casl: 67:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト - #00E6 #5340 - #00E7 #0001 -../../../../as/FUNC/outa.casl: 68: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出 - #00E8 #6300 - #00E9 #00F7 -../../../../as/FUNC/outa.casl: 69: SRL GR2,1 ; GR2を1回右シフト - #00EA #5320 - #00EB #0001 -../../../../as/FUNC/outa.casl: 70: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出 - #00EC #4110 - #00ED #00FC -../../../../as/FUNC/outa.casl: 71: JMI ODFIN ; ↓ - #00EE #6100 - #00EF #00F7 -../../../../as/FUNC/outa.casl: 72: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ - #00F0 #4512 -../../../../as/FUNC/outa.casl: 73: JMI ODLOOP ; ↓ - #00F1 #6100 - #00F2 #00E6 -../../../../as/FUNC/outa.casl: 74:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 - #00F3 #2712 -../../../../as/FUNC/outa.casl: 75: ADDL GR0,GR4 ; GR0 <- GR0 + GR4 - #00F4 #2604 -../../../../as/FUNC/outa.casl: 76: JUMP ODLOOP ; ループ終端 - #00F5 #6400 - #00F6 #00E6 -../../../../as/FUNC/outa.casl: 77:ODFIN LD GR3,GR1 - #00F7 #1431 -../../../../as/FUNC/outa.casl: 78: POP GR4 - #00F8 #7140 -../../../../as/FUNC/outa.casl: 79: POP GR2 - #00F9 #7120 -../../../../as/FUNC/outa.casl: 80: POP GR1 - #00FA #7110 -../../../../as/FUNC/outa.casl: 81: RET - #00FB #8100 -../../../../as/FUNC/outa.casl: 82:ODY DS 1 - #00FC #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 - #00FD #7001 - #00FE #0000 - #00FF #7002 - #0100 #0000 - #0101 #7003 - #0102 #0000 - #0103 #7004 - #0104 #0000 - #0105 #7005 - #0106 #0000 - #0107 #7006 - #0108 #0000 - #0109 #7007 - #010A #0000 -../../../../as/FUNC/outa.casl: 88: LAD GR3,0 ; GR3の初期化 - #010B #1230 - #010C #0000 -../../../../as/FUNC/outa.casl: 89:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出 - #010D #4532 -../../../../as/FUNC/outa.casl: 90: JZE RNEXT ; ↓ - #010E #6300 - #010F #011A -../../../../as/FUNC/outa.casl: 91: LD GR4,GR1 ; GR4にGR1の値をコピー - #0110 #1441 -../../../../as/FUNC/outa.casl: 92: ADDL GR4,GR3 ; GR4 <- GR4 + GR3 - #0111 #2643 -../../../../as/FUNC/outa.casl: 93: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納 - #0112 #1054 - #0113 #0000 -../../../../as/FUNC/outa.casl: 94: PUSH 0,GR5 ; GR5をプッシュ - #0114 #7005 - #0115 #0000 -../../../../as/FUNC/outa.casl: 95: LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - #0116 #1233 - #0117 #0001 -../../../../as/FUNC/outa.casl: 96: JUMP RPU ; ループ終端 - #0118 #6400 - #0119 #010D -../../../../as/FUNC/outa.casl: 97:RNEXT LAD GR3,0 ; GR3の初期化 - #011A #1230 - #011B #0000 -../../../../as/FUNC/outa.casl: 98:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出 - #011C #4532 -../../../../as/FUNC/outa.casl: 99: JZE RFIN ; ↓ - #011D #6300 - #011E #0128 -../../../../as/FUNC/outa.casl: 100: POP GR5 ; GR5にポップ - #011F #7150 -../../../../as/FUNC/outa.casl: 101: LD GR4,GR1 ; GR4にGR1の値をコピー - #0120 #1441 -../../../../as/FUNC/outa.casl: 102: ADDL GR4,GR3 ; GR4 <- GR4 + GR3 - #0121 #2643 -../../../../as/FUNC/outa.casl: 103: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納 - #0122 #1154 - #0123 #0000 -../../../../as/FUNC/outa.casl: 104: LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - #0124 #1233 - #0125 #0001 -../../../../as/FUNC/outa.casl: 105: JUMP RPO ; ループ終端 - #0126 #6400 - #0127 #011C -../../../../as/FUNC/outa.casl: 106:RFIN RPOP - #0128 #7170 - #0129 #7160 - #012A #7150 - #012B #7140 - #012C #7130 - #012D #7120 - #012E #7110 -../../../../as/FUNC/outa.casl: 107: RET - #012F #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の値を反転 - #0137 #FFFF - #0130 #3210 - #0131 #0137 -../../../../as/FUNC/outa.casl: 113: LAD GR1,1,GR1 ; GR1 <- GR1 + 1 - #0132 #1211 - #0133 #0001 -../../../../as/FUNC/outa.casl: 114: RET - #0134 #8100 -../../../../as/FUNC/outa.casl: 115: END +../../../../casl2 ../../../../as/FUNC/count1_call.casl ../../../../as/FUNC/count1.casl ../../../../as/FUNC/outa.casl 0 1 1