Rev 9053 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9053 | Rev 9063 | ||
---|---|---|---|
1 | SECTION .text |
1 | SECTION .text |
2 | 2 | ||
3 | global go.os.Sleep |
3 | global go.os.Sleep |
4 | global go.os.Event |
4 | global go.os.Event |
5 | global go.os.GetButtonID |
5 | global go.os.GetButtonID |
6 | global go.os.CreateButton |
6 | global go.os.CreateButton |
7 | global go.os.Exit |
7 | global go.os.Exit |
8 | global go.os.Redraw |
8 | global go.os.Redraw |
9 | global go.os.Window |
9 | global go.os.Window |
10 | global go.os.WriteText |
10 | global go.os.WriteText |
11 | global go.os.GetTime |
11 | global go.os.GetTime |
12 | global go.os.DrawLine |
12 | global go.os.DrawLine |
13 | global go.os.DrawBar |
13 | global go.os.DrawBar |
14 | global go.os.DebugOutHex |
14 | global go.os.DebugOutHex |
15 | global go.os.DebugOutChar |
15 | global go.os.DebugOutChar |
16 | global go.os.DebugOutStr |
16 | global go.os.DebugOutStr |
17 | global go.os.WriteText2 |
17 | global go.os.WriteText2 |
18 | 18 | ||
- | 19 | global runtime.memequal32..f |
|
- | 20 | runtime.memequal32..f: |
|
- | 21 | ret |
|
- | 22 | ||
- | 23 | global runtime.memequal8..f |
|
- | 24 | runtime.memequal8..f: |
|
- | 25 | ret |
|
- | 26 | ||
- | 27 | global runtime.memequal |
|
- | 28 | runtime.memequal: |
|
- | 29 | ret |
|
- | 30 | ||
- | 31 | global go.os.SetByteString |
|
- | 32 | go.os.SetByteString: |
|
- | 33 | push ebp |
|
- | 34 | mov ebp, esp |
|
- | 35 | mov eax, [ebp+8] |
|
- | 36 | mov ebx, [ebp+12] |
|
- | 37 | mov ecx, [ebp+16] |
|
- | 38 | mov dh, [ebp+20] |
|
- | 39 | mov byte[eax+ecx], dh |
|
- | 40 | mov esp, ebp |
|
- | 41 | pop ebp |
|
- | 42 | ret |
|
- | 43 | ||
- | 44 | global __go_runtime_error |
|
- | 45 | global __go_register_gc_roots |
|
- | 46 | global __unsafe_get_addr |
|
- | 47 | ||
- | 48 | __unsafe_get_addr: |
|
- | 49 | push ebp |
|
- | 50 | mov ebp, esp |
|
- | 51 | mov eax, [ebp+8] |
|
- | 52 | mov esp, ebp |
|
- | 53 | pop ebp |
|
- | 54 | ret |
|
- | 55 | ||
- | 56 | __go_register_gc_roots: |
|
- | 57 | __go_runtime_error: |
|
- | 58 | ret |
|
- | 59 | ||
- | 60 | global runtime.writeBarrier |
|
- | 61 | global runtime.gcWriteBarrier |
|
- | 62 | runtime.writeBarrier: |
|
- | 63 | mov eax, [esp+8] |
|
- | 64 | mov ebx, [esp+12] |
|
- | 65 | mov dword[eax], ebx |
|
- | 66 | ret |
|
- | 67 | ||
- | 68 | global runtime.strequal..f |
|
- | 69 | runtime.strequal..f: |
|
- | 70 | mov eax,[esp+8] |
|
- | 71 | mov ebx,[esp+16] |
|
- | 72 | mov ecx,0 |
|
- | 73 | strcmp_loop: |
|
- | 74 | mov byte dl,[eax+ecx] |
|
- | 75 | mov byte dh,[ebx+ecx] |
|
- | 76 | inc ecx |
|
- | 77 | cmp dl,0 |
|
- | 78 | je strcmp_end_0 |
|
- | 79 | cmp byte dl,dh |
|
- | 80 | je strcmp_loop |
|
- | 81 | jl strcmp_end_1 |
|
- | 82 | jg strcmp_end_2 |
|
- | 83 | strcmp_end_0: |
|
- | 84 | cmp dh,0 |
|
- | 85 | jne strcmp_end_1 |
|
- | 86 | xor ecx,ecx |
|
- | 87 | ret |
|
- | 88 | strcmp_end_1: |
|
- | 89 | mov ecx,1 |
|
- | 90 | ret |
|
- | 91 | strcmp_end_2: |
|
- | 92 | mov ecx,-1 |
|
- | 93 | ret |
|
- | 94 | ||
- | 95 | runtime.gcWriteBarrier: |
|
- | 96 | mov eax, [esp+8] |
|
- | 97 | mov ebx, [esp+12] |
|
- | 98 | mov dword[eax], ebx |
|
- | 99 | ret |
|
- | 100 | ||
- | 101 | global runtime.goPanicIndex |
|
- | 102 | runtime.goPanicIndex: |
|
- | 103 | ret |
|
- | 104 | ||
- | 105 | global runtime.registerGCRoots |
|
- | 106 | runtime.registerGCRoots: |
|
- | 107 | ret |
|
- | 108 | ||
- | 109 | global memcmp |
|
- | 110 | memcmp: |
|
- | 111 | push ebp |
|
- | 112 | mov ebp,esp |
|
- | 113 | mov esi, [ebp+8] ; Move first pointer to esi |
|
- | 114 | mov edi, [ebp+12] ; Move second pointer to edi |
|
- | 115 | mov ecx, [ebp+16] ; Move length to ecx |
|
- | 116 | ||
- | 117 | cld ; Clear DF, the direction flag, so comparisons happen |
|
- | 118 | ; at increasing addresses |
|
- | 119 | cmp ecx, ecx ; Special case: If length parameter to memcmp is |
|
- | 120 | ; zero, don't compare any bytes. |
|
- | 121 | repe cmpsb ; Compare bytes at DS:ESI and ES:EDI, setting flags |
|
- | 122 | ; Repeat this while equal ZF is set |
|
- | 123 | setz al |
|
- | 124 | mov esp,ebp |
|
- | 125 | pop ebp |
|
- | 126 | ret |
|
- | 127 | ||
- | 128 | ||
19 | go.os.Sleep: |
129 | go.os.Sleep: |
20 | push ebp |
130 | push ebp |
21 | mov ebp,esp |
131 | mov ebp,esp |
22 | mov eax, 5 |
132 | mov eax, 5 |
23 | mov ebx, [ebp+8] |
133 | mov ebx, [ebp+8] |
24 | int 0x40 |
134 | int 0x40 |
25 | mov esp,ebp |
135 | mov esp,ebp |
26 | pop ebp |
136 | pop ebp |
27 | ret |
137 | ret |
28 | 138 | ||
29 | 139 | ||
30 | go.os.Event: |
140 | go.os.Event: |
31 | mov eax, 10 |
141 | mov eax, 10 |
32 | int 0x40 |
142 | int 0x40 |
33 | ret |
143 | ret |
34 | 144 | ||
35 | go.os.GetButtonID: |
145 | go.os.GetButtonID: |
36 | mov eax,17 |
146 | mov eax,17 |
37 | int 0x40 |
147 | int 0x40 |
38 | test al,al |
148 | test al,al |
39 | jnz .no_button |
149 | jnz .no_button |
40 | shr eax,8 |
150 | shr eax,8 |
41 | ret |
151 | ret |
42 | .no_button: |
152 | .no_button: |
43 | xor eax,eax |
153 | xor eax,eax |
44 | dec eax |
154 | dec eax |
45 | ret |
155 | ret |
46 | 156 | ||
47 | go.os.Exit: |
157 | go.os.Exit: |
48 | mov eax, -1 |
158 | mov eax, -1 |
49 | int 0x40 |
159 | int 0x40 |
50 | ret |
160 | ret |
51 | 161 | ||
52 | go.os.Redraw: |
162 | go.os.Redraw: |
53 | push ebp |
163 | push ebp |
54 | mov ebp,esp |
164 | mov ebp,esp |
55 | mov eax, 12 |
165 | mov eax, 12 |
56 | mov ebx, [ebp+8] |
166 | mov ebx, [ebp+8] |
57 | int 0x40 |
167 | int 0x40 |
58 | mov esp,ebp |
168 | mov esp,ebp |
59 | pop ebp |
169 | pop ebp |
60 | ret |
170 | ret |
61 | 171 | ||
62 | go.os.Window: |
172 | go.os.Window: |
63 | push ebp |
173 | push ebp |
64 | mov ebp,esp |
174 | mov ebp,esp |
65 | mov ebx, [ebp+8] |
175 | mov ebx, [ebp+8] |
66 | shl ebx, 16 |
176 | shl ebx, 16 |
67 | or ebx, [ebp+16] |
177 | or ebx, [ebp+16] |
68 | mov ecx, [ebp+12] |
178 | mov ecx, [ebp+12] |
69 | shl ecx, 16 |
179 | shl ecx, 16 |
70 | or ecx, [ebp+20] |
180 | or ecx, [ebp+20] |
71 | mov edx, 0x14 |
181 | mov edx, 0x14 |
72 | shl edx, 24 |
182 | shl edx, 24 |
73 | or edx, 0xFFFFFF |
183 | or edx, 0xFFFFFF |
74 | mov esi, 0x808899ff |
184 | mov esi, 0x808899ff |
75 | mov edi, [ebp+24] |
185 | mov edi, [ebp+24] |
76 | xor eax, eax |
186 | xor eax, eax |
77 | int 0x40 |
187 | int 0x40 |
78 | mov esp,ebp |
188 | mov esp,ebp |
79 | pop ebp |
189 | pop ebp |
80 | ret |
190 | ret |
81 | 191 | ||
82 | go.os.WriteText: |
192 | go.os.WriteText: |
83 | push ebp |
193 | push ebp |
84 | mov ebp,esp |
194 | mov ebp,esp |
85 | mov eax,4 |
195 | mov eax,4 |
86 | mov ebx,[ebp+8] |
196 | mov ebx,[ebp+8] |
87 | shl ebx,16 |
197 | shl ebx,16 |
88 | mov bx,[ebp+12] |
198 | mov bx,[ebp+12] |
89 | mov ecx,[ebp+16] |
199 | mov ecx,[ebp+16] |
90 | mov edx,[ebp+20] |
200 | mov edx,[ebp+20] |
91 | mov esi,[ebp+24] |
201 | mov esi,[ebp+24] |
92 | int 0x40 |
202 | int 0x40 |
93 | mov esp,ebp |
203 | mov esp,ebp |
94 | pop ebp |
204 | pop ebp |
95 | ret |
205 | ret |
96 | 206 | ||
97 | go.os.WriteText2: |
207 | go.os.WriteText2: |
98 | push ebp |
208 | push ebp |
99 | mov ebp,esp |
209 | mov ebp,esp |
100 | mov eax,47 |
210 | mov eax,47 |
101 | mov ebx,[ebp+8] |
211 | mov ebx,[ebp+8] |
102 | shl ebx,16 |
212 | shl ebx,16 |
103 | mov ecx,[ebp+12] |
213 | mov ecx,[ebp+12] |
104 | mov edx,[ebp+20] |
214 | mov edx,[ebp+20] |
105 | shl edx,16 |
215 | shl edx,16 |
106 | add edx, [ebp+24] |
216 | add edx, [ebp+24] |
107 | mov esi,[ebp+28] |
217 | mov esi,[ebp+28] |
108 | int 0x40 |
218 | int 0x40 |
109 | mov esp,ebp |
219 | mov esp,ebp |
110 | pop ebp |
220 | pop ebp |
111 | ret |
221 | ret |
112 | 222 | ||
113 | go.os.DrawLine: |
223 | go.os.DrawLine: |
114 | push ebp |
224 | push ebp |
115 | mov ebp,esp |
225 | mov ebp,esp |
116 | mov ebx,[ebp+8] |
226 | mov ebx,[ebp+8] |
117 | shl ebx,16 |
227 | shl ebx,16 |
118 | mov bx,[ebp+16] |
228 | mov bx,[ebp+16] |
119 | mov ecx,[ebp+12] |
229 | mov ecx,[ebp+12] |
120 | shl ecx,16 |
230 | shl ecx,16 |
121 | mov cx,[ebp+20] |
231 | mov cx,[ebp+20] |
122 | mov edx,[ebp+24] |
232 | mov edx,[ebp+24] |
123 | mov eax,38 |
233 | mov eax,38 |
124 | int 0x40 |
234 | int 0x40 |
125 | mov esp,ebp |
235 | mov esp,ebp |
126 | pop ebp |
236 | pop ebp |
127 | ret |
237 | ret |
128 | 238 | ||
129 | go.os.DrawBar: |
239 | go.os.DrawBar: |
130 | push ebp |
240 | push ebp |
131 | mov ebp,esp |
241 | mov ebp,esp |
132 | mov eax,13 |
242 | mov eax,13 |
133 | mov ebx,[ebp+8] |
243 | mov ebx,[ebp+8] |
134 | shl ebx,16 |
244 | shl ebx,16 |
135 | mov bx,[ebp+16] |
245 | mov bx,[ebp+16] |
136 | mov ecx,[ebp+12] |
246 | mov ecx,[ebp+12] |
137 | shl ecx,16 |
247 | shl ecx,16 |
138 | mov cx,[ebp+20] |
248 | mov cx,[ebp+20] |
139 | mov edx,[ebp+24] |
249 | mov edx,[ebp+24] |
140 | int 0x40 |
250 | int 0x40 |
141 | mov esp,ebp |
251 | mov esp,ebp |
142 | pop ebp |
252 | pop ebp |
143 | ret |
253 | ret |
144 | 254 | ||
145 | go.os.GetTime: |
255 | go.os.GetTime: |
146 | mov eax, 3 |
256 | mov eax, 3 |
147 | int 0x40 |
257 | int 0x40 |
148 | ret |
258 | ret |
149 | 259 | ||
150 | go.os.DebugOutHex: |
260 | go.os.DebugOutHex: |
151 | mov eax, [esp+4] |
261 | mov eax, [esp+4] |
152 | mov edx, 8 |
262 | mov edx, 8 |
153 | .new_char: |
263 | .new_char: |
154 | rol eax, 4 |
264 | rol eax, 4 |
155 | movzx ecx, al |
265 | movzx ecx, al |
156 | and cl, 0x0f |
266 | and cl, 0x0f |
157 | mov cl, [__hexdigits + ecx] |
267 | mov cl, [__hexdigits + ecx] |
158 | pushad |
268 | pushad |
159 | mov eax, 63 |
269 | mov eax, 63 |
160 | mov ebx, 1 |
270 | mov ebx, 1 |
161 | int 0x40 |
271 | int 0x40 |
162 | popad |
272 | popad |
163 | dec edx |
273 | dec edx |
164 | jnz .new_char |
274 | jnz .new_char |
165 | ret |
275 | ret |
166 | 276 | ||
167 | go.os.DebugOutChar: |
277 | go.os.DebugOutChar: |
168 | mov al, [esp+4] |
278 | mov al, [esp+4] |
169 | pushf |
279 | pushf |
170 | pushad |
280 | pushad |
171 | mov cl,al |
281 | mov cl,al |
172 | mov eax,63 |
282 | mov eax,63 |
173 | mov ebx,1 |
283 | mov ebx,1 |
174 | int 0x40 |
284 | int 0x40 |
175 | popad |
285 | popad |
176 | popf |
286 | popf |
177 | ret |
287 | ret |
178 | 288 | ||
179 | go.os.DebugOutStr: |
289 | go.os.DebugOutStr: |
180 | mov edx,[esp+4] |
290 | mov edx,[esp+4] |
181 | mov eax,63 |
291 | mov eax,63 |
182 | mov ebx,1 |
292 | mov ebx,1 |
183 | m2: |
293 | m2: |
184 | mov cl, [edx] |
294 | mov cl, [edx] |
185 | test cl,cl |
295 | test cl,cl |
186 | jz m1 |
296 | jz m1 |
187 | int 40h |
297 | int 40h |
188 | inc edx |
298 | inc edx |
189 | jmp m2 |
299 | jmp m2 |
190 | m1: |
300 | m1: |
191 | ret |
301 | ret |
192 | 302 | ||
193 | go.os.CreateButton: |
303 | go.os.CreateButton: |
194 | push ebp |
304 | push ebp |
195 | mov ebp,esp |
305 | mov ebp,esp |
196 | mov eax, 8 |
306 | mov eax, 8 |
197 | mov ebx, [ebp+8] |
307 | mov ebx, [ebp+8] |
198 | shl ebx, 16 |
308 | shl ebx, 16 |
199 | mov bx, [ebp+16] |
309 | mov bx, [ebp+16] |
200 | mov ecx, [ebp+12] |
310 | mov ecx, [ebp+12] |
201 | shl ecx, 16 |
311 | shl ecx, 16 |
202 | mov cx, [ebp+20] |
312 | mov cx, [ebp+20] |
203 | mov edx, [ebp+24] |
313 | mov edx, [ebp+24] |
204 | mov esi, [ebp+28] |
314 | mov esi, [ebp+28] |
205 | int 0x40 |
315 | int 0x40 |
206 | mov esp,ebp |
316 | mov esp,ebp |
207 | pop ebp |
317 | pop ebp |
208 | ret |
318 | ret |
209 | 319 | ||
210 | SECTION .data |
320 | SECTION .data |
211 | __hexdigits: |
321 | __hexdigits: |
212 | db '0123456789ABCDEF' |
322 | db '0123456789ABCDEF' |
213 | 323 | ||
- | 324 | __test: |
|
- | 325 | dd __hexdigits |
|
- | 326 | dd 15 |
|
- | 327 | ||
214 | 328 |