Assemble ../../../as/outi_call.casl (0) Assemble ../../../as/outi.casl (0) Label:::: VAL ---> #0010 STR ---> #006F DFIN ---> #0083 RNEXT ---> #0099 CNT ---> #001E DIV10 ---> #0076 RFIN ---> #00A7 ILOOP ---> #0032 REV ---> #0084 PRT ---> #0051 LOOP ---> #0004 ZCHAR ---> #006E MAIN ---> #0000 INEXT ---> #0041 INV ---> #00AB RPO ---> #009B RPU ---> #008C OUTI ---> #001F DLOOP ---> #0079 FIN ---> #000F LEN ---> #0075 TEN ---> #006D Assemble ../../../as/outi_call.casl (1) ../../../as/outi_call.casl:1:; need outi.casl ../../../as/outi_call.casl:2:MAIN START ../../../as/outi_call.casl:3: LAD GR2,0 #0000 #1220 #0001 #0000 ../../../as/outi_call.casl:4: LD GR3,CNT #0002 #1030 #0003 #001E ../../../as/outi_call.casl:5:LOOP LD GR1,VAL,GR2 #0004 #1012 #0005 #0010 ../../../as/outi_call.casl:6: CALL OUTI #0006 #8000 #0007 #001F ../../../as/outi_call.casl:7: LAD GR2,1,GR2 #0008 #1222 #0009 #0001 ../../../as/outi_call.casl:8: CPA GR2,GR3 #000A #4423 ../../../as/outi_call.casl:9: JZE FIN #000B #6300 #000C #000F ../../../as/outi_call.casl:10: JUMP LOOP #000D #6400 #000E #0004 ../../../as/outi_call.casl:11:FIN RET #000F #8100 ../../../as/outi_call.casl:12: END ../../../as/outi_call.casl:13:VAL DC #0000,#0001,#0002,#0010,#0100,#1000,#7FFF,#FFFF,#FFFE,#FFF0,#FF00,#F000,#8001,#8000 #0010 #0000 #0011 #0001 #0012 #0002 #0013 #0010 #0014 #0100 #0015 #1000 #0016 #7FFF #0017 #FFFF #0018 #FFFE #0019 #FFF0 #001A #FF00 #001B #F000 #001C #8001 #001D #8000 ../../../as/outi_call.casl:14:CNT DC 14 #001E #000E Assemble ../../../as/outi.casl (1) ../../../as/outi.casl:1:;GR1に格納された数値を表示 ../../../as/outi.casl:2:OUTI START ../../../as/outi.casl:3: PUSH 0,GR2 #001F #7002 #0020 #0000 ../../../as/outi.casl:4: PUSH 0,GR3 #0021 #7003 #0022 #0000 ../../../as/outi.casl:5: PUSH 0,GR4 #0023 #7004 #0024 #0000 ../../../as/outi.casl:6: LAD GR0,0 ; 負数フラグ。GR1が負数の場合、GR0は1 #0025 #1200 #0026 #0000 ../../../as/outi.casl:7: LAD GR2,0 #0027 #1220 #0028 #0000 ../../../as/outi.casl:8: AND GR1,GR1 #0029 #3411 ../../../as/outi.casl:9: JZE INEXT ; GR1が0の場合 #002A #6300 #002B #0041 ../../../as/outi.casl:10: JPL ILOOP ; GR1が正数の場合 #002C #6500 #002D #0032 ../../../as/outi.casl:11: LAD GR0,1 ; GR1が負数の場合、負数フラグ設定 #002E #1200 #002F #0001 ../../../as/outi.casl:12: CALL INV ; 負数を正数に変換 #0030 #8000 #0031 #00AB ../../../as/outi.casl:13:ILOOP CPL GR1,TEN #0032 #4110 #0033 #006D ../../../as/outi.casl:14: JMI INEXT ; GR1が10未満の場合は、ループ終了 #0034 #6100 #0035 #0041 ../../../as/outi.casl:15: CALL DIV10 ; (GR1 / 10)の商をGR3、剰余をGR4に格納 #0036 #8000 #0037 #0076 ../../../as/outi.casl:16: ADDL GR4,ZCHAR ; (GR1 / 10)の剰余を文字に変換 #0038 #2240 #0039 #006E ../../../as/outi.casl:17: ST GR4,STR,GR2 ; 文字をメモリに格納 #003A #1142 #003B #006F ../../../as/outi.casl:18: LAD GR2,1,GR2 ; GR2をインクリメント #003C #1222 #003D #0001 ../../../as/outi.casl:19: LD GR1,GR3 ; (GR1 / 10)の商をGR1に格納 #003E #1413 ../../../as/outi.casl:20: JUMP ILOOP #003F #6400 #0040 #0032 ../../../as/outi.casl:21:INEXT ADDL GR1,ZCHAR ; ループ終了後の剰余を文字に変換 #0041 #2210 #0042 #006E ../../../as/outi.casl:22: ST GR1,STR,GR2 ; 文字をメモリに格納 #0043 #1112 #0044 #006F ../../../as/outi.casl:23: LAD GR2,1,GR2 ; GR2をインクリメント #0045 #1222 #0046 #0001 ../../../as/outi.casl:24: CPL GR0,=1 ; 負数フラグ判定 #00B0 #0001 #0047 #4100 #0048 #00B0 ../../../as/outi.casl:25: JNZ PRT #0049 #6200 #004A #0051 ../../../as/outi.casl:26: LD GR1,='-' ; 負数フラグがオンの場合、「-」をロード #00B1 #002D #004B #1010 #004C #00B1 ../../../as/outi.casl:27: ST GR1,STR,GR2 ; 「-」をメモリに格納 #004D #1112 #004E #006F ../../../as/outi.casl:28: LAD GR2,1,GR2 ; GR2をインクリメント #004F #1222 #0050 #0001 ../../../as/outi.casl:29:PRT ST GR2,LEN ; GR2をメモリに格納 #0051 #1120 #0052 #0075 ../../../as/outi.casl:30: LAD GR1,STR ; GR1に文字列のアドレスを格納 #0053 #1210 #0054 #006F ../../../as/outi.casl:31: CALL REV ; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える #0055 #8000 #0056 #0084 ../../../as/outi.casl:32: OUT STR,LEN ; 文字列を印字 #0057 #7001 #0058 #0000 #0059 #7002 #005A #0000 #005B #1210 #005C #006F #005D #1020 #005E #0075 #005F #F000 #0060 #0002 #0061 #1210 #0062 #00B2 #00B2 #000A #0063 #1220 #0064 #0001 #0065 #F000 #0066 #0002 #0067 #7120 #0068 #7110 ../../../as/outi.casl:33: POP GR4 #0069 #7140 ../../../as/outi.casl:34: POP GR3 #006A #7130 ../../../as/outi.casl:35: POP GR2 #006B #7120 ../../../as/outi.casl:36: RET #006C #8100 ../../../as/outi.casl:37:TEN DC 10 #006D #000A ../../../as/outi.casl:38:ZCHAR DC '0' #006E #0030 ../../../as/outi.casl:39:STR DS 6 #006F #0000 #0070 #0000 #0071 #0000 #0072 #0000 #0073 #0000 #0074 #0000 ../../../as/outi.casl:40:LEN DS 1 #0075 #0000 ../../../as/outi.casl:41: END ../../../as/outi.casl:42:;GR1を10で割ったときの商をGR3、剰余をGR4に格納 ../../../as/outi.casl:43:DIV10 LD GR4,GR1 ; GR1の値をGR4にコピー #0076 #1441 ../../../as/outi.casl:44: LAD GR3,0 #0077 #1230 #0078 #0000 ../../../as/outi.casl:45:DLOOP CPL GR4,TEN #0079 #4140 #007A #006D ../../../as/outi.casl:46: JMI DFIN ; GR4が10未満の場合は終了 #007B #6100 #007C #0083 ../../../as/outi.casl:47: SUBL GR4,TEN ; GR4 <- GR4 - 10 #007D #2340 #007E #006D ../../../as/outi.casl:48: LAD GR3,1,GR3 ; GR3をインクリメント #007F #1233 #0080 #0001 ../../../as/outi.casl:49: JUMP DLOOP #0081 #6400 #0082 #0079 ../../../as/outi.casl:50:DFIN RET #0083 #8100 ../../../as/outi.casl:51: END ../../../as/outi.casl:52:;アドレスがGR1、長さがGR2の文字列を逆順に並べ替える ../../../as/outi.casl:53:;例: 12345 -> 54321 ../../../as/outi.casl:54:REV START ../../../as/outi.casl:55: PUSH 0,GR3 #0084 #7003 #0085 #0000 ../../../as/outi.casl:56: PUSH 0,GR4 #0086 #7004 #0087 #0000 ../../../as/outi.casl:57: PUSH 0,GR5 #0088 #7005 #0089 #0000 ../../../as/outi.casl:58: LAD GR3,1 #008A #1230 #008B #0001 ../../../as/outi.casl:59:RPU CPL GR2,GR3 #008C #4523 ../../../as/outi.casl:60: JMI RNEXT #008D #6100 #008E #0099 ../../../as/outi.casl:61: LD GR4,GR1 #008F #1441 ../../../as/outi.casl:62: ADDL GR4,GR3 #0090 #2643 ../../../as/outi.casl:63: LD GR4,-1,GR4 #0091 #1044 #0092 #FFFF ../../../as/outi.casl:64: PUSH 0,GR4 #0093 #7004 #0094 #0000 ../../../as/outi.casl:65: LAD GR3,1,GR3 #0095 #1233 #0096 #0001 ../../../as/outi.casl:66: JUMP RPU #0097 #6400 #0098 #008C ../../../as/outi.casl:67:RNEXT LAD GR3,1 #0099 #1230 #009A #0001 ../../../as/outi.casl:68:RPO CPL GR2,GR3 #009B #4523 ../../../as/outi.casl:69: JMI RFIN #009C #6100 #009D #00A7 ../../../as/outi.casl:70: POP GR4 #009E #7140 ../../../as/outi.casl:71: LD GR5,GR1 #009F #1451 ../../../as/outi.casl:72: ADDL GR5,GR3 #00A0 #2653 ../../../as/outi.casl:73: ST GR4,-1,GR5 #00A1 #1145 #00A2 #FFFF ../../../as/outi.casl:74: LAD GR3,1,GR3 #00A3 #1233 #00A4 #0001 ../../../as/outi.casl:75: JUMP RPO #00A5 #6400 #00A6 #009B ../../../as/outi.casl:76:RFIN POP GR5 #00A7 #7150 ../../../as/outi.casl:77: POP GR4 #00A8 #7140 ../../../as/outi.casl:78: POP GR3 #00A9 #7130 ../../../as/outi.casl:79: RET #00AA #8100 ../../../as/outi.casl:80: END ../../../as/outi.casl:81:;GR1の内容をマイナス値にする ../../../as/outi.casl:82:;例: 10 -> -10, -20 -> 20 ../../../as/outi.casl:83:INV START ../../../as/outi.casl:84: XOR GR1,=#FFFF #00B3 #FFFF #00AB #3210 #00AC #00B3 ../../../as/outi.casl:85: LAD GR1,1,GR1 #00AD #1211 #00AE #0001 ../../../as/outi.casl:86: RET #00AF #8100 ../../../as/outi.casl:87: END 0 1 2 16 256 4096 32767 -1 -2 -16 -256 -4096 -32767 -32768