Subversion Repositories Kolibri OS

Rev

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