Subversion Repositories Kolibri OS

Rev

Rev 1039 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1039 Rev 1189
Line 102... Line 102...
102
	mov	ax,bx
102
	mov	ax,bx
103
	stos	word [edi]
103
	stos	word [edi]
104
	mov	al,dl
104
	mov	al,dl
105
	stos	byte [edi]
105
	stos	byte [edi]
106
	cmp	bx,if_directive-assembler
106
	cmp	bx,if_directive-instruction_handler
107
	je	parse_block
107
	je	parse_block
108
	cmp	bx,repeat_directive-assembler
108
	cmp	bx,repeat_directive-instruction_handler
109
	je	parse_block
109
	je	parse_block
110
	cmp	bx,while_directive-assembler
110
	cmp	bx,while_directive-instruction_handler
111
	je	parse_block
111
	je	parse_block
112
	cmp	bx,end_directive-assembler
112
	cmp	bx,end_directive-instruction_handler
113
	je	parse_end_directive
113
	je	parse_end_directive
114
	cmp	bx,else_directive-assembler
114
	cmp	bx,else_directive-instruction_handler
115
	je	parse_else
115
	je	parse_else
116
      common_parse:
116
      common_parse:
117
	call	parse_line_contents
117
	call	parse_line_contents
118
	jmp	parse_next_line
118
	jmp	parse_next_line
119
      empty_instruction:
119
      empty_instruction:
120
	lods	byte [esi]
120
	lods	byte [esi]
Line 157... Line 157...
157
	mov	ax,bx
157
	mov	ax,bx
158
	shl	eax,16
158
	shl	eax,16
159
	push	eax
159
	push	eax
160
	inc	[blocks_stack]
160
	inc	[blocks_stack]
161
	cmp	bx,if_directive-assembler
161
	cmp	bx,if_directive-instruction_handler
162
	je	parse_if
162
	je	parse_if
163
	cmp	bx,while_directive-assembler
163
	cmp	bx,while_directive-instruction_handler
164
	je	parse_while
164
	je	parse_while
165
	call	parse_line_contents
165
	call	parse_line_contents
166
	jmp	parse_next_line
166
	jmp	parse_next_line
167
      parse_end_directive:
167
      parse_end_directive:
168
	cmp	byte [esi],1Ah
168
	cmp	byte [esi],1Ah
169
	jne	common_parse
169
	jne	common_parse
Line 186... Line 186...
186
	stos	byte [edi]
186
	stos	byte [edi]
187
	lods	byte [esi]
187
	lods	byte [esi]
188
	or	al,al
188
	or	al,al
189
	jnz	extra_characters_on_line
189
	jnz	extra_characters_on_line
190
	cmp	bx,if_directive-assembler
190
	cmp	bx,if_directive-instruction_handler
191
	je	close_parsing_block
191
	je	close_parsing_block
192
	cmp	bx,repeat_directive-assembler
192
	cmp	bx,repeat_directive-instruction_handler
193
	je	close_parsing_block
193
	je	close_parsing_block
194
	cmp	bx,while_directive-assembler
194
	cmp	bx,while_directive-instruction_handler
195
	je	close_parsing_block
195
	je	close_parsing_block
196
	jmp	parse_next_line
196
	jmp	parse_next_line
197
      close_parsing_block:
197
      close_parsing_block:
198
	cmp	[blocks_stack],0
198
	cmp	[blocks_stack],0
199
	je	unexpected_instruction
199
	je	unexpected_instruction
200
	cmp	bx,[esp+2]
200
	cmp	bx,[esp+2]
201
	jne	unexpected_instruction
201
	jne	unexpected_instruction
202
	dec	[blocks_stack]
202
	dec	[blocks_stack]
203
	pop	eax edx
203
	pop	eax edx
204
	cmp	bx,if_directive-assembler
204
	cmp	bx,if_directive-instruction_handler
205
	jne	parse_next_line
205
	jne	parse_next_line
206
	test	al,1100b
206
	test	al,1100b
207
	jz	parse_next_line
207
	jz	parse_next_line
208
	test	al,10000b
208
	test	al,10000b
209
	jnz	parse_next_line
209
	jnz	parse_next_line
210
	sub	edi,8
210
	sub	edi,8
Line 249... Line 249...
249
	jmp	parse_next_line
249
	jmp	parse_next_line
250
      parse_else:
250
      parse_else:
251
	cmp	[blocks_stack],0
251
	cmp	[blocks_stack],0
252
	je	unexpected_instruction
252
	je	unexpected_instruction
253
	cmp	word [esp+2],if_directive-assembler
253
	cmp	word [esp+2],if_directive-instruction_handler
254
	jne	unexpected_instruction
254
	jne	unexpected_instruction
255
	lods	byte [esi]
255
	lods	byte [esi]
256
	or	al,al
