https://github.com/akkartik/mu/blob/master/subx/055trace.subx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 == data
23
24
25 Trace-stream:
26 00 00 00 00
27
28
29
30 _test-trace-stream:
31
32 00 00 00 00
33
34 00 00 00 00
35
36 08 00 00 00
37
38 00 00 00 00 00 00 00 00
39
40 == code
41
42
43
44
45
46
47 e8/call run-tests/disp32
48
49 8b/copy 0/mod/indirect 5/rm32/.disp32 3/r32/EBX Num-test-failures/disp32
50 b8/copy-to-EAX 1/imm32
51 cd/syscall 0x80/imm8
52
53
54
55 initialize-trace-stream:
56
57
58 68/push 0x1000/imm32/N
59
60 e8/call new-segment/disp32
61
62 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
63
64 89/copy 0/mod/indirect 5/rm32/.disp32 0/r32/EAX Trace-stream/disp32
65
66 c7 0/copy 1/mod/*+disp8 0/rm32/EAX 8/disp8 0xff4/imm32
67 c3/return
68
69
70
71 trace:
72
73 55/push-EBP
74 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
75
76 50/push-EAX
77 51/push-ECX
78 52/push-EDX
79 53/push-EBX
80 56/push-ESI
81 57/push-EDI
82
83 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 7/r32/EDI 8/disp8
84
85 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 6/r32/ESI 0xc/disp8
86
87 8b/copy 0/mod/indirect 7/rm32/EDI 1/r32/ECX
88
89 8b/copy 1/mod/*+disp8 7/rm32/EDI 2/r32/EDX 8/disp8
90
91
92 56/push-ESI
93
94 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/EDI 2/index/EDX 3/r32/EBX 0xc/disp8
95 53/push-EBX
96
97 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/EDI 1/index/ECX 3/r32/EBX 0xc/disp8
98 53/push-EBX
99
100 e8/call _append-3/disp32
101
102 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
103
104 81 7/subop/compare 3/mod/direct 0/rm32/EAX 0/imm32
105 74/jump-if-equal $trace:end/disp8
106
107 01/add 0/mod/indirect 7/rm32/EDI 0/r32/EAX
108
109 8b/copy 0/mod/indirect 7/rm32/EDI 1/r32/ECX
110
111
112 68/push Newline/imm32
113
114 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/EDI 2/index/EDX 3/r32/EBX 0xc/disp8
115 53/push-EBX
116
117 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/EDI 1/index/ECX 3/r32/EBX 0xc/disp8
118 53/push-EBX
119
120 e8/call _append-3/disp32
121
122 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
123
124 01/add 0/mod/indirect 7/rm32/EDI 0/r32/EAX
125 $trace:end:
126
127 5f/pop-to-EDI
128 5e/pop-to-ESI
129 5b/pop-to-EBX
130 5a/pop-to-EDX
131 59/pop-to-ECX
132 58/pop-to-EAX
133
134 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
135 5d/pop-to-EBP
136 c3/return
137
138 clear-trace-stream:
139
140 55/push-EBP
141 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
142
143 50/push-EAX
144 51/push-ECX
145
146 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0/r32/EAX 8/disp8
147
148 8b/copy 1/mod/*+disp8 0/rm32/EAX 1/r32/ECX 8/disp8
149
150 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX 1/r32/ECX 0xc/disp8
151
152 c7/copy 0/mod/direct 0/rm32/EAX 0/imm32
153
154 c7/copy 1/mod/*+disp8 0/rm32/EAX 4/disp8 0/imm32
155
156 81 0/subop/add 3/mod/direct 0/rm32/EAX 0xc/imm32
157
158 $clear-trace-stream:loop:
159
160 39/compare 3/mod/direct 0/rm32/EAX 1/r32/ECX
161 7d/jump-if-greater-or-equal $clear-trace-stream:end/disp8
162
163 c7/copy 0/mod/direct 0/rm32/EAX 0/imm32
164
165 81 0/subop/add 3/mod/direct 0/rm32/EAX 4/imm32
166 eb/jump $clear-trace-stream:loop/disp8
167 $clear-trace-stream:end:
168
169 59/pop-to-ECX
170 58/pop-to-EAX
171
172 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
173 5d/pop-to-EBP
174 c3/return
175
176
177
178 test-trace-single:
179
180
181 68/push _test-trace-stream/imm32
182
183 e8/call clear-trace-stream/disp32
184
185 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
186
187
188 68/push "Ab"/imm32
189 68/push _test-trace-stream/imm32
190
191 e8/call trace/disp32
192
193 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
194
195
196 68/push "F - test-trace-single"/imm32
197 68/push 0x0a6241/imm32/Ab-newline
198
199 b8/copy-to-EAX _test-trace-stream/imm32
200 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 0xc/disp8
201
202 e8/call check-ints-equal/disp32
203
204 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
205
206 c3/return
207
208 test-trace-appends:
209
210
211 68/push _test-trace-stream/imm32
212
213 e8/call clear-trace-stream/disp32
214
215 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
216
217
218 68/push "C"/imm32
219 68/push _test-trace-stream/imm32
220
221 e8/call trace/disp32
222
223 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
224
225
226 68/push "D"/imm32
227 68/push _test-trace-stream/imm32
228
229 e8/call trace/disp32
230
231 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
232
233
234 68/push "F - test-trace-appends"/imm32
235 68/push 0x0a440a43/imm32/C-newline-D-newline
236
237 b8/copy-to-EAX _test-trace-stream/imm32
238 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 0xc/disp8
239
240 e8/call check-ints-equal/disp32
241
242 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
243
244 c3/return
245
246 test-trace-empty-line:
247
248
249 68/push _test-trace-stream/imm32
250
251 e8/call clear-trace-stream/disp32
252
253 81 0/subop/add 3/mod/direct 4/rm32/ESP 4/imm32
254
255
256 68/push ""/imm32
257 68/push _test-trace-stream/imm32
258
259 e8/call trace/disp32
260
261 81 0/subop/add 3/mod/direct 4/rm32/ESP 8/imm32
262
263
264 68/push "F - test-trace-empty-line"/imm32
265 68/push 0/imm32
266
267 b8/copy-to-EAX _test-trace-stream/imm32
268 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX 0xc/disp8
269
270 e8/call check-ints-equal/disp32
271
272 81 0/subop/add 3/mod/direct 4/rm32/ESP 0xc/imm32
273
274 c3/return
275
276
277
278
279 _append-3:
280
281 55/push-EBP
282 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
283
284 51/push-ECX
285
286
287 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0/r32/EAX 0x10/disp8
288 8b/copy 0/mod/indirect 0/rm32/EAX 1/r32/ECX
289 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX 1/r32/ECX 4/disp8
290 51/push-ECX
291
292 8d/copy-address 1/mod/*+disp8 0/rm32/EAX 1/r32/ECX 4/disp8
293 51/push-ECX
294
295 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0xc/disp8
296
297 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0x8/disp8
298
299 e8/call _append-4/disp32
300
301 81 0/subop/add 3/mod/direct 4/rm32/ESP 0x10/imm32
302
303 59/pop-to-ECX
304
305 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
306 5d/pop-to-EBP
307 c3/return
308
309
310 _append-4:
311
312 55/push-EBP
313 89/copy 3/mod/direct 5/rm32/EBP 4/r32/ESP
314
315 51/push-ECX
316 52/push-EDX
317 53/push-EBX
318 56/push-ESI
319 57/push-EDI
320
321 b8/copy-to-EAX 0/imm32
322
323 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 7/r32/EDI 0x8/disp8
324
325 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 2/r32/EDX 0xc/disp8
326
327 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 6/r32/ESI 0x10/disp8
328
329 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 1/r32/ECX 0x14/disp8
330 $_append-4:loop:
331
332 39/compare 3/mod/direct 6/rm32/ESI 1/r32/ECX
333 7d/jump-if-greater-or-equal $_append-4:end/disp8
334
335 39/compare 3/mod/direct 7/rm32/EDI 2/r32/EDX
336 7d/jump-if-greater-or-equal $_append-4:end/disp8
337
338 8a/copy-byte 0/mod/indirect 6/rm32/ESI 3/r32/BL
339 88/copy-byte 0/mod/indirect 7/rm32/EDI 3/r32/BL
340
341 40/increment-EAX
342 46/increment-ESI
343 47/increment-EDI
344 eb/jump $_append-4:loop/disp8
345 $_append-4:end:
346
347 5f/pop-to-EDI
348 5e/pop-to-ESI
349 5b/pop-to-EBX
350 5a/pop-to-EDX
351 59/pop-to-ECX
352
353 89/copy 3/mod/direct 4/rm32/ESP 5/r32/EBP
354 5d/pop-to-EBP
355 c3/return
356
357