https://github.com/akkartik/mu/blob/master/310copy-bytes.subx
1
2
3
4 == code
5
6 copy-bytes:
7
8
9
10
11
12
13
14
15
16
17
18
19 55/push-ebp
20 89/<- %ebp 4/r32/esp
21
22 50/push-eax
23 51/push-ecx
24 52/push-edx
25 56/push-esi
26 57/push-edi
27
28 8b/-> *(ebp+8) 6/r32/esi
29
30 8b/-> *(ebp+0xc) 7/r32/edi
31
32 b9/copy-to-ecx 0/imm32
33
34 8b/-> *(ebp+0x10) 2/r32/edx
35 {
36
37 39/compare %ecx 2/r32/edx
38 7d/jump-if->= break/disp8
39
40 8a/byte-> *esi 0/r32/AL
41 88/byte<- *edi 0/r32/AL
42
43 46/increment-esi
44 47/increment-edi
45 41/increment-ecx
46 eb/jump loop/disp8
47 }
48 $copy-bytes:end:
49
50 5f/pop-to-edi
51 5e/pop-to-esi
52 5a/pop-to-edx
53 59/pop-to-ecx
54 58/pop-to-eax
55
56 89/<- %esp 5/r32/ebp
57 5d/pop-to-ebp
58 c3/return
59
60 stream-to-array:
61
62 55/push-ebp
63 89/<- %ebp 4/r32/esp
64
65 50/push-eax
66 51/push-ecx
67 52/push-edx
68 56/push-esi
69
70 8b/-> *(ebp+8) 6/r32/esi
71
72 8b/-> *esi 1/r32/ecx
73 2b/subtract *(esi+4) 1/r32/ecx
74
75 (allocate-array Heap %ecx *(ebp+0xc))
76
77 8b/-> *(esi+4) 2/r32/edx
78 8d/copy-address *(esi+edx+0xc) 2/r32/edx
79
80 8b/-> *(ebp+0xc) 0/r32/eax
81 (lookup *eax *(eax+4))
82 8d/copy-address *(eax+4) 0/r32/eax
83
84 (copy-bytes %edx %eax %ecx)
85 $stream-to-array:end:
86
87 5e/pop-to-esi
88 5a/pop-to-edx
89 59/pop-to-ecx
90 58/pop-to-eax
91
92 89/<- %esp 5/r32/ebp
93 5d/pop-to-ebp
94 c3/return
95
96 test-stream-to-array:
97
98 55/push-ebp
99 89/<- %ebp 4/r32/esp
100
101 (clear-stream _test-input-stream)
102 (write _test-input-stream "abc")
103
104 (read-byte _test-input-stream)
105
106 68/push 0/imm32
107 68/push 0/imm32
108 89/<- %ecx 4/r32/esp
109
110 (stream-to-array _test-input-stream %ecx)
111 (lookup *ecx *(ecx+4))
112 (check-strings-equal %eax "bc")
113
114 89/<- %esp 5/r32/ebp
115 5d/pop-to-ebp
116 c3/return
117
118
119
120 unquote-stream-to-array:
121
122 55/push-ebp
123 89/<- %ebp 4/r32/esp
124
125 50/push-eax
126 51/push-ecx
127 52/push-edx
128 56/push-esi
129
130 8b/-> *(ebp+8) 6/r32/esi
131
132 8b/-> *esi 1/r32/ecx
133 2b/subtract *(esi+4) 1/r32/ecx
134 81 7/subop/compare %ecx 2/imm32
135 7c/jump-if-< $unquote-stream-to-array:end/disp8
136 81 5/subop/subtract %ecx 2/imm32
137
138 (allocate-array Heap %ecx *(ebp+0xc))
139
140 8b/-> *(esi+4) 2/r32/edx
141 8d/copy-address *(esi+edx+0xd) 2/r32/edx
142
143 8b/-> *(ebp+0xc) 0/r32/eax
144 (lookup *eax *(eax+4))
145 8d/copy-address *(eax+4) 0/r32/eax
146
147 (copy-bytes %edx %eax %ecx)
148 $unquote-stream-to-array:end:
149
150 5e/pop-to-esi
151 5a/pop-to-edx
152 59/pop-to-ecx
153 58/pop-to-eax
154
155 89/<- %esp 5/r32/ebp
156 5d/pop-to-ebp
157 c3/return