256
	or	al,al
257
	jz	parse_pure_else
257
	jz	parse_pure_else
258
	cmp	al,1Ah
258
	cmp	al,1Ah
259
	jne	extra_characters_on_line
259
	jne	extra_characters_on_line
Line 262... Line 262...
262
	inc	esi
262
	inc	esi
263
	call	get_instruction
263
	call	get_instruction
264
	jc	extra_characters_on_line
264
	jc	extra_characters_on_line
265
	pop	edi
265
	pop	edi
266
	cmp	bx,if_directive-assembler
266
	cmp	bx,if_directive-instruction_handler
267
	jne	extra_characters_on_line
267
	jne	extra_characters_on_line
268
	test	byte [esp],100b
268
	test	byte [esp],100b
269
	jnz	skip_true_condition_else
269
	jnz	skip_true_condition_else
270
	mov	dl,al
270
	mov	dl,al
271
	mov	al,1
271
	mov	al,1
272
	stos	byte [edi]
272
	stos	byte [edi]
Line 309... Line 309...
309
      skip_parsing_label:
309
      skip_parsing_label:
310
	lea	esi,[esi+ecx+1]
310
	lea	esi,[esi+ecx+1]
311
	jmp	skip_parsing_line
311
	jmp	skip_parsing_line
312
      skip_parsing_instruction:
312
      skip_parsing_instruction:
313
	cmp	bx,if_directive-assembler
313
	cmp	bx,if_directive-instruction_handler
314
	je	skip_parsing_block
314
	je	skip_parsing_block
315
	cmp	bx,repeat_directive-assembler
315
	cmp	bx,repeat_directive-instruction_handler
316
	je	skip_parsing_block
316
	je	skip_parsing_block
317
	cmp	bx,while_directive-assembler
317
	cmp	bx,while_directive-instruction_handler
318
	je	skip_parsing_block
318
	je	skip_parsing_block
319
	cmp	bx,end_directive-assembler
319
	cmp	bx,end_directive-instruction_handler
320
	je	skip_parsing_end_directive
320
	je	skip_parsing_end_directive
321
	cmp	bx,else_directive-assembler
321
	cmp	bx,else_directive-instruction_handler
322
	je	skip_parsing_else
322
	je	skip_parsing_else
323
      skip_parsing_contents:
323
      skip_parsing_contents:
324
	lods	byte [esi]
324
	lods	byte [esi]
325
	or	al,al
325
	or	al,al
326
	jz	skip_parsing
326
	jz	skip_parsing
327
	cmp	al,1Ah
327
	cmp	al,1Ah
Line 367... Line 367...
367
      skip_parsing_end_block:
367
      skip_parsing_end_block:
368
	lods	byte [esi]
368
	lods	byte [esi]
369
	or	al,al
369
	or	al,al
370
	jnz	extra_characters_on_line
370
	jnz	extra_characters_on_line
371
	cmp	bx,if_directive-assembler
371
	cmp	bx,if_directive-instruction_handler
372
	je	close_skip_parsing_block
372
	je	close_skip_parsing_block
373
	cmp	bx,repeat_directive-assembler
373
	cmp	bx,repeat_directive-instruction_handler
374
	je	close_skip_parsing_block
374
	je	close_skip_parsing_block
375
	cmp	bx,while_directive-assembler
375
	cmp	bx,while_directive-instruction_handler
376
	je	close_skip_parsing_block
376
	je	close_skip_parsing_block
377
	jmp	skip_parsing
377
	jmp	skip_parsing
378
      close_skip_parsing_block:
378
      close_skip_parsing_block:
379
	cmp	[blocks_stack],0
379
	cmp	[blocks_stack],0
380
	je	unexpected_instruction
380
	je	unexpected_instruction
381
	cmp	bx,[esp+2]
381
	cmp	bx,[esp+2]
Line 383... Line 383...
383
	dec	[blocks_stack]
383
	dec	[blocks_stack]
384
	pop	eax edx
384
	pop	eax edx
385
	test	al,1
385
	test	al,1
386
	jz	skip_parsing
386
	jz	skip_parsing
387
	cmp	bx,if_directive-assembler
387
	cmp	bx,if_directive-instruction_handler
388
	jne	parse_next_line
388
	jne	parse_next_line
389
	test	al,10000b
389
	test	al,10000b
390
	jz	parse_next_line
390
	jz	parse_next_line
391
	mov	al,0Fh
391
	mov	al,0Fh
392
	stos	byte [edi]
392
	stos	byte [edi]
393
	mov	eax,[current_line]
393
	mov	eax,[current_line]
394
	stos	dword [edi]
394
	stos	dword [edi]
395
	inc	[parsed_lines]
395
	inc	[parsed_lines]
396
	mov	eax,1 + (end_directive-assembler) shl 8
