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