Rev 3011 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3011 | Rev 4039 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; flat assembler core |
1 | ; flat assembler core |
2 | ; Copyright (c) 1999-2012, Tomasz Grysztar. |
2 | ; Copyright (c) 1999-2013, Tomasz Grysztar. |
3 | ; All rights reserved. |
3 | ; All rights reserved. |
Line 4... | Line 4... | ||
4 | 4 | ||
5 | dump_symbols: |
5 | dump_symbols: |
6 | mov edi,[code_start] |
6 | mov edi,[code_start] |
7 | call setup_dump_header |
7 | call setup_dump_header |
8 | mov esi,[input_file] |
8 | mov esi,[input_file] |
9 | call copy_asciiz |
9 | call copy_asciiz |
10 | cmp edi,[display_buffer] |
10 | cmp edi,[tagged_blocks] |
11 | jae out_of_memory |
11 | jae out_of_memory |
12 | mov eax,edi |
12 | mov eax,edi |
13 | sub eax,ebx |
13 | sub eax,ebx |
14 | mov [ebx-40h+0Ch],eax |
14 | mov [ebx-40h+0Ch],eax |
15 | mov esi,[output_file] |
15 | mov esi,[output_file] |
16 | call copy_asciiz |
16 | call copy_asciiz |
17 | cmp edi,[display_buffer] |
17 | cmp edi,[tagged_blocks] |
18 | jae out_of_memory |
18 | jae out_of_memory |
19 | mov edx,[symbols_stream] |
19 | mov edx,[symbols_stream] |
20 | mov ebp,[free_additional_memory] |
20 | mov ebp,[free_additional_memory] |
21 | and [number_of_sections],0 |
21 | and [number_of_sections],0 |
Line 51... | Line 51... | ||
51 | add esi,4 |
51 | add esi,4 |
52 | rep movs byte [edi],[esi] |
52 | rep movs byte [edi],[esi] |
53 | mov byte [edi],0 |
53 | mov byte [edi],0 |
54 | inc edi |
54 | inc edi |
55 | cmp edi,[display_buffer] |
55 | cmp edi,[tagged_blocks] |
56 | jae out_of_memory |
56 | jae out_of_memory |
57 | jmp prepare_strings_table |
57 | jmp prepare_strings_table |
58 | prepare_section_string: |
58 | prepare_section_string: |
59 | mov ecx,[number_of_sections] |
59 | mov ecx,[number_of_sections] |
60 | mov eax,ecx |
60 | mov eax,ecx |
61 | inc eax |
61 | inc eax |
Line 74... | Line 74... | ||
74 | mov esi,[esi] |
74 | mov esi,[esi] |
75 | add esi,[resource_data] |
75 | add esi,[resource_data] |
76 | copy_elf_section_name: |
76 | copy_elf_section_name: |
77 | lods byte [esi] |
77 | lods byte [esi] |
78 | cmp edi,[display_buffer] |
78 | cmp edi,[tagged_blocks] |
79 | jae out_of_memory |
79 | jae out_of_memory |
80 | stos byte [edi] |
80 | stos byte [edi] |
81 | test al,al |
81 | test al,al |
82 | jnz copy_elf_section_name |
82 | jnz copy_elf_section_name |
83 | jmp prepare_strings_table |
83 | jmp prepare_strings_table |
84 | prepare_default_section_string: |
84 | prepare_default_section_string: |
85 | mov eax,'.fla' |
85 | mov eax,'.fla' |
86 | stos dword [edi] |
86 | stos dword [edi] |
87 | mov ax,'t' |
87 | mov ax,'t' |
88 | stos word [edi] |
88 | stos word [edi] |
89 | cmp edi,[display_buffer] |
89 | cmp edi,[tagged_blocks] |
90 | jae out_of_memory |
90 | jae out_of_memory |
91 | jmp prepare_strings_table |
91 | jmp prepare_strings_table |
92 | strings_table_ready: |
92 | strings_table_ready: |
93 | mov edx,[display_buffer] |
93 | mov edx,[tagged_blocks] |
94 | mov ebp,[memory_end] |
94 | mov ebp,[memory_end] |
95 | sub ebp,[labels_list] |
95 | sub ebp,[labels_list] |
96 | add ebp,edx |
96 | add ebp,edx |
97 | prepare_labels_dump: |
97 | prepare_labels_dump: |
98 | cmp edx,ebp |
98 | cmp edx,ebp |
99 | je labels_dump_ok |
99 | je labels_dump_ok |
Line 115... | Line 115... | ||
115 | or eax,1 shl 31 |
115 | or eax,1 shl 31 |
116 | mov [edx+24],eax |
116 | mov [edx+24],eax |
117 | movzx ecx,byte [esi-1] |
117 | movzx ecx,byte [esi-1] |
118 | lea eax,[edi+ecx+1] |
118 | lea eax,[edi+ecx+1] |
119 | cmp edi,[display_buffer] |
119 | cmp edi,[tagged_blocks] |
120 | jae out_of_memory |
120 | jae out_of_memory |
121 | rep movsb |
121 | rep movsb |
122 | xor al,al |
122 | xor al,al |
123 | stosb |
123 | stosb |
124 | label_dump_name_ok: |
124 | label_dump_name_ok: |
125 | mov eax,[edx+28] |
125 | mov eax,[edx+28] |
Line 127... | Line 127... | ||
127 | jz label_dump_line_ok |
127 | jz label_dump_line_ok |
128 | sub eax,[memory_start] |
128 | sub eax,[memory_start] |
129 | mov [edx+28],eax |
129 | mov [edx+28],eax |
130 | label_dump_line_ok: |
130 | label_dump_line_ok: |
131 | mov eax,[edx+20] |
131 | test byte [edx+9],4 |
- | 132 | jz convert_base_symbol_for_label |
|
- | 133 | xor eax,eax |
|
- | 134 | mov [edx],eax |
|
- | 135 | mov [edx+4],eax |
|
- | 136 | jmp base_symbol_for_label_ok |
|
- | 137 | convert_base_symbol_for_label: |
|
- | 138 | mov eax,[edx+20] |
|
132 | test eax,eax |
139 | test eax,eax |
133 | jz base_symbol_for_label_ok |
140 | jz base_symbol_for_label_ok |
134 | cmp eax,[symbols_stream] |
141 | cmp eax,[symbols_stream] |
135 | mov eax,[eax+4] |
142 | mov eax,[eax+4] |
136 | jae base_symbol_for_label_ok |
143 | jae base_symbol_for_label_ok |
Line 170... | Line 177... | ||
170 | call prepare_preprocessed_source |
177 | call prepare_preprocessed_source |
171 | mov esi,[labels_list] |
178 | mov esi,[labels_list] |
172 | mov ebp,edi |
179 | mov ebp,edi |
173 | make_lines_dump: |
180 | make_lines_dump: |
174 | cmp esi,[display_buffer] |
181 | cmp esi,[tagged_blocks] |
175 | je lines_dump_ok |
182 | je lines_dump_ok |
176 | mov eax,[esi-4] |
183 | mov eax,[esi-4] |
177 | mov ecx,[esi-8] |
184 | mov ecx,[esi-8] |
178 | sub esi,8 |
185 | sub esi,8 |
179 | sub esi,ecx |
186 | sub esi,ecx |
180 | cmp eax,1 |
187 | cmp eax,1 |
Line 183... | Line 190... | ||
183 | jne make_lines_dump |
190 | jne make_lines_dump |
184 | add dword [ebx-40h+3Ch],8 |
191 | add dword [ebx-40h+3Ch],8 |
185 | jmp make_lines_dump |
192 | jmp make_lines_dump |
186 | process_line_dump: |
193 | process_line_dump: |
187 | mov eax,[esi+4] |
194 | push ebx |
- | 195 | mov ebx,[esi+8] |
|
- | 196 | mov eax,[esi+4] |
|
188 | sub eax,[code_start] |
197 | sub eax,[code_start] |
189 | add eax,[headers_size] |
198 | add eax,[headers_size] |
190 | cmp byte [esi+1Ah],0 |
199 | test byte [ebx+0Ah],1 |
191 | je store_offset |
200 | jz store_offset |
192 | xor eax,eax |
201 | xor eax,eax |
193 | store_offset: |
202 | store_offset: |
194 | stos dword [edi] |
203 | stos dword [edi] |
195 | mov eax,[esi] |
204 | mov eax,[esi] |
196 | sub eax,[memory_start] |
205 | sub eax,[memory_start] |
197 | stos dword [edi] |
206 | stos dword [edi] |
198 | mov eax,[esi+4] |
207 | mov eax,[esi+4] |
199 | xor edx,edx |
208 | xor edx,edx |
200 | xor cl,cl |
209 | xor cl,cl |
201 | sub eax,[esi+8] |
210 | sub eax,[ebx] |
202 | sbb edx,[esi+8+4] |
211 | sbb edx,[ebx+4] |
203 | sbb cl,[esi+1Bh] |
212 | sbb cl,[ebx+8] |
204 | stos dword [edi] |
213 | stos dword [edi] |
205 | mov eax,edx |
214 | mov eax,edx |
206 | stos dword [edi] |
215 | stos dword [edi] |
207 | mov eax,[esi+10h] |
216 | mov eax,[ebx+10h] |
208 | stos dword [edi] |
217 | stos dword [edi] |
209 | mov eax,[esi+14h] |
218 | mov eax,[ebx+14h] |
210 | test eax,eax |
219 | test eax,eax |
211 | jz base_symbol_for_line_ok |
220 | jz base_symbol_for_line_ok |
212 | cmp eax,[symbols_stream] |
221 | cmp eax,[symbols_stream] |
213 | mov eax,[eax+4] |
222 | mov eax,[eax+4] |
214 | jae base_symbol_for_line_ok |
223 | jae base_symbol_for_line_ok |
215 | xor eax,eax |
224 | xor eax,eax |
216 | base_symbol_for_line_ok: |
225 | base_symbol_for_line_ok: |
217 | stos dword [edi] |
226 | stos dword [edi] |
218 | mov eax,[esi+18h] |
227 | mov al,[ebx+9] |
- | 228 | stos byte [edi] |
|
- | 229 | mov al,[esi+10h] |
|
219 | and eax,01FFFFh |
230 | stos byte [edi] |
- | 231 | mov al,[ebx+0Ah] |
|
- | 232 | and al,1 |
|
220 | stos dword [edi] |
233 | stos byte [edi] |
221 | mov [edi-1],cl |
234 | mov al,cl |
222 | cmp edi,[display_buffer] |
235 | stos byte [edi] |
- | 236 | pop ebx |
|
- | 237 | cmp edi,[tagged_blocks] |
|
223 | jae out_of_memory |
238 | jae out_of_memory |
224 | mov eax,edi |
239 | mov eax,edi |
225 | sub eax,1Ch |
240 | sub eax,1Ch |
226 | sub eax,ebp |
241 | sub eax,ebp |
227 | mov [esi],eax |
242 | mov [esi],eax |
228 | jmp make_lines_dump |
243 | jmp make_lines_dump |
Line 262... | Line 277... | ||
262 | mov ecx,[edx+14h] |
277 | mov ecx,[edx+14h] |
263 | add ecx,40h |
278 | add ecx,40h |
264 | call write |
279 | call write |
265 | jc write_failed |
280 | jc write_failed |
266 | mov edx,[display_buffer] |
281 | mov edx,[tagged_blocks] |
267 | mov ecx,[memory_end] |
282 | mov ecx,[memory_end] |
268 | sub ecx,[labels_list] |
283 | sub ecx,[labels_list] |
269 | call write |
284 | call write |
270 | jc write_failed |
285 | jc write_failed |
271 | mov edx,[memory_start] |
286 | mov edx,[memory_start] |
272 | mov ecx,[source_start] |
287 | mov ecx,[source_start] |
Line 285... | Line 300... | ||
285 | jc write_failed |
300 | jc write_failed |
286 | mov esi,[labels_list] |
301 | mov esi,[labels_list] |
287 | mov edi,[memory_start] |
302 | mov edi,[memory_start] |
288 | make_references_dump: |
303 | make_references_dump: |
289 | cmp esi,[display_buffer] |
304 | cmp esi,[tagged_blocks] |
290 | je references_dump_ok |
305 | je references_dump_ok |
291 | mov eax,[esi-4] |
306 | mov eax,[esi-4] |
292 | mov ecx,[esi-8] |
307 | mov ecx,[esi-8] |
293 | sub esi,8 |
308 | sub esi,8 |
294 | sub esi,ecx |
309 | sub esi,ecx |
295 | cmp eax,2 |
310 | cmp eax,2 |
Line 304... | Line 319... | ||
304 | sub eax,LABEL_STRUCTURE_SIZE |
319 | sub eax,LABEL_STRUCTURE_SIZE |
305 | stosd |
320 | stosd |
306 | mov eax,edx |
321 | mov eax,edx |
307 | stosd |
322 | stosd |
308 | cmp edi,[display_buffer] |
323 | cmp edi,[tagged_blocks] |
309 | jb make_references_dump |
324 | jb make_references_dump |
310 | jmp out_of_memory |
325 | jmp out_of_memory |
311 | references_dump_ok: |
326 | references_dump_ok: |
312 | mov edx,[memory_start] |
327 | mov edx,[memory_start] |
313 | mov ecx,edi |
328 | mov ecx,edi |
314 | sub ecx,edx |
329 | sub ecx,edx |