8ac1f07e5406eab58d7ea5d51f03c430b64a6ccb
[YACASL2.git] / test / integration / casl2 / minim_call / 0.txt
1 ../../../../casl2 -sla ../../../../as/FUNC/minim_call.casl ../../../../as/FUNC/minim.casl ../../../../as/FUNC/outa.casl
2
3 Assemble ../../../../as/FUNC/minim_call.casl (0)
4 ../../../../as/FUNC/minim_call.casl:    1:;;; casl2 minim_call.casl minim.casl outa.casl
5 ../../../../as/FUNC/minim_call.casl:    2:MAIN    START
6 ../../../../as/FUNC/minim_call.casl:    3:        LAD     GR1,DATA
7 ../../../../as/FUNC/minim_call.casl:    4:        LD      GR2,CNT
8 ../../../../as/FUNC/minim_call.casl:    5:        CALL    MINIM
9 ../../../../as/FUNC/minim_call.casl:    6:        LD      GR1,GR0
10 ../../../../as/FUNC/minim_call.casl:    7:        CALL    OUTA
11 ../../../../as/FUNC/minim_call.casl:    8:        RET
12 ../../../../as/FUNC/minim_call.casl:    9:DATA    DC      23,78,2,45,67,-39,86
13 ../../../../as/FUNC/minim_call.casl:   10:CNT     DC      7
14 ../../../../as/FUNC/minim_call.casl:   11:        END
15
16 Assemble ../../../../as/FUNC/minim.casl (0)
17 ../../../../as/FUNC/minim.casl:    1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
18 ../../../../as/FUNC/minim.casl:    2:MINIM   START
19 ../../../../as/FUNC/minim.casl:    3:        LD      GR0,0,GR1
20 ../../../../as/FUNC/minim.casl:    4:        ST      GR0,MIN
21 ../../../../as/FUNC/minim.casl:    5:        LAD     GR3,0
22 ../../../../as/FUNC/minim.casl:    6:S1      CPA     GR3,GR2
23 ../../../../as/FUNC/minim.casl:    7:        JZE     LRET
24 ../../../../as/FUNC/minim.casl:    8:        LAD     GR1,1,GR1
25 ../../../../as/FUNC/minim.casl:    9:        LD      GR0,0,GR1
26 ../../../../as/FUNC/minim.casl:   10:        CPA     GR0,MIN
27 ../../../../as/FUNC/minim.casl:   11:        JPL     S2
28 ../../../../as/FUNC/minim.casl:   12:        JZE     S2
29 ../../../../as/FUNC/minim.casl:   13:        ST      GR0,MIN
30 ../../../../as/FUNC/minim.casl:   14:S2      LAD     GR3,1,GR3
31 ../../../../as/FUNC/minim.casl:   15:        JUMP    S1
32 ../../../../as/FUNC/minim.casl:   16:LRET    LD      GR0,MIN
33 ../../../../as/FUNC/minim.casl:   17:        RET
34 ../../../../as/FUNC/minim.casl:   18:MIN     DS      1
35 ../../../../as/FUNC/minim.casl:   19:        END
36
37 Assemble ../../../../as/FUNC/outa.casl (0)
38 ../../../../as/FUNC/outa.casl:    1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
39 ../../../../as/FUNC/outa.casl:    2:OUTA    START
40 ../../../../as/FUNC/outa.casl:    3:        RPUSH
41 ../../../../as/FUNC/outa.casl:    4:        LAD     GR2,10          ; GR2に10進数の「10」を格納。
42 ../../../../as/FUNC/outa.casl:    5:        LAD     GR0,0           ; GR0 <- 0
43 ../../../../as/FUNC/outa.casl:    6:        LAD     GR4,0           ; 負数フラグ。GR1が負数の場合、GR4は1
44 ../../../../as/FUNC/outa.casl:    7:        LAD     GR5,0           ; 整数値の長さ
45 ../../../../as/FUNC/outa.casl:    8:        AND     GR1,GR1         ; GR1をテスト
46 ../../../../as/FUNC/outa.casl:    9:        JZE     ZPRT            ; GR1が0の場合、ZPRTにジャンプ
47 ../../../../as/FUNC/outa.casl:   10:        JPL     STI             ; GR1が正数の場合、STIにジャンプ
48 ../../../../as/FUNC/outa.casl:   11:        LAD     GR4,1           ; GR1が負数の場合、GR4をオン
49 ../../../../as/FUNC/outa.casl:   12:        CALL    OABS            ;                  GR1を正数に変換
50 ../../../../as/FUNC/outa.casl:   13:STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
51 ../../../../as/FUNC/outa.casl:   14:        JMI     STLST           ; ↓
52 ../../../../as/FUNC/outa.casl:   15:        CALL    ODIVL           ; GR1とGR2の、商をGR0、剰余をGR3に格納
53 ../../../../as/FUNC/outa.casl:   16:        LD      GR1,GR3         ; GR1にGR3をコピー
54 ../../../../as/FUNC/outa.casl:   17:        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
55 ../../../../as/FUNC/outa.casl:   18:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
56 ../../../../as/FUNC/outa.casl:   19:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
57 ../../../../as/FUNC/outa.casl:   20:        LD      GR1,GR0         ; GR0をGR1にコピー
58 ../../../../as/FUNC/outa.casl:   21:        JUMP    STI             ; ループ終端
59 ../../../../as/FUNC/outa.casl:   22:STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
60 ../../../../as/FUNC/outa.casl:   23:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
61 ../../../../as/FUNC/outa.casl:   24:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
62 ../../../../as/FUNC/outa.casl:   25:        AND     GR4,GR4         ; 正数の場合
63 ../../../../as/FUNC/outa.casl:   26:        JZE     PRT             ; ↓
64 ../../../../as/FUNC/outa.casl:   27:        LD      GR1,='-'        ; 負数の場合、「-」をSTR領域に格納
65 ../../../../as/FUNC/outa.casl:   28:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
66 ../../../../as/FUNC/outa.casl:   29:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
67 ../../../../as/FUNC/outa.casl:   30:        JUMP    PRT             ; PRTにジャンプ
68 ../../../../as/FUNC/outa.casl:   31:ZPRT    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
69 ../../../../as/FUNC/outa.casl:   32:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
70 ../../../../as/FUNC/outa.casl:   33:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
71 ../../../../as/FUNC/outa.casl:   34:PRT     ST      GR5,LEN         ; LEN <- GR5
72 ../../../../as/FUNC/outa.casl:   35:        LD      GR2,LEN         ; GR2にLENの値を格納
73 ../../../../as/FUNC/outa.casl:   36:        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
74 ../../../../as/FUNC/outa.casl:   37:        CALL    REV             ; 文字列を逆順に並べ替え
75 ../../../../as/FUNC/outa.casl:   38:        OUT     STR,LEN         ; 文字列を出力
76 ../../../../as/FUNC/outa.casl:   39:        RPOP
77 ../../../../as/FUNC/outa.casl:   40:        RET
78 ../../../../as/FUNC/outa.casl:   41:STR     DS      17
79 ../../../../as/FUNC/outa.casl:   42:LEN     DS      1
80 ../../../../as/FUNC/outa.casl:   43:NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
81 ../../../../as/FUNC/outa.casl:   44:        END
82 ../../../../as/FUNC/outa.casl:   45:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
83 ../../../../as/FUNC/outa.casl:   46:;;; 0〜65535の範囲の数値を扱う
84 ../../../../as/FUNC/outa.casl:   47:ODIVL   START
85 ../../../../as/FUNC/outa.casl:   48:        PUSH    0,GR1
86 ../../../../as/FUNC/outa.casl:   49:        PUSH    0,GR2
87 ../../../../as/FUNC/outa.casl:   50:        PUSH    0,GR4
88 ../../../../as/FUNC/outa.casl:   51:        AND     GR2,GR2         ; GR2が0の場合、ODFINへジャンプ
89 ../../../../as/FUNC/outa.casl:   52:        JZE     ODFIN           ; ↓
90 ../../../../as/FUNC/outa.casl:   53:        ST      GR2,ODY         ; ODYにGR2の初期値を保存
91 ../../../../as/FUNC/outa.casl:   54:        LAD     GR0,0           ; GR0の初期化
92 ../../../../as/FUNC/outa.casl:   55:        LAD     GR3,0           ; GR3の初期化
93 ../../../../as/FUNC/outa.casl:   56:        LAD     GR4,1           ; GR4の初期化。対象ビットを表す
94 ../../../../as/FUNC/outa.casl:   57:ODSL    CPL     GR2,GR1         ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
95 ../../../../as/FUNC/outa.casl:   58:        JPL     ODLOOP          ; ↓
96 ../../../../as/FUNC/outa.casl:   59:        SLL     GR4,1           ; GR4を1回左シフト
97 ../../../../as/FUNC/outa.casl:   60:        SLL     GR2,1           ; GR2を1回左シフト
98 ../../../../as/FUNC/outa.casl:   61:        JOV     ODYOV           ; オーバーフローの場合は、ODYOVにジャンプ
99 ../../../../as/FUNC/outa.casl:   62:        JUMP    ODSL            ; ループ終端
100 ../../../../as/FUNC/outa.casl:   63:ODYOV   SRL     GR2,1
101 ../../../../as/FUNC/outa.casl:   64:        LAD     GR2,#8000,GR2
102 ../../../../as/FUNC/outa.casl:   65:        SRL     GR4,1
103 ../../../../as/FUNC/outa.casl:   66:        JUMP    ODLPIN
104 ../../../../as/FUNC/outa.casl:   67:ODLOOP  SRL     GR4,1           ; ループ先頭。GR4を1回右シフト
105 ../../../../as/FUNC/outa.casl:   68:        JZE     ODFIN           ; (GR4 = 0)の場合、ループ脱出
106 ../../../../as/FUNC/outa.casl:   69:        SRL     GR2,1           ; GR2を1回右シフト
107 ../../../../as/FUNC/outa.casl:   70:        CPL     GR1,ODY         ; (GR1 < ODY)の場合、ループ脱出
108 ../../../../as/FUNC/outa.casl:   71:        JMI     ODFIN           ; ↓
109 ../../../../as/FUNC/outa.casl:   72:        CPL     GR1,GR2         ; (GR1 < GR2)の場合、ループ先頭へジャンプ
110 ../../../../as/FUNC/outa.casl:   73:        JMI     ODLOOP          ; ↓
111 ../../../../as/FUNC/outa.casl:   74:ODLPIN  SUBL    GR1,GR2         ; GR1 <- GR1 - GR2
112 ../../../../as/FUNC/outa.casl:   75:        ADDL    GR0,GR4         ; GR0 <- GR0 + GR4
113 ../../../../as/FUNC/outa.casl:   76:        JUMP    ODLOOP          ; ループ終端
114 ../../../../as/FUNC/outa.casl:   77:ODFIN   LD      GR3,GR1
115 ../../../../as/FUNC/outa.casl:   78:        POP GR4
116 ../../../../as/FUNC/outa.casl:   79:        POP     GR2
117 ../../../../as/FUNC/outa.casl:   80:        POP     GR1
118 ../../../../as/FUNC/outa.casl:   81:        RET
119 ../../../../as/FUNC/outa.casl:   82:ODY     DS      1        
120 ../../../../as/FUNC/outa.casl:   83:        END
121 ../../../../as/FUNC/outa.casl:   84:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
122 ../../../../as/FUNC/outa.casl:   85:;; 例: 12345 -> 54321、54321- -> -12345
123 ../../../../as/FUNC/outa.casl:   86:REV     START
124 ../../../../as/FUNC/outa.casl:   87:        RPUSH
125 ../../../../as/FUNC/outa.casl:   88:        LAD     GR3,0           ; GR3の初期化
126 ../../../../as/FUNC/outa.casl:   89:RPU     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
127 ../../../../as/FUNC/outa.casl:   90:        JZE     RNEXT           ; ↓
128 ../../../../as/FUNC/outa.casl:   91:        LD      GR4,GR1         ; GR4にGR1の値をコピー
129 ../../../../as/FUNC/outa.casl:   92:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
130 ../../../../as/FUNC/outa.casl:   93:        LD      GR5,0,GR4       ; GR5にアドレスGR4の値を格納
131 ../../../../as/FUNC/outa.casl:   94:        PUSH    0,GR5           ; GR5をプッシュ
132 ../../../../as/FUNC/outa.casl:   95:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
133 ../../../../as/FUNC/outa.casl:   96:        JUMP    RPU             ; ループ終端
134 ../../../../as/FUNC/outa.casl:   97:RNEXT   LAD     GR3,0           ; GR3の初期化
135 ../../../../as/FUNC/outa.casl:   98:RPO     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
136 ../../../../as/FUNC/outa.casl:   99:        JZE     RFIN            ; ↓
137 ../../../../as/FUNC/outa.casl:  100:        POP     GR5             ; GR5にポップ
138 ../../../../as/FUNC/outa.casl:  101:        LD      GR4,GR1         ; GR4にGR1の値をコピー
139 ../../../../as/FUNC/outa.casl:  102:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
140 ../../../../as/FUNC/outa.casl:  103:        ST      GR5,0,GR4       ; アドレスGR4にGR5の値を格納
141 ../../../../as/FUNC/outa.casl:  104:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
142 ../../../../as/FUNC/outa.casl:  105:        JUMP    RPO             ; ループ終端
143 ../../../../as/FUNC/outa.casl:  106:RFIN    RPOP
144 ../../../../as/FUNC/outa.casl:  107:        RET
145 ../../../../as/FUNC/outa.casl:  108:        END
146 ../../../../as/FUNC/outa.casl:  109:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
147 ../../../../as/FUNC/outa.casl:  110:;; 例: -10 -> 10, -20 -> 20
148 ../../../../as/FUNC/outa.casl:  111:OABS    START
149 ../../../../as/FUNC/outa.casl:  112:        XOR     GR1,=#FFFF      ; GR1の値を反転
150 ../../../../as/FUNC/outa.casl:  113:        LAD     GR1,1,GR1       ; GR1 <- GR1 + 1
151 ../../../../as/FUNC/outa.casl:  114:        RET
152 ../../../../as/FUNC/outa.casl:  115:        END
153
154 Label::::
155 ODIVL.ODY ---> #0106
156 OUTA.LEN ---> #00A7
157 ODIVL.ODLOOP ---> #00F0
158 ODIVL.ODLPIN ---> #00FD
159 OUTA.ZPRT ---> #006E
160 OUTA.STI ---> #004E
161 REV.RFIN ---> #0132
162 OUTA.STR ---> #0096
163 ODIVL.ODFIN ---> #0101
164 REV.RPO ---> #0126
165 REV.RPU ---> #0117
166 ODIVL.ODYOV ---> #00E8
167 REV ---> #0107
168 MINIM.LRET ---> #002B
169 MINIM.S1 ---> #0018
170 MINIM.S2 ---> #0027
171 MINIM.MIN ---> #002E
172 REV.RNEXT ---> #0124
173 OABS ---> #013A
174 OUTA.NCHAR ---> #00A8
175 ODIVL.ODSL ---> #00DD
176 OUTA.STLST ---> #005D
177 MAIN ---> #0000
178 ODIVL ---> #00CC
179 OUTA ---> #002F
180 MINIM ---> #0012
181 OUTA.PRT ---> #0074
182 MAIN.DATA ---> #000A
183 MAIN.CNT ---> #0011
184
185 Assemble ../../../../as/FUNC/minim_call.casl (1)
186 ../../../../as/FUNC/minim_call.casl:    1:;;; casl2 minim_call.casl minim.casl outa.casl
187 ../../../../as/FUNC/minim_call.casl:    2:MAIN    START
188 ../../../../as/FUNC/minim_call.casl:    3:        LAD     GR1,DATA
189         #0000   #1210
190         #0001   #000A
191 ../../../../as/FUNC/minim_call.casl:    4:        LD      GR2,CNT
192         #0002   #1020
193         #0003   #0011
194 ../../../../as/FUNC/minim_call.casl:    5:        CALL    MINIM
195         #0004   #8000
196         #0005   #0012
197 ../../../../as/FUNC/minim_call.casl:    6:        LD      GR1,GR0
198         #0006   #1410
199 ../../../../as/FUNC/minim_call.casl:    7:        CALL    OUTA
200         #0007   #8000
201         #0008   #002F
202 ../../../../as/FUNC/minim_call.casl:    8:        RET
203         #0009   #8100
204 ../../../../as/FUNC/minim_call.casl:    9:DATA    DC      23,78,2,45,67,-39,86
205         #000A   #0017
206         #000B   #004E
207         #000C   #0002
208         #000D   #002D
209         #000E   #0043
210         #000F   #FFD9
211         #0010   #0056
212 ../../../../as/FUNC/minim_call.casl:   10:CNT     DC      7
213         #0011   #0007
214 ../../../../as/FUNC/minim_call.casl:   11:        END
215
216 Assemble ../../../../as/FUNC/minim.casl (1)
217 ../../../../as/FUNC/minim.casl:    1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
218 ../../../../as/FUNC/minim.casl:    2:MINIM   START
219 ../../../../as/FUNC/minim.casl:    3:        LD      GR0,0,GR1
220         #0012   #1001
221         #0013   #0000
222 ../../../../as/FUNC/minim.casl:    4:        ST      GR0,MIN
223         #0014   #1100
224         #0015   #002E
225 ../../../../as/FUNC/minim.casl:    5:        LAD     GR3,0
226         #0016   #1230
227         #0017   #0000
228 ../../../../as/FUNC/minim.casl:    6:S1      CPA     GR3,GR2
229         #0018   #4432
230 ../../../../as/FUNC/minim.casl:    7:        JZE     LRET
231         #0019   #6300
232         #001A   #002B
233 ../../../../as/FUNC/minim.casl:    8:        LAD     GR1,1,GR1
234         #001B   #1211
235         #001C   #0001
236 ../../../../as/FUNC/minim.casl:    9:        LD      GR0,0,GR1
237         #001D   #1001
238         #001E   #0000
239 ../../../../as/FUNC/minim.casl:   10:        CPA     GR0,MIN
240         #001F   #4000
241         #0020   #002E
242 ../../../../as/FUNC/minim.casl:   11:        JPL     S2
243         #0021   #6500
244         #0022   #0027
245 ../../../../as/FUNC/minim.casl:   12:        JZE     S2
246         #0023   #6300
247         #0024   #0027
248 ../../../../as/FUNC/minim.casl:   13:        ST      GR0,MIN
249         #0025   #1100
250         #0026   #002E
251 ../../../../as/FUNC/minim.casl:   14:S2      LAD     GR3,1,GR3
252         #0027   #1233
253         #0028   #0001
254 ../../../../as/FUNC/minim.casl:   15:        JUMP    S1
255         #0029   #6400
256         #002A   #0018
257 ../../../../as/FUNC/minim.casl:   16:LRET    LD      GR0,MIN
258         #002B   #1000
259         #002C   #002E
260 ../../../../as/FUNC/minim.casl:   17:        RET
261         #002D   #8100
262 ../../../../as/FUNC/minim.casl:   18:MIN     DS      1
263         #002E   #0000
264 ../../../../as/FUNC/minim.casl:   19:        END
265
266 Assemble ../../../../as/FUNC/outa.casl (1)
267 ../../../../as/FUNC/outa.casl:    1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
268 ../../../../as/FUNC/outa.casl:    2:OUTA    START
269 ../../../../as/FUNC/outa.casl:    3:        RPUSH
270         #002F   #7001
271         #0030   #0000
272         #0031   #7002
273         #0032   #0000
274         #0033   #7003
275         #0034   #0000
276         #0035   #7004
277         #0036   #0000
278         #0037   #7005
279         #0038   #0000
280         #0039   #7006
281         #003A   #0000
282         #003B   #7007
283         #003C   #0000
284 ../../../../as/FUNC/outa.casl:    4:        LAD     GR2,10          ; GR2に10進数の「10」を格納。
285         #003D   #1220
286         #003E   #000A
287 ../../../../as/FUNC/outa.casl:    5:        LAD     GR0,0           ; GR0 <- 0
288         #003F   #1200
289         #0040   #0000
290 ../../../../as/FUNC/outa.casl:    6:        LAD     GR4,0           ; 負数フラグ。GR1が負数の場合、GR4は1
291         #0041   #1240
292         #0042   #0000
293 ../../../../as/FUNC/outa.casl:    7:        LAD     GR5,0           ; 整数値の長さ
294         #0043   #1250
295         #0044   #0000
296 ../../../../as/FUNC/outa.casl:    8:        AND     GR1,GR1         ; GR1をテスト
297         #0045   #3411
298 ../../../../as/FUNC/outa.casl:    9:        JZE     ZPRT            ; GR1が0の場合、ZPRTにジャンプ
299         #0046   #6300
300         #0047   #006E
301 ../../../../as/FUNC/outa.casl:   10:        JPL     STI             ; GR1が正数の場合、STIにジャンプ
302         #0048   #6500
303         #0049   #004E
304 ../../../../as/FUNC/outa.casl:   11:        LAD     GR4,1           ; GR1が負数の場合、GR4をオン
305         #004A   #1240
306         #004B   #0001
307 ../../../../as/FUNC/outa.casl:   12:        CALL    OABS            ;                  GR1を正数に変換
308         #004C   #8000
309         #004D   #013A
310 ../../../../as/FUNC/outa.casl:   13:STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
311         #004E   #4512
312 ../../../../as/FUNC/outa.casl:   14:        JMI     STLST           ; ↓
313         #004F   #6100
314         #0050   #005D
315 ../../../../as/FUNC/outa.casl:   15:        CALL    ODIVL           ; GR1とGR2の、商をGR0、剰余をGR3に格納
316         #0051   #8000
317         #0052   #00CC
318 ../../../../as/FUNC/outa.casl:   16:        LD      GR1,GR3         ; GR1にGR3をコピー
319         #0053   #1413
320 ../../../../as/FUNC/outa.casl:   17:        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
321         #0054   #1011
322         #0055   #00A8
323 ../../../../as/FUNC/outa.casl:   18:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
324         #0056   #1115
325         #0057   #0096
326 ../../../../as/FUNC/outa.casl:   19:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
327         #0058   #1255
328         #0059   #0001
329 ../../../../as/FUNC/outa.casl:   20:        LD      GR1,GR0         ; GR0をGR1にコピー
330         #005A   #1410
331 ../../../../as/FUNC/outa.casl:   21:        JUMP    STI             ; ループ終端
332         #005B   #6400
333         #005C   #004E
334 ../../../../as/FUNC/outa.casl:   22:STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
335         #005D   #1011
336         #005E   #00A8
337 ../../../../as/FUNC/outa.casl:   23:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
338         #005F   #1115
339         #0060   #0096
340 ../../../../as/FUNC/outa.casl:   24:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
341         #0061   #1255
342         #0062   #0001
343 ../../../../as/FUNC/outa.casl:   25:        AND     GR4,GR4         ; 正数の場合
344         #0063   #3444
345 ../../../../as/FUNC/outa.casl:   26:        JZE     PRT             ; ↓
346         #0064   #6300
347         #0065   #0074
348 ../../../../as/FUNC/outa.casl:   27:        LD      GR1,='-'        ; 負数の場合、「-」をSTR領域に格納
349         #013F   #002D
350         #0066   #1010
351         #0067   #013F
352 ../../../../as/FUNC/outa.casl:   28:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
353         #0068   #1115
354         #0069   #0096
355 ../../../../as/FUNC/outa.casl:   29:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
356         #006A   #1255
357         #006B   #0001
358 ../../../../as/FUNC/outa.casl:   30:        JUMP    PRT             ; PRTにジャンプ
359         #006C   #6400
360         #006D   #0074
361 ../../../../as/FUNC/outa.casl:   31:ZPRT    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
362         #006E   #1010
363         #006F   #00A8
364 ../../../../as/FUNC/outa.casl:   32:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
365         #0070   #1115
366         #0071   #0096
367 ../../../../as/FUNC/outa.casl:   33:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
368         #0072   #1255
369         #0073   #0001
370 ../../../../as/FUNC/outa.casl:   34:PRT     ST      GR5,LEN         ; LEN <- GR5
371         #0074   #1150
372         #0075   #00A7
373 ../../../../as/FUNC/outa.casl:   35:        LD      GR2,LEN         ; GR2にLENの値を格納
374         #0076   #1020
375         #0077   #00A7
376 ../../../../as/FUNC/outa.casl:   36:        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
377         #0078   #1210
378         #0079   #0096
379 ../../../../as/FUNC/outa.casl:   37:        CALL    REV             ; 文字列を逆順に並べ替え
380         #007A   #8000
381         #007B   #0107
382 ../../../../as/FUNC/outa.casl:   38:        OUT     STR,LEN         ; 文字列を出力
383         #007C   #7001
384         #007D   #0000
385         #007E   #7002
386         #007F   #0000
387         #0080   #1210
388         #0081   #0096
389         #0082   #1020
390         #0083   #00A7
391         #0084   #F000
392         #0085   #0002
393         #0086   #1210
394         #0087   #0140
395         #0140   #000A
396         #0088   #1220
397         #0089   #0001
398         #008A   #F000
399         #008B   #0002
400         #008C   #7120
401         #008D   #7110
402 ../../../../as/FUNC/outa.casl:   39:        RPOP
403         #008E   #7170
404         #008F   #7160
405         #0090   #7150
406         #0091   #7140
407         #0092   #7130
408         #0093   #7120
409         #0094   #7110
410 ../../../../as/FUNC/outa.casl:   40:        RET
411         #0095   #8100
412 ../../../../as/FUNC/outa.casl:   41:STR     DS      17
413         #0096   #0000
414         #0097   #0000
415         #0098   #0000
416         #0099   #0000
417         #009A   #0000
418         #009B   #0000
419         #009C   #0000
420         #009D   #0000
421         #009E   #0000
422         #009F   #0000
423         #00A0   #0000
424         #00A1   #0000
425         #00A2   #0000
426         #00A3   #0000
427         #00A4   #0000
428         #00A5   #0000
429         #00A6   #0000
430 ../../../../as/FUNC/outa.casl:   42:LEN     DS      1
431         #00A7   #0000
432 ../../../../as/FUNC/outa.casl:   43:NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
433         #00A8   #0030
434         #00A9   #0031
435         #00AA   #0032
436         #00AB   #0033
437         #00AC   #0034
438         #00AD   #0035
439         #00AE   #0036
440         #00AF   #0037
441         #00B0   #0038
442         #00B1   #0039
443         #00B2   #0041
444         #00B3   #0042
445         #00B4   #0043
446         #00B5   #0044
447         #00B6   #0045
448         #00B7   #0046
449         #00B8   #0047
450         #00B9   #0048
451         #00BA   #0049
452         #00BB   #004A
453         #00BC   #004B
454         #00BD   #004C
455         #00BE   #004D
456         #00BF   #004E
457         #00C0   #004F
458         #00C1   #0050
459         #00C2   #0051
460         #00C3   #0052
461         #00C4   #0053
462         #00C5   #0054
463         #00C6   #0055
464         #00C7   #0056
465         #00C8   #0057
466         #00C9   #0058
467         #00CA   #0059
468         #00CB   #005A
469 ../../../../as/FUNC/outa.casl:   44:        END
470 ../../../../as/FUNC/outa.casl:   45:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
471 ../../../../as/FUNC/outa.casl:   46:;;; 0〜65535の範囲の数値を扱う
472 ../../../../as/FUNC/outa.casl:   47:ODIVL   START
473 ../../../../as/FUNC/outa.casl:   48:        PUSH    0,GR1
474         #00CC   #7001
475         #00CD   #0000
476 ../../../../as/FUNC/outa.casl:   49:        PUSH    0,GR2
477         #00CE   #7002
478         #00CF   #0000
479 ../../../../as/FUNC/outa.casl:   50:        PUSH    0,GR4
480         #00D0   #7004
481         #00D1   #0000
482 ../../../../as/FUNC/outa.casl:   51:        AND     GR2,GR2         ; GR2が0の場合、ODFINへジャンプ
483         #00D2   #3422
484 ../../../../as/FUNC/outa.casl:   52:        JZE     ODFIN           ; ↓
485         #00D3   #6300
486         #00D4   #0101
487 ../../../../as/FUNC/outa.casl:   53:        ST      GR2,ODY         ; ODYにGR2の初期値を保存
488         #00D5   #1120
489         #00D6   #0106
490 ../../../../as/FUNC/outa.casl:   54:        LAD     GR0,0           ; GR0の初期化
491         #00D7   #1200
492         #00D8   #0000
493 ../../../../as/FUNC/outa.casl:   55:        LAD     GR3,0           ; GR3の初期化
494         #00D9   #1230
495         #00DA   #0000
496 ../../../../as/FUNC/outa.casl:   56:        LAD     GR4,1           ; GR4の初期化。対象ビットを表す
497         #00DB   #1240
498         #00DC   #0001
499 ../../../../as/FUNC/outa.casl:   57:ODSL    CPL     GR2,GR1         ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
500         #00DD   #4521
501 ../../../../as/FUNC/outa.casl:   58:        JPL     ODLOOP          ; ↓
502         #00DE   #6500
503         #00DF   #00F0
504 ../../../../as/FUNC/outa.casl:   59:        SLL     GR4,1           ; GR4を1回左シフト
505         #00E0   #5240
506         #00E1   #0001
507 ../../../../as/FUNC/outa.casl:   60:        SLL     GR2,1           ; GR2を1回左シフト
508         #00E2   #5220
509         #00E3   #0001
510 ../../../../as/FUNC/outa.casl:   61:        JOV     ODYOV           ; オーバーフローの場合は、ODYOVにジャンプ
511         #00E4   #6600
512         #00E5   #00E8
513 ../../../../as/FUNC/outa.casl:   62:        JUMP    ODSL            ; ループ終端
514         #00E6   #6400
515         #00E7   #00DD
516 ../../../../as/FUNC/outa.casl:   63:ODYOV   SRL     GR2,1
517         #00E8   #5320
518         #00E9   #0001
519 ../../../../as/FUNC/outa.casl:   64:        LAD     GR2,#8000,GR2
520         #00EA   #1222
521         #00EB   #8000
522 ../../../../as/FUNC/outa.casl:   65:        SRL     GR4,1
523         #00EC   #5340
524         #00ED   #0001
525 ../../../../as/FUNC/outa.casl:   66:        JUMP    ODLPIN
526         #00EE   #6400
527         #00EF   #00FD
528 ../../../../as/FUNC/outa.casl:   67:ODLOOP  SRL     GR4,1           ; ループ先頭。GR4を1回右シフト
529         #00F0   #5340
530         #00F1   #0001
531 ../../../../as/FUNC/outa.casl:   68:        JZE     ODFIN           ; (GR4 = 0)の場合、ループ脱出
532         #00F2   #6300
533         #00F3   #0101
534 ../../../../as/FUNC/outa.casl:   69:        SRL     GR2,1           ; GR2を1回右シフト
535         #00F4   #5320
536         #00F5   #0001
537 ../../../../as/FUNC/outa.casl:   70:        CPL     GR1,ODY         ; (GR1 < ODY)の場合、ループ脱出
538         #00F6   #4110
539         #00F7   #0106
540 ../../../../as/FUNC/outa.casl:   71:        JMI     ODFIN           ; ↓
541         #00F8   #6100
542         #00F9   #0101
543 ../../../../as/FUNC/outa.casl:   72:        CPL     GR1,GR2         ; (GR1 < GR2)の場合、ループ先頭へジャンプ
544         #00FA   #4512
545 ../../../../as/FUNC/outa.casl:   73:        JMI     ODLOOP          ; ↓
546         #00FB   #6100
547         #00FC   #00F0
548 ../../../../as/FUNC/outa.casl:   74:ODLPIN  SUBL    GR1,GR2         ; GR1 <- GR1 - GR2
549         #00FD   #2712
550 ../../../../as/FUNC/outa.casl:   75:        ADDL    GR0,GR4         ; GR0 <- GR0 + GR4
551         #00FE   #2604
552 ../../../../as/FUNC/outa.casl:   76:        JUMP    ODLOOP          ; ループ終端
553         #00FF   #6400
554         #0100   #00F0
555 ../../../../as/FUNC/outa.casl:   77:ODFIN   LD      GR3,GR1
556         #0101   #1431
557 ../../../../as/FUNC/outa.casl:   78:        POP GR4
558         #0102   #7140
559 ../../../../as/FUNC/outa.casl:   79:        POP     GR2
560         #0103   #7120
561 ../../../../as/FUNC/outa.casl:   80:        POP     GR1
562         #0104   #7110
563 ../../../../as/FUNC/outa.casl:   81:        RET
564         #0105   #8100
565 ../../../../as/FUNC/outa.casl:   82:ODY     DS      1        
566         #0106   #0000
567 ../../../../as/FUNC/outa.casl:   83:        END
568 ../../../../as/FUNC/outa.casl:   84:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
569 ../../../../as/FUNC/outa.casl:   85:;; 例: 12345 -> 54321、54321- -> -12345
570 ../../../../as/FUNC/outa.casl:   86:REV     START
571 ../../../../as/FUNC/outa.casl:   87:        RPUSH
572         #0107   #7001
573         #0108   #0000
574         #0109   #7002
575         #010A   #0000
576         #010B   #7003
577         #010C   #0000
578         #010D   #7004
579         #010E   #0000
580         #010F   #7005
581         #0110   #0000
582         #0111   #7006
583         #0112   #0000
584         #0113   #7007
585         #0114   #0000
586 ../../../../as/FUNC/outa.casl:   88:        LAD     GR3,0           ; GR3の初期化
587         #0115   #1230
588         #0116   #0000
589 ../../../../as/FUNC/outa.casl:   89:RPU     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
590         #0117   #4532
591 ../../../../as/FUNC/outa.casl:   90:        JZE     RNEXT           ; ↓
592         #0118   #6300
593         #0119   #0124
594 ../../../../as/FUNC/outa.casl:   91:        LD      GR4,GR1         ; GR4にGR1の値をコピー
595         #011A   #1441
596 ../../../../as/FUNC/outa.casl:   92:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
597         #011B   #2643
598 ../../../../as/FUNC/outa.casl:   93:        LD      GR5,0,GR4       ; GR5にアドレスGR4の値を格納
599         #011C   #1054
600         #011D   #0000
601 ../../../../as/FUNC/outa.casl:   94:        PUSH    0,GR5           ; GR5をプッシュ
602         #011E   #7005
603         #011F   #0000
604 ../../../../as/FUNC/outa.casl:   95:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
605         #0120   #1233
606         #0121   #0001
607 ../../../../as/FUNC/outa.casl:   96:        JUMP    RPU             ; ループ終端
608         #0122   #6400
609         #0123   #0117
610 ../../../../as/FUNC/outa.casl:   97:RNEXT   LAD     GR3,0           ; GR3の初期化
611         #0124   #1230
612         #0125   #0000
613 ../../../../as/FUNC/outa.casl:   98:RPO     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
614         #0126   #4532
615 ../../../../as/FUNC/outa.casl:   99:        JZE     RFIN            ; ↓
616         #0127   #6300
617         #0128   #0132
618 ../../../../as/FUNC/outa.casl:  100:        POP     GR5             ; GR5にポップ
619         #0129   #7150
620 ../../../../as/FUNC/outa.casl:  101:        LD      GR4,GR1         ; GR4にGR1の値をコピー
621         #012A   #1441
622 ../../../../as/FUNC/outa.casl:  102:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
623         #012B   #2643
624 ../../../../as/FUNC/outa.casl:  103:        ST      GR5,0,GR4       ; アドレスGR4にGR5の値を格納
625         #012C   #1154
626         #012D   #0000
627 ../../../../as/FUNC/outa.casl:  104:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
628         #012E   #1233
629         #012F   #0001
630 ../../../../as/FUNC/outa.casl:  105:        JUMP    RPO             ; ループ終端
631         #0130   #6400
632         #0131   #0126
633 ../../../../as/FUNC/outa.casl:  106:RFIN    RPOP
634         #0132   #7170
635         #0133   #7160
636         #0134   #7150
637         #0135   #7140
638         #0136   #7130
639         #0137   #7120
640         #0138   #7110
641 ../../../../as/FUNC/outa.casl:  107:        RET
642         #0139   #8100
643 ../../../../as/FUNC/outa.casl:  108:        END
644 ../../../../as/FUNC/outa.casl:  109:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
645 ../../../../as/FUNC/outa.casl:  110:;; 例: -10 -> 10, -20 -> 20
646 ../../../../as/FUNC/outa.casl:  111:OABS    START
647 ../../../../as/FUNC/outa.casl:  112:        XOR     GR1,=#FFFF      ; GR1の値を反転
648         #0141   #FFFF
649         #013A   #3210
650         #013B   #0141
651 ../../../../as/FUNC/outa.casl:  113:        LAD     GR1,1,GR1       ; GR1 <- GR1 + 1
652         #013C   #1211
653         #013D   #0001
654 ../../../../as/FUNC/outa.casl:  114:        RET
655         #013E   #8100
656 ../../../../as/FUNC/outa.casl:  115:        END
657 -39