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 |