396
	mov	eax,1 + (end_directive-instruction_handler) shl 8
397
	stos	dword [edi]
397
	stos	dword [edi]
398
	mov	eax,1 + (if_directive-assembler) shl 8
398
	mov	eax,1 + (if_directive-instruction_handler) shl 8
399
	stos	dword [edi]
399
	stos	dword [edi]
400
	jmp	parse_next_line
400
	jmp	parse_next_line
401
      skip_parsing_else:
401
      skip_parsing_else:
402
	cmp	[blocks_stack],0
402
	cmp	[blocks_stack],0
403
	je	unexpected_instruction
403
	je	unexpected_instruction
404
	cmp	word [esp+2],if_directive-assembler
404
	cmp	word [esp+2],if_directive-instruction_handler
405
	jne	unexpected_instruction
405
	jne	unexpected_instruction
406
	lods	byte [esi]
406
	lods	byte [esi]
407
	or	al,al
407
	or	al,al
408
	jz	skip_parsing_pure_else
408
	jz	skip_parsing_pure_else
409
	cmp	al,1Ah
409
	cmp	al,1Ah
410
	jne	extra_characters_on_line
410
	jne	extra_characters_on_line
Line 413... Line 413...
413
	inc	esi
413
	inc	esi
414
	call	get_instruction
414
	call	get_instruction
415
	jc	extra_characters_on_line
415
	jc	extra_characters_on_line
416
	pop	edi
416
	pop	edi
417
	cmp	bx,if_directive-assembler
417
	cmp	bx,if_directive-instruction_handler
418
	jne	extra_characters_on_line
418
	jne	extra_characters_on_line
419
	mov	al,[esp]
419
	mov	al,[esp]
420
	test	al,1
420
	test	al,1
421
	jz	skip_parsing_contents
421
	jz	skip_parsing_contents
422
	test	al,100b
422
	test	al,100b
423
	jnz	skip_parsing_contents
423
	jnz	skip_parsing_contents
Line 430... Line 430...
430
	mov	eax,[current_line]
430
	mov	eax,[current_line]
431
	stos	dword [edi]
431
	stos	dword [edi]
432
	inc	[parsed_lines]
432
	inc	[parsed_lines]
433
      parse_else_if:
433
      parse_else_if:
434
	mov	eax,1 + (if_directive-assembler) shl 8
434
	mov	eax,1 + (if_directive-instruction_handler) shl 8
435
	stos	dword [edi]
435
	stos	dword [edi]
436
	jmp	parse_if
436
	jmp	parse_if
437
      skip_parsing_pure_else:
437
      skip_parsing_pure_else:
438
	bts	dword [esp],1
438
	bts	dword [esp],1
439
	jc	unexpected_instruction
439
	jc	unexpected_instruction
440
	mov	al,[esp]
440
	mov	al,[esp]
Line 449... Line 449...
449
 
449
 
Line 450... Line 450...
450
parse_line_contents:
450
parse_line_contents:
451
	mov	[parenthesis_stack],0
451
	mov	[parenthesis_stack],0
452
      parse_instruction_arguments:
452
      parse_instruction_arguments:
453
	cmp	bx,prefix_instruction-assembler
453
	cmp	bx,prefix_instruction-instruction_handler
454
	je	allow_embedded_instruction
454
	je	allow_embedded_instruction
455
	cmp	bx,times_directive-assembler
455
	cmp	bx,times_directive-instruction_handler
456
	je	parse_times_directive
456
	je	parse_times_directive
457
	cmp	bx,end_directive-assembler
457
	cmp	bx,end_directive-instruction_handler
458
	je	allow_embedded_instruction
458
	je	allow_embedded_instruction
459
	cmp	bx,label_directive-assembler
459
	cmp	bx,label_directive-instruction_handler
460
	je	parse_label_directive
460
	je	parse_label_directive
461
	cmp	bx,segment_directive-assembler
461
	cmp	bx,segment_directive-instruction_handler
462
	je	parse_label_directive
462
	je	parse_label_directive
463
	cmp	bx,load_directive-assembler
463
	cmp	bx,load_directive-instruction_handler
464
	je	parse_load_directive
464
	je	parse_load_directive
465
	cmp	bx,extrn_directive-assembler
465
	cmp	bx,extrn_directive-instruction_handler
466
	je	parse_extrn_directive
466
	je	parse_extrn_directive
467
	cmp	bx,public_directive-assembler
467
	cmp	bx,public_directive-instruction_handler
468
	je	parse_public_directive
468
	je	parse_public_directive
469
      parse_argument:
469
      parse_argument:
470
	lea	eax,[edi+100h]
470
	lea	eax,[edi+100h]
471
	cmp	eax,[labels_list]
471
	cmp	eax,[labels_list]
472
	jae	out_of_memory
472
	jae	out_of_memory