https://github.com/akkartik/mu/blob/master/apps/tests.subx
1
2
3
4
5
6
7 == code
8
9
10
11
12 Entry:
13
14
15 68/push Heap/imm32
16 68/push Heap-size/imm32
17
18 e8/call new-segment/disp32
19
20 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
21
22
23 68/push 0x40000/imm32/256KB
24
25 e8/call initialize-trace-stream/disp32
26
27 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
28
29
30
31 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
32
33
34
35 81 7/subop/compare 1/mod/*+disp8 5/rm32/EBP . . . . 0/disp8 1/imm32
36 7e/jump-if-lesser-or-equal $run-main/disp8
37
38
39 68/push "test"/imm32
40 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 8/disp8 .
41
42 e8/call kernel-string-equal?/disp32
43
44 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
45
46 3d/compare-EAX-and 1/imm32
47 75/jump-if-not-equal $run-main/disp8
48
49 e8/call run-tests/disp32
50 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 3/r32/EBX Num-test-failures/disp32
51 eb/jump $main:end/disp8
52 $run-main:
53
54
55
56 68/push Stdout/imm32
57 68/push Stdin/imm32
58
59 e8/call convert/disp32
60
61 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
62
63 bb/copy-to-EBX 0/imm32
64 $main:end:
65 b8/copy-to-EAX 1/imm32/exit
66 cd/syscall 0x80/imm8
67
68 convert:
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 55/push-EBP
95 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
96
97 50/push-EAX
98 51/push-ECX
99 52/push-EDX
100 53/push-EBX
101 57/push-EDI
102
103 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 0x200/imm32
104 68/push 0x200/imm32/length
105 68/push 0/imm32/read
106 68/push 0/imm32/write
107 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . .
108
109 68/push 0/imm32/end
110 68/push 0/imm32/start
111 89/copy 3/mod/direct 2/rm32/EDX . . . 4/r32/ESP . .
112
113 31/xor 3/mod/direct 3/rm32/EBX . . . 3/r32/EBX . .
114
115
116
117 68/push 1/imm32
118 ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 . . . Segment-size/disp32
119 68/push Heap/imm32
120
121 e8/call new-stream/disp32
122
123 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
124
125 89/copy 3/mod/direct 7/rm32/EDI . . . 0/r32/EAX . .
126
127
128 68/push "\n== code\n"/imm32
129 57/push-EDI
130
131 e8/call write/disp32
132
133 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
134
135
136 68/push "run-tests:\n"/imm32
137 57/push-EDI
138
139 e8/call write/disp32
140
141 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
142 $convert:loop:
143
144
145 51/push-ECX
146
147 e8/call clear-stream/disp32
148
149 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
150
151
152 51/push-ECX
153 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 8/disp8 .
154
155 e8/call read-line-buffered/disp32
156
157 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
158 $convert:check0:
159
160 81 7/subop/compare 0/mod/indirect 1/rm32/ECX . . . . . 0/imm32
161 0f 84/jump-if-equal $convert:break/disp32
162
163
164 52/push-EDX
165 51/push-ECX
166
167 e8/call next-word/disp32
168
169 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
170 $convert:check-for-label:
171
172
173
174 52/push-EDX
175
176 e8/call is-label?/disp32
177
178 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
179
180 3d/compare-EAX-and 0/imm32
181 74/jump-if-equal $convert:continue/disp8
182 $convert:check-label-prefix:
183
184 ff 1/subop/decrement 1/mod/*+disp8 2/rm32/EDX . . . . 4/disp8 .
185
186
187 68/push "test-"/imm32
188 52/push-EDX
189
190 e8/call slice-starts-with?/disp32
191
192 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
193
194 3d/compare-EAX-and 0/imm32
195 74/jump-if-equal $convert:continue/disp8
196 $convert:call-test-function:
197
198 bb/copy-to-EBX 1/imm32/true
199
200
201 68/push " e8/call "/imm32
202 57/push-EDI
203
204 e8/call write/disp32
205
206 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
207
208
209 52/push-EDX
210 57/push-EDI
211
212 e8/call write-slice/disp32
213
214 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
215
216
217 68/push "/disp32\n"/imm32
218 57/push-EDI
219
220 e8/call write/disp32
221
222 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
223 $convert:continue:
224
225
226 51/push-ECX
227
228 e8/call rewind-stream/disp32
229
230 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
231
232
233 51/push-ECX
234 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 .
235
236 e8/call write-stream-data/disp32
237
238 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
239
240 e9/jump $convert:loop/disp32
241 $convert:break:
242
243 81 7/subop/compare 3/mod/direct 3/rm32/EBX . . . . . 0/imm32
244 74/jump-if-equal $convert:end/disp8
245
246
247 68/push " c3/return\n"/imm32
248 57/push-EDI
249
250 e8/call write/disp32
251
252 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
253
254
255 57/push-EDI
256 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 .
257
258 e8/call write-stream-data/disp32
259
260 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
261 $convert:end:
262
263
264 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 .
265
266 e8/call flush/disp32
267
268 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
269
270 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x214/imm32
271
272 5f/pop-to-EDI
273 5b/pop-to-EBX
274 5a/pop-to-EDX
275 59/pop-to-ECX
276 58/pop-to-EAX
277
278 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
279 5d/pop-to-EBP
280 c3/return
281
282