https://github.com/akkartik/mu/blob/master/subx/073next-token.subx
1
2
3 == code
4
5
6
7
8
9
10 next-token:
11
12 55/push-EBP
13 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
14
15 50/push-EAX
16 51/push-ECX
17 56/push-ESI
18 57/push-EDI
19
20 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 6/r32/ESI 8/disp8 .
21
22 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 7/r32/EDI 0x10/disp8 .
23
24
25 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 .
26 56/push-ESI
27
28 e8/call skip-chars-matching/disp32
29
30 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
31
32 8b/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
33 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/ESI 1/index/ECX . 0/r32/EAX 0xc/disp8 .
34 89/copy 0/mod/indirect 7/rm32/EDI . . . 0/r32/EAX . .
35
36
37 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 .
38 56/push-ESI
39
40 e8/call skip-chars-not-matching/disp32
41
42 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
43
44 8b/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
45 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/ESI 1/index/ECX . 0/r32/EAX 0xc/disp8 .
46 89/copy 1/mod/*+disp8 7/rm32/EDI . . . 0/r32/EAX 4/disp8 .
47
48 5f/pop-to-EDI
49 5e/pop-to-ESI
50 59/pop-to-ECX
51 58/pop-to-EAX
52
53 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
54 5d/pop-to-EBP
55 c3/return
56
57 test-next-token:
58
59 55/push-EBP
60 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
61
62
63
64 68/push _test-stream/imm32
65
66 e8/call clear-stream/disp32
67
68 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
69
70 68/push 0/imm32/end
71 68/push 0/imm32/start
72 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . .
73
74
75 68/push " ab"/imm32
76 68/push _test-stream/imm32
77
78 e8/call write/disp32
79
80 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
81
82
83 51/push-ECX
84 68/push 0x20/imm32
85 68/push _test-stream/imm32
86
87 e8/call next-token/disp32
88
89 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
90
91
92
93 68/push "F - test-next-token: start"/imm32
94 68/push 0xe/imm32
95
96 8b/copy 0/mod/indirect 1/rm32/ECX . . . 0/r32/EAX . .
97 81 5/subop/subtract 3/mod/direct 0/rm32/EAX . . . . . _test-stream/imm32
98 50/push-EAX
99
100 e8/call check-ints-equal/disp32
101
102 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
103
104
105
106 68/push "F - test-next-token: end"/imm32
107 68/push 0x10/imm32
108
109 8b/copy 1/mod/*+disp8 1/rm32/ECX . . . 0/r32/EAX 4/disp8 .
110 81 5/subop/subtract 3/mod/direct 0/rm32/EAX . . . . . _test-stream/imm32
111 50/push-EAX
112
113 e8/call check-ints-equal/disp32
114
115 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
116
117 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
118 5d/pop-to-EBP
119 c3/return
120
121 test-next-token-Eof:
122
123 55/push-EBP
124 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
125
126
127
128 68/push _test-stream/imm32
129
130 e8/call clear-stream/disp32
131
132 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
133
134 68/push 0/imm32/end
135 68/push 0/imm32/start
136 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . .
137
138
139
140 51/push-ECX
141 68/push 0x20/imm32
142 68/push _test-stream/imm32
143
144 e8/call next-token/disp32
145
146 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
147
148
149 68/push "F - test-next-token-Eof"/imm32
150 ff 6/subop/push 1/mod/*+disp8 1/rm32/ECX . . . . 4/disp8 .
151 ff 6/subop/push 0/mod/indirect 1/rm32/ECX . . . . . .
152
153 e8/call check-ints-equal/disp32
154
155 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
156
157 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
158 5d/pop-to-EBP
159 c3/return
160
161
162
163 next-token-from-slice:
164
165 55/push-EBP
166 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
167
168 50/push-EAX
169 51/push-ECX
170 52/push-EDX
171 57/push-EDI
172
173 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 1/r32/ECX 0xc/disp8 .
174
175 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 2/r32/EDX 0x10/disp8 .
176
177 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 7/r32/EDI 0x14/disp8 .
178
179
180 52/push-EDX
181 51/push-ECX
182 ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 8/disp8 .
183
184 e8/call skip-chars-matching-in-slice/disp32
185
186 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
187
188 89/copy 0/mod/indirect 7/rm32/EDI . . . 0/r32/EAX . .
189
190
191 52/push-EDX
192 51/push-ECX
193 50/push-EAX
194
195 e8/call skip-chars-not-matching-in-slice/disp32
196
197 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
198
199 89/copy 1/mod/*+disp8 7/rm32/EDI . . . 0/r32/EAX 4/disp8 .
200
201 5f/pop-to-EDI
202 5a/pop-to-EDX
203 59/pop-to-ECX
204 58/pop-to-EAX
205
206 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
207 5d/pop-to-EBP
208 c3/return
209
210 test-next-token-from-slice:
211
212 55/push-EBP
213 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
214
215 b8/copy-to-EAX " ab"/imm32
216 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
217 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
218 05/add-to-EAX 4/imm32
219
220 68/push 0/imm32/end
221 68/push 0/imm32/start
222 89/copy 3/mod/direct 7/rm32/EDI . . . 4/r32/ESP . .
223
224
225 57/push-EDI
226 68/push 0x20/imm32
227 51/push-ECX
228 50/push-EAX
229
230 e8/call next-token-from-slice/disp32
231
232 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x10/imm32
233
234
235
236 68/push "F - test-next-token-from-slice: start"/imm32
237 68/push 2/imm32
238
239 8b/copy 0/mod/indirect 7/rm32/EDI . . . 1/r32/ECX . .
240 2b/subtract 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . .
241 51/push-ECX
242
243 e8/call check-ints-equal/disp32
244
245 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
246
247
248
249 68/push "F - test-next-token-from-slice: end"/imm32
250 68/push 4/imm32
251
252 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 1/r32/ECX 4/disp8 .
253 2b/subtract 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . .
254 51/push-ECX
255
256 e8/call check-ints-equal/disp32
257
258 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
259
260 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
261 5d/pop-to-EBP
262 c3/return
263
264 test-next-token-from-slice-Eof:
265
266 55/push-EBP
267 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
268
269 68/push 0/imm32/end
270 68/push 0/imm32/start
271 89/copy 3/mod/direct 7/rm32/EDI . . . 4/r32/ESP . .
272
273
274 57/push-EDI
275 68/push 0x20/imm32
276 68/push 0/imm32
277 68/push 0/imm32
278
279 e8/call next-token-from-slice/disp32
280
281 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x10/imm32
282
283
284
285 68/push "F - test-next-token-from-slice-Eof"/imm32
286 68/push 0/imm32
287
288 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 1/r32/ECX 4/disp8 .
289 2b/subtract 0/mod/indirect 7/rm32/EDI . . . 1/r32/ECX . .
290 51/push-ECX
291
292 e8/call check-ints-equal/disp32
293
294 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
295
296 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
297 5d/pop-to-EBP
298 c3/return
299
300 test-next-token-from-slice-nothing:
301
302 55/push-EBP
303 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
304
305 b8/copy-to-EAX " "/imm32
306 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
307 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
308 05/add-to-EAX 4/imm32
309
310 68/push 0/imm32/end
311 68/push 0/imm32/start
312 89/copy 3/mod/direct 7/rm32/EDI . . . 4/r32/ESP . .
313
314
315 57/push-EDI
316 68/push 0x20/imm32
317 51/push-ECX
318 50/push-EAX
319
320 e8/call next-token-from-slice/disp32
321
322 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x10/imm32
323
324
325
326 68/push "F - test-next-token-from-slice-Eof"/imm32
327 68/push 0/imm32
328
329 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 1/r32/ECX 4/disp8 .
330 2b/subtract 0/mod/indirect 7/rm32/EDI . . . 1/r32/ECX . .
331 51/push-ECX
332
333 e8/call check-ints-equal/disp32
334
335 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
336
337 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
338 5d/pop-to-EBP
339 c3/return
340
341 skip-chars-matching:
342
343 55/push-EBP
344 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
345
346 50/push-EAX
347 51/push-ECX
348 52/push-EDX
349 53/push-EBX
350 56/push-ESI
351
352 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 6/r32/ESI 8/disp8 .
353
354 8b/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
355
356 8b/copy 0/mod/indirect 6/rm32/ESI . . . 3/r32/EBX . .
357
358 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 2/r32/EDX 0xc/disp8 .
359 $skip-chars-matching:loop:
360
361 39/compare 3/mod/direct 1/rm32/ECX . . . 3/r32/EBX . .
362 7d/jump-if-greater-or-equal $skip-chars-matching:end/disp8
363
364 31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . .
365 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/ESI 1/index/ECX . 0/r32/AL 0xc/disp8 .
366
367 39/compare 3/mod/direct 0/rm32/EAX . . . 2/r32/EDX . .
368 75/jump-if-not-equal $skip-chars-matching:end/disp8
369
370 41/increment-ECX
371 eb/jump $skip-chars-matching:loop/disp8
372 $skip-chars-matching:end:
373
374 89/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
375
376 5e/pop-to-ESI
377 5b/pop-to-EBX
378 5a/pop-to-EDX
379 59/pop-to-ECX
380 58/pop-to-EAX
381
382 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
383 5d/pop-to-EBP
384 c3/return
385
386 test-skip-chars-matching:
387
388
389
390 68/push _test-stream/imm32
391
392 e8/call clear-stream/disp32
393
394 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
395
396
397 68/push " ab"/imm32
398 68/push _test-stream/imm32
399
400 e8/call write/disp32
401
402 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
403
404
405 68/push 0x20/imm32
406 68/push _test-stream/imm32
407
408 e8/call skip-chars-matching/disp32
409
410 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
411
412
413 68/push "F - test-skip-chars-matching"/imm32
414 68/push 2/imm32
415
416 b8/copy-to-EAX _test-stream/imm32
417 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 .
418
419 e8/call check-ints-equal/disp32
420
421 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
422
423 c3/return
424
425 test-skip-chars-matching-none:
426
427
428
429 68/push _test-stream/imm32
430
431 e8/call clear-stream/disp32
432
433 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
434
435
436 68/push "ab"/imm32
437 68/push _test-stream/imm32
438
439 e8/call write/disp32
440
441 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
442
443
444 68/push 0x20/imm32
445 68/push _test-stream/imm32
446
447 e8/call skip-chars-matching/disp32
448
449 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
450
451
452 68/push "F - test-skip-chars-matching-none"/imm32
453 68/push 0/imm32
454
455 b8/copy-to-EAX _test-stream/imm32
456 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 .
457
458 e8/call check-ints-equal/disp32
459
460 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
461
462 c3/return
463
464
465 skip-chars-not-matching:
466
467 55/push-EBP
468 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
469
470 50/push-EAX
471 51/push-ECX
472 52/push-EDX
473 53/push-EBX
474 56/push-ESI
475
476 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 6/r32/ESI 8/disp8 .
477
478 8b/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
479
480 8b/copy 0/mod/indirect 6/rm32/ESI . . . 3/r32/EBX . .
481
482 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 2/r32/EDX 0xc/disp8 .
483 $skip-chars-not-matching:loop:
484
485 39/compare 3/mod/direct 1/rm32/ECX . . . 3/r32/EBX . .
486 7d/jump-if-greater-or-equal $skip-chars-not-matching:end/disp8
487
488 31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . .
489 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/ESI 1/index/ECX . 0/r32/AL 0xc/disp8 .
490
491 39/compare 3/mod/direct 0/rm32/EAX . . . 2/r32/EDX . .
492 74/jump-if-equal $skip-chars-not-matching:end/disp8
493
494 41/increment-ECX
495 eb/jump $skip-chars-not-matching:loop/disp8
496 $skip-chars-not-matching:end:
497
498 89/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
499
500 5e/pop-to-ESI
501 5b/pop-to-EBX
502 5a/pop-to-EDX
503 59/pop-to-ECX
504 58/pop-to-EAX
505
506 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
507 5d/pop-to-EBP
508 c3/return
509
510 test-skip-chars-not-matching:
511
512
513
514 68/push _test-stream/imm32
515
516 e8/call clear-stream/disp32
517
518 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
519
520
521 68/push "ab "/imm32
522 68/push _test-stream/imm32
523
524 e8/call write/disp32
525
526 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
527
528
529 68/push 0x20/imm32
530 68/push _test-stream/imm32
531
532 e8/call skip-chars-not-matching/disp32
533
534 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
535
536
537 68/push "F - test-skip-chars-not-matching"/imm32
538 68/push 2/imm32
539
540 b8/copy-to-EAX _test-stream/imm32
541 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 .
542
543 e8/call check-ints-equal/disp32
544
545 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
546
547 c3/return
548
549 test-skip-chars-not-matching-none:
550
551
552
553 68/push _test-stream/imm32
554
555 e8/call clear-stream/disp32
556
557 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
558
559
560 68/push " ab"/imm32
561 68/push _test-stream/imm32
562
563 e8/call write/disp32
564
565 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
566
567
568 68/push 0x20/imm32
569 68/push _test-stream/imm32
570
571 e8/call skip-chars-not-matching/disp32
572
573 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
574
575
576 68/push "F - test-skip-chars-not-matching-none"/imm32
577 68/push 0/imm32
578
579 b8/copy-to-EAX _test-stream/imm32
580 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 .
581
582 e8/call check-ints-equal/disp32
583
584 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
585
586 c3/return
587
588 test-skip-chars-not-matching-all:
589
590
591
592 68/push _test-stream/imm32
593
594 e8/call clear-stream/disp32
595
596 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
597
598
599 68/push "ab"/imm32
600 68/push _test-stream/imm32
601
602 e8/call write/disp32
603
604 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
605
606
607 68/push 0x20/imm32
608 68/push _test-stream/imm32
609
610 e8/call skip-chars-not-matching/disp32
611
612 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32
613
614
615 68/push "F - test-skip-chars-not-matching-all"/imm32
616 68/push 2/imm32
617
618 b8/copy-to-EAX _test-stream/imm32
619 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 .
620
621 e8/call check-ints-equal/disp32
622
623 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
624
625 c3/return
626
627 skip-chars-not-matching-whitespace:
628
629 55/push-EBP
630 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
631
632 50/push-EAX
633 51/push-ECX
634 53/push-EBX
635 56/push-ESI
636
637 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 6/r32/ESI 8/disp8 .
638
639 8b/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
640
641 8b/copy 0/mod/indirect 6/rm32/ESI . . . 3/r32/EBX . .
642 $skip-chars-not-matching-whitespace:loop:
643
644 39/compare 3/mod/direct 1/rm32/ECX . . . 3/r32/EBX . .
645 7d/jump-if-greater-or-equal $skip-chars-not-matching-whitespace:end/disp8
646
647 31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . .
648 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/ESI 1/index/ECX . 0/r32/AL 0xc/disp8 .
649
650 3d/compare-EAX-and 0x20/imm32/space
651 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
652
653 3d/compare-EAX-and 0x0a/imm32/newline
654 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
655
656 3d/compare-EAX-and 0x09/imm32/tab
657 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
658
659 3d/compare-EAX-and 0x0d/imm32/cr
660 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
661
662 41/increment-ECX
663 eb/jump $skip-chars-not-matching-whitespace:loop/disp8
664 $skip-chars-not-matching-whitespace:end:
665
666 89/copy 1/mod/*+disp8 6/rm32/ESI . . . 1/r32/ECX 4/disp8 .
667
668 5e/pop-to-ESI
669 5b/pop-to-EBX
670 59/pop-to-ECX
671 58/pop-to-EAX
672
673 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
674 5d/pop-to-EBP
675 c3/return
676
677 skip-chars-matching-in-slice:
678
679 55/push-EBP
680 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
681
682 51/push-ECX
683 52/push-EDX
684 53/push-EBX
685
686 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 0/r32/EAX 8/disp8 .
687
688 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 1/r32/ECX 0xc/disp8 .
689
690 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 2/r32/EDX 0x10/disp8 .
691
692 31/xor 3/mod/direct 3/rm32/EBX . . . 3/r32/EBX . .
693 $skip-chars-matching-in-slice:loop:
694
695 39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . .
696 73/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp8
697
698 8a/copy-byte 0/mod/indirect 0/rm32/EAX . . . 3/r32/BL . .
699 39/compare 3/mod/direct 3/rm32/EBX . . . 2/r32/EDX . .
700 75/jump-if-not-equal $skip-chars-matching-in-slice:end/disp8
701
702 40/increment-EAX
703 eb/jump $skip-chars-matching-in-slice:loop/disp8
704 $skip-chars-matching-in-slice:end:
705
706 5b/pop-to-EBX
707 5a/pop-to-EDX
708 59/pop-to-ECX
709
710 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
711 5d/pop-to-EBP
712 c3/return
713
714 test-skip-chars-matching-in-slice:
715
716 b8/copy-to-EAX " ab"/imm32
717 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
718 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
719 05/add-to-EAX 4/imm32
720
721
722 68/push 0x20/imm32/space
723 51/push-ECX
724 50/push-EAX
725
726 e8/call skip-chars-matching-in-slice/disp32
727
728 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
729
730
731 68/push "F - test-skip-chars-matching-in-slice"/imm32
732 68/push 2/imm32
733
734 29/subtract 3/mod/direct 1/rm32/ECX . . . 0/r32/EAX . .
735 51/push-ECX
736
737 e8/call check-ints-equal/disp32
738
739 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
740
741 c3/return
742
743 test-skip-chars-matching-in-slice-none:
744
745 b8/copy-to-EAX "ab"/imm32
746 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
747 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
748 05/add-to-EAX 4/imm32
749
750
751 68/push 0x20/imm32/space
752 51/push-ECX
753 50/push-EAX
754
755 e8/call skip-chars-matching-in-slice/disp32
756
757 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
758
759
760 68/push "F - test-skip-chars-matching-in-slice-none"/imm32
761 68/push 2/imm32
762
763 29/subtract 3/mod/direct 1/rm32/ECX . . . 0/r32/EAX . .
764 51/push-ECX
765
766 e8/call check-ints-equal/disp32
767
768 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
769
770 c3/return
771
772
773 skip-chars-not-matching-in-slice:
774
775 55/push-EBP
776 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
777
778 51/push-ECX
779 52/push-EDX
780 53/push-EBX
781
782 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 0/r32/EAX 8/disp8 .
783
784 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 1/r32/ECX 0xc/disp8 .
785
786 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 2/r32/EDX 0x10/disp8 .
787
788 31/xor 3/mod/direct 3/rm32/EBX . . . 3/r32/EBX . .
789 $skip-chars-not-matching-in-slice:loop:
790
791 39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . .
792 73/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp8
793
794 8a/copy-byte 0/mod/indirect 0/rm32/EAX . . . 3/r32/BL . .
795 39/compare 3/mod/direct 3/rm32/EBX . . . 2/r32/EDX . .
796 74/jump-if-equal $skip-chars-not-matching-in-slice:end/disp8
797
798 40/increment-EAX
799 eb/jump $skip-chars-not-matching-in-slice:loop/disp8
800 $skip-chars-not-matching-in-slice:end:
801
802 5b/pop-to-EBX
803 5a/pop-to-EDX
804 59/pop-to-ECX
805
806 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
807 5d/pop-to-EBP
808 c3/return
809
810 test-skip-chars-not-matching-in-slice:
811
812 b8/copy-to-EAX "ab "/imm32
813 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
814 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
815 05/add-to-EAX 4/imm32
816
817
818 68/push 0x20/imm32/space
819 51/push-ECX
820 50/push-EAX
821
822 e8/call skip-chars-not-matching-in-slice/disp32
823
824 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
825
826
827 68/push "F - test-skip-chars-not-matching-in-slice"/imm32
828 68/push 1/imm32
829
830 29/subtract 3/mod/direct 1/rm32/ECX . . . 0/r32/EAX . .
831 51/push-ECX
832
833 e8/call check-ints-equal/disp32
834
835 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
836
837 c3/return
838
839 test-skip-chars-not-matching-in-slice-none:
840
841 b8/copy-to-EAX " ab"/imm32
842 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
843 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
844 05/add-to-EAX 4/imm32
845
846
847 68/push 0x20/imm32/space
848 51/push-ECX
849 50/push-EAX
850
851 e8/call skip-chars-not-matching-in-slice/disp32
852
853 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
854
855
856 68/push "F - test-skip-chars-not-matching-in-slice-none"/imm32
857 68/push 3/imm32
858
859 29/subtract 3/mod/direct 1/rm32/ECX . . . 0/r32/EAX . .
860 51/push-ECX
861
862 e8/call check-ints-equal/disp32
863
864 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
865
866 c3/return
867
868 test-skip-chars-not-matching-in-slice-all:
869
870 b8/copy-to-EAX "ab"/imm32
871 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . .
872 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 .
873 05/add-to-EAX 4/imm32
874
875
876 68/push 0x20/imm32/space
877 51/push-ECX
878 50/push-EAX
879
880 e8/call skip-chars-not-matching-in-slice/disp32
881
882 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
883
884
885 68/push "F - test-skip-chars-not-matching-in-slice-all"/imm32
886 68/push 0/imm32
887
888 29/subtract 3/mod/direct 1/rm32/ECX . . . 0/r32/EAX . .
889 51/push-ECX
890
891 e8/call check-ints-equal/disp32
892
893 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32
894
895 c3/return
896
897