-32768〜32767の数値を出力するアセンブラプログラムouti.caslを修正し、テストを追加
[YACASL2.git] / test / astest / outi / 0.txt
1
2 Assemble ../../../as/outi_call.casl (0)
3
4 Assemble ../../../as/outi.casl (0)
5
6 Label::::
7 VAL ---> #0010
8 STR ---> #006F
9 DFIN ---> #0083
10 RNEXT ---> #0099
11 CNT ---> #001E
12 DIV10 ---> #0076
13 RFIN ---> #00A7
14 ILOOP ---> #0032
15 REV ---> #0084
16 PRT ---> #0051
17 LOOP ---> #0004
18 ZCHAR ---> #006E
19 MAIN ---> #0000
20 INEXT ---> #0041
21 INV ---> #00AB
22 RPO ---> #009B
23 RPU ---> #008C
24 OUTI ---> #001F
25 DLOOP ---> #0079
26 FIN ---> #000F
27 LEN ---> #0075
28 TEN ---> #006D
29
30 Assemble ../../../as/outi_call.casl (1)
31 ../../../as/outi_call.casl:1:; need outi.casl
32 ../../../as/outi_call.casl:2:MAIN    START
33 ../../../as/outi_call.casl:3:        LAD GR2,0
34         #0000   #1220
35         #0001   #0000
36 ../../../as/outi_call.casl:4:        LD  GR3,CNT
37         #0002   #1030
38         #0003   #001E
39 ../../../as/outi_call.casl:5:LOOP    LD GR1,VAL,GR2
40         #0004   #1012
41         #0005   #0010
42 ../../../as/outi_call.casl:6:        CALL    OUTI
43         #0006   #8000
44         #0007   #001F
45 ../../../as/outi_call.casl:7:        LAD GR2,1,GR2
46         #0008   #1222
47         #0009   #0001
48 ../../../as/outi_call.casl:8:        CPA GR2,GR3
49         #000A   #4423
50 ../../../as/outi_call.casl:9:        JZE FIN
51         #000B   #6300
52         #000C   #000F
53 ../../../as/outi_call.casl:10:        JUMP LOOP
54         #000D   #6400
55         #000E   #0004
56 ../../../as/outi_call.casl:11:FIN RET
57         #000F   #8100
58 ../../../as/outi_call.casl:12:        END
59 ../../../as/outi_call.casl:13:VAL DC  #0000,#0001,#0002,#0010,#0100,#1000,#7FFF,#FFFF,#FFFE,#FFF0,#FF00,#F000,#8001,#8000
60         #0010   #0000
61         #0011   #0001
62         #0012   #0002
63         #0013   #0010
64         #0014   #0100
65         #0015   #1000
66         #0016   #7FFF
67         #0017   #FFFF
68         #0018   #FFFE
69         #0019   #FFF0
70         #001A   #FF00
71         #001B   #F000
72         #001C   #8001
73         #001D   #8000
74 ../../../as/outi_call.casl:14:CNT DC  14
75         #001E   #000E
76
77 Assemble ../../../as/outi.casl (1)
78 ../../../as/outi.casl:1:;GR1に格納された数値を表示
79 ../../../as/outi.casl:2:OUTI    START
80 ../../../as/outi.casl:3:        PUSH    0,GR2
81         #001F   #7002
82         #0020   #0000
83 ../../../as/outi.casl:4:        PUSH    0,GR3
84         #0021   #7003
85         #0022   #0000
86 ../../../as/outi.casl:5:        PUSH    0,GR4
87         #0023   #7004
88         #0024   #0000
89 ../../../as/outi.casl:6:        LAD GR0,0               ; 負数フラグ。GR1が負数の場合、GR0は1
90         #0025   #1200
91         #0026   #0000
92 ../../../as/outi.casl:7:        LAD GR2,0
93         #0027   #1220
94         #0028   #0000
95 ../../../as/outi.casl:8:        AND GR1,GR1
96         #0029   #3411
97 ../../../as/outi.casl:9:        JZE INEXT               ; GR1が0の場合
98         #002A   #6300
99         #002B   #0041
100 ../../../as/outi.casl:10:        JPL ILOOP               ; GR1が正数の場合
101         #002C   #6500
102         #002D   #0032
103 ../../../as/outi.casl:11:        LAD GR0,1               ; GR1が負数の場合、負数フラグ設定
104         #002E   #1200
105         #002F   #0001
106 ../../../as/outi.casl:12:        CALL INV                ;            負数を正数に変換
107         #0030   #8000
108         #0031   #00AB
109 ../../../as/outi.casl:13:ILOOP   CPL GR1,TEN
110         #0032   #4110
111         #0033   #006D
112 ../../../as/outi.casl:14:        JMI INEXT               ; GR1が10未満の場合は、ループ終了
113         #0034   #6100
114         #0035   #0041
115 ../../../as/outi.casl:15:        CALL    DIV10           ; (GR1 / 10)の商をGR3、剰余をGR4に格納
116         #0036   #8000
117         #0037   #0076
118 ../../../as/outi.casl:16:        ADDL    GR4,ZCHAR       ; (GR1 / 10)の剰余を文字に変換
119         #0038   #2240
120         #0039   #006E
121 ../../../as/outi.casl:17:        ST  GR4,STR,GR2         ; 文字をメモリに格納
122         #003A   #1142
123         #003B   #006F
124 ../../../as/outi.casl:18:        LAD GR2,1,GR2           ; GR2をインクリメント
125         #003C   #1222
126         #003D   #0001
127 ../../../as/outi.casl:19:        LD  GR1,GR3             ; (GR1 / 10)の商をGR1に格納
128         #003E   #1413
129 ../../../as/outi.casl:20:        JUMP    ILOOP
130         #003F   #6400
131         #0040   #0032
132 ../../../as/outi.casl:21:INEXT   ADDL    GR1,ZCHAR       ; ループ終了後の剰余を文字に変換
133         #0041   #2210
134         #0042   #006E
135 ../../../as/outi.casl:22:        ST  GR1,STR,GR2         ; 文字をメモリに格納
136         #0043   #1112
137         #0044   #006F
138 ../../../as/outi.casl:23:        LAD GR2,1,GR2           ; GR2をインクリメント
139         #0045   #1222
140         #0046   #0001
141 ../../../as/outi.casl:24:        CPL GR0,=1              ; 負数フラグ判定
142         #00B0   #0001
143         #0047   #4100
144         #0048   #00B0
145 ../../../as/outi.casl:25:        JNZ PRT
146         #0049   #6200
147         #004A   #0051
148 ../../../as/outi.casl:26:        LD  GR1,='-'           ; 負数フラグがオンの場合、「-」をロード
149         #00B1   #002D
150         #004B   #1010
151         #004C   #00B1
152 ../../../as/outi.casl:27:        ST  GR1,STR,GR2         ; 「-」をメモリに格納
153         #004D   #1112
154         #004E   #006F
155 ../../../as/outi.casl:28:        LAD GR2,1,GR2           ; GR2をインクリメント
156         #004F   #1222
157         #0050   #0001
158 ../../../as/outi.casl:29:PRT     ST  GR2,LEN             ; GR2をメモリに格納
159         #0051   #1120
160         #0052   #0075
161 ../../../as/outi.casl:30:        LAD GR1,STR             ; GR1に文字列のアドレスを格納
162         #0053   #1210
163         #0054   #006F
164 ../../../as/outi.casl:31:        CALL    REV             ; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
165         #0055   #8000
166         #0056   #0084
167 ../../../as/outi.casl:32:        OUT STR,LEN             ; 文字列を印字
168         #0057   #7001
169         #0058   #0000
170         #0059   #7002
171         #005A   #0000
172         #005B   #1210
173         #005C   #006F
174         #005D   #1020
175         #005E   #0075
176         #005F   #F000
177         #0060   #0002
178         #0061   #1210
179         #0062   #00B2
180         #00B2   #000A
181         #0063   #1220
182         #0064   #0001
183         #0065   #F000
184         #0066   #0002
185         #0067   #7120
186         #0068   #7110
187 ../../../as/outi.casl:33:        POP GR4
188         #0069   #7140
189 ../../../as/outi.casl:34:        POP GR3
190         #006A   #7130
191 ../../../as/outi.casl:35:        POP GR2
192         #006B   #7120
193 ../../../as/outi.casl:36:        RET
194         #006C   #8100
195 ../../../as/outi.casl:37:TEN     DC  10
196         #006D   #000A
197 ../../../as/outi.casl:38:ZCHAR   DC '0'
198         #006E   #0030
199 ../../../as/outi.casl:39:STR     DS  6
200         #006F   #0000
201         #0070   #0000
202         #0071   #0000
203         #0072   #0000
204         #0073   #0000
205         #0074   #0000
206 ../../../as/outi.casl:40:LEN     DS  1
207         #0075   #0000
208 ../../../as/outi.casl:41:        END
209 ../../../as/outi.casl:42:;GR1を10で割ったときの商をGR3、剰余をGR4に格納
210 ../../../as/outi.casl:43:DIV10   LD  GR4,GR1         ; GR1の値をGR4にコピー
211         #0076   #1441
212 ../../../as/outi.casl:44:        LAD GR3,0
213         #0077   #1230
214         #0078   #0000
215 ../../../as/outi.casl:45:DLOOP   CPL GR4,TEN
216         #0079   #4140
217         #007A   #006D
218 ../../../as/outi.casl:46:        JMI DFIN            ; GR4が10未満の場合は終了
219         #007B   #6100
220         #007C   #0083
221 ../../../as/outi.casl:47:        SUBL    GR4,TEN     ; GR4 <- GR4 - 10
222         #007D   #2340
223         #007E   #006D
224 ../../../as/outi.casl:48:        LAD GR3,1,GR3       ; GR3をインクリメント
225         #007F   #1233
226         #0080   #0001
227 ../../../as/outi.casl:49:        JUMP    DLOOP
228         #0081   #6400
229         #0082   #0079
230 ../../../as/outi.casl:50:DFIN    RET
231         #0083   #8100
232 ../../../as/outi.casl:51:        END
233 ../../../as/outi.casl:52:;アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
234 ../../../as/outi.casl:53:;例: 12345 -> 54321
235 ../../../as/outi.casl:54:REV     START
236 ../../../as/outi.casl:55:        PUSH    0,GR3
237         #0084   #7003
238         #0085   #0000
239 ../../../as/outi.casl:56:        PUSH    0,GR4
240         #0086   #7004
241         #0087   #0000
242 ../../../as/outi.casl:57:        PUSH    0,GR5
243         #0088   #7005
244         #0089   #0000
245 ../../../as/outi.casl:58:        LAD GR3,1
246         #008A   #1230
247         #008B   #0001
248 ../../../as/outi.casl:59:RPU     CPL GR2,GR3
249         #008C   #4523
250 ../../../as/outi.casl:60:        JMI RNEXT
251         #008D   #6100
252         #008E   #0099
253 ../../../as/outi.casl:61:        LD  GR4,GR1
254         #008F   #1441
255 ../../../as/outi.casl:62:        ADDL    GR4,GR3
256         #0090   #2643
257 ../../../as/outi.casl:63:        LD  GR4,-1,GR4
258         #0091   #1044
259         #0092   #FFFF
260 ../../../as/outi.casl:64:        PUSH 0,GR4
261         #0093   #7004
262         #0094   #0000
263 ../../../as/outi.casl:65:        LAD GR3,1,GR3
264         #0095   #1233
265         #0096   #0001
266 ../../../as/outi.casl:66:        JUMP    RPU
267         #0097   #6400
268         #0098   #008C
269 ../../../as/outi.casl:67:RNEXT   LAD GR3,1
270         #0099   #1230
271         #009A   #0001
272 ../../../as/outi.casl:68:RPO     CPL GR2,GR3
273         #009B   #4523
274 ../../../as/outi.casl:69:        JMI RFIN
275         #009C   #6100
276         #009D   #00A7
277 ../../../as/outi.casl:70:        POP GR4
278         #009E   #7140
279 ../../../as/outi.casl:71:        LD  GR5,GR1
280         #009F   #1451
281 ../../../as/outi.casl:72:        ADDL    GR5,GR3
282         #00A0   #2653
283 ../../../as/outi.casl:73:        ST  GR4,-1,GR5
284         #00A1   #1145
285         #00A2   #FFFF
286 ../../../as/outi.casl:74:        LAD GR3,1,GR3
287         #00A3   #1233
288         #00A4   #0001
289 ../../../as/outi.casl:75:        JUMP    RPO
290         #00A5   #6400
291         #00A6   #009B
292 ../../../as/outi.casl:76:RFIN    POP GR5
293         #00A7   #7150
294 ../../../as/outi.casl:77:        POP GR4
295         #00A8   #7140
296 ../../../as/outi.casl:78:        POP GR3
297         #00A9   #7130
298 ../../../as/outi.casl:79:        RET
299         #00AA   #8100
300 ../../../as/outi.casl:80:        END
301 ../../../as/outi.casl:81:;GR1の内容をマイナス値にする
302 ../../../as/outi.casl:82:;例: 10 -> -10, -20 -> 20
303 ../../../as/outi.casl:83:INV     START
304 ../../../as/outi.casl:84:        XOR GR1,=#FFFF
305         #00B3   #FFFF
306         #00AB   #3210
307         #00AC   #00B3
308 ../../../as/outi.casl:85:        LAD GR1,1,GR1
309         #00AD   #1211
310         #00AE   #0001
311 ../../../as/outi.casl:86:        RET
312         #00AF   #8100
313 ../../../as/outi.casl:87:        END
314 0
315 1
316 2
317 16
318 256
319 4096
320 32767
321 -1
322 -2
323 -16
324 -256
325 -4096
326 -32767
327 -32768