https://github.com/akkartik/mu/blob/master/subx/055stream.subx
1
2
3
4
5
6
7
8
9
10
11
12 == code
13
14
15
16
17
18 e8/call run-tests/disp32
19
20 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 3/r32/EBX Num-test-failures/disp32
21 b8/copy-to-EAX 1/imm32/exit
22 cd/syscall 0x80/imm8
23
24 clear-stream:
25
26 55/push-EBP
27 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
28
29 50/push-EAX
30 51/push-ECX
31
32 8b/copy 1/mod/*+disp8 5/rm32/EBP . . 0/r32/EAX 8/disp8 .
33
34 8b/copy 1/mod/*+disp8 0/rm32/EAX . . . 1/r32/ECX 8/disp8 .
35
36 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 0xc/disp8 .
37
38 c7 0/subop/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32
39
40 c7 0/subop/copy 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 0/imm32
41
42 81 0/subop/add 3/mod/direct 0/rm32/EAX . . . . . 0xc/imm32
43
44 $clear-stream:loop:
45
46 39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . .
47 7d/jump-if-greater-or-equal $clear-stream:end/disp8
48
49 c6 0/subop/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm8
50
51 40/increment-EAX
52 eb/jump $clear-stream:loop/disp8
53 $clear-stream:end:
54
55 59/pop-to-ECX
56 58/pop-to-EAX
57
58 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
59 5d/pop-to-EBP
60 c3/return
61
62 rewind-stream:
63
64 55/push-EBP
65 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . .
66
67 50/push-EAX
68
69 8b/copy 1/mod/*+disp8 5/rm32/EBP . . 0/r32/EAX 8/disp8 .
70
71 c7 0/subop/copy 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 0/imm32
72 $rewind-stream:end:
73
74 58/pop-to-EAX
75
76 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . .
77 5d/pop-to-EBP
78 c3/return