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