Rev 2664 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2664 | Rev 2665 | ||
---|---|---|---|
Line 33... | Line 33... | ||
33 | mov [undefined_data_end],eax |
33 | mov [undefined_data_end],eax |
34 | mov [file_extension],eax |
34 | mov [file_extension],eax |
35 | mov [next_pass_needed],al |
35 | mov [next_pass_needed],al |
36 | mov [output_format],al |
36 | mov [output_format],al |
37 | mov [labels_type],al |
37 | mov [org_origin_sign],al |
- | 38 | mov [adjustment_sign],al |
|
- | 39 | mov [labels_type],al |
|
38 | mov [virtual_data],al |
40 | mov [virtual_data],al |
39 | mov [code_type],16 |
41 | mov [code_type],16 |
40 | pass_loop: |
42 | pass_loop: |
41 | call assemble_line |
43 | call assemble_line |
42 | jnc pass_loop |
44 | jnc pass_loop |
Line 167... | Line 169... | ||
167 | mov [current_line],eax |
169 | mov [current_line],eax |
168 | mov [prefixed_instruction],0 |
170 | mov [prefixed_instruction],0 |
169 | cmp [symbols_file],0 |
171 | cmp [symbols_file],0 |
170 | je continue_line |
172 | je continue_line |
171 | mov ebx,[display_buffer] |
173 | cmp [next_pass_needed],0 |
- | 174 | jne continue_line |
|
- | 175 | mov ebx,[display_buffer] |
|
172 | mov dword [ebx-4],1 |
176 | mov dword [ebx-4],1 |
173 | mov dword [ebx-8],1Ch |
177 | mov dword [ebx-8],1Ch |
174 | sub ebx,8+1Ch |
178 | sub ebx,8+1Ch |
175 | cmp ebx,edi |
179 | cmp ebx,edi |
176 | jbe out_of_memory |
180 | jbe out_of_memory |
Line 183... | Line 187... | ||
183 | mov [ebx+8],eax |
187 | mov [ebx+8],eax |
184 | mov [ebx+8+4],edx |
188 | mov [ebx+8+4],edx |
185 | mov [ebx+10h],ecx |
189 | mov [ebx+10h],ecx |
186 | mov edx,[org_symbol] |
190 | mov edx,[org_symbol] |
187 | mov eax,dword [labels_type] |
191 | ; mov al,[virtual_data] |
- | 192 | ; mov ah,[org_origin_sign] |
|
- | 193 | ; shl eax,16 |
|
- | 194 | ; mov al,[labels_type] |
|
- | 195 | ; mov ah,[code_type] |
|
- | 196 | mov eax,dword [labels_type] |
|
188 | mov [ebx+14h],edx |
197 | mov [ebx+14h],edx |
189 | mov [ebx+18h],eax |
198 | mov [ebx+18h],eax |
190 | continue_line: |
199 | continue_line: |
191 | cmp byte [esi],0Fh |
200 | cmp byte [esi],0Fh |
192 | je line_assembled |
201 | je line_assembled |
Line 197... | Line 206... | ||
197 | jb invalid_use_of_symbol |
206 | jb invalid_use_of_symbol |
198 | je reserved_word_used_as_symbol |
207 | je reserved_word_used_as_symbol |
199 | mov ebx,eax |
208 | mov ebx,eax |
200 | lods byte [esi] |
209 | lods byte [esi] |
201 | mov cl,al |
210 | mov [label_size],al |
202 | mov eax,edi |
211 | call make_label |
- | 212 | jmp continue_line |
|
- | 213 | make_label: |
|
- | 214 | mov eax,edi |
|
203 | xor edx,edx |
215 | xor edx,edx |
204 | sub eax,dword [org_origin] |
216 | xor cl,cl |
- | 217 | sub eax,dword [org_origin] |
|
205 | sbb edx,dword [org_origin+4] |
218 | sbb edx,dword [org_origin+4] |
206 | mov ch,[labels_type] |
219 | sbb cl,[org_origin_sign] |
- | 220 | jp label_value_ok |
|
- | 221 | call recoverable_overflow |
|
- | 222 | label_value_ok: |
|
- | 223 | mov [address_sign],cl |
|
207 | cmp [virtual_data],0 |
224 | cmp [virtual_data],0 |
208 | jne make_virtual_label |
225 | jne make_virtual_label |
209 | or byte [ebx+9],1 |
226 | or byte [ebx+9],1 |
210 | xchg eax,[ebx] |
227 | xchg eax,[ebx] |
211 | xchg edx,[ebx+4] |
228 | xchg edx,[ebx+4] |
212 | sub eax,[ebx] |
229 | mov ch,[ebx+9] |
- | 230 | shr ch,1 |
|
- | 231 | and ch,1 |
|
- | 232 | neg ch |
|
- | 233 | sub eax,[ebx] |
|
213 | sbb edx,[ebx+4] |
234 | sbb edx,[ebx+4] |
214 | mov dword [adjustment],eax |
235 | sbb ch,cl |
- | 236 | mov dword [adjustment],eax |
|
215 | mov dword [adjustment+4],edx |
237 | mov dword [adjustment+4],edx |
216 | or eax,edx |
238 | mov [adjustment_sign],ch |
- | 239 | or al,ch |
|
- | 240 | or eax,edx |
|
217 | setnz ah |
241 | setnz ah |
218 | jmp finish_label_symbol |
242 | jmp finish_label |
219 | make_virtual_label: |
243 | make_virtual_label: |
220 | and byte [ebx+9],not 1 |
244 | and byte [ebx+9],not 1 |
221 | cmp eax,[ebx] |
245 | cmp eax,[ebx] |
222 | mov [ebx],eax |
246 | mov [ebx],eax |
223 | setne ah |
247 | setne ah |
224 | cmp edx,[ebx+4] |
248 | cmp edx,[ebx+4] |
225 | mov [ebx+4],edx |
249 | mov [ebx+4],edx |
226 | setne al |
250 | setne al |
227 | or ah,al |
251 | or ah,al |
228 | finish_label_symbol: |
252 | finish_label: |
- | 253 | mov ch,[labels_type] |
|
- | 254 | mov cl,[label_size] |
|
- | 255 | mov ebp,[org_registers] |
|
- | 256 | mov edx,[org_symbol] |
|
- | 257 | finish_label_symbol: |
|
229 | cmp cl,[ebx+10] |
258 | mov al,[address_sign] |
- | 259 | xor al,[ebx+9] |
|
- | 260 | and al,10b |
|
- | 261 | or ah,al |
|
- | 262 | xor [ebx+9],al |
|
- | 263 | cmp cl,[ebx+10] |
|
230 | mov [ebx+10],cl |
264 | mov [ebx+10],cl |
231 | setne al |
265 | setne al |
232 | or ah,al |
266 | or ah,al |
233 | cmp ch,[ebx+11] |
267 | cmp ch,[ebx+11] |
234 | mov [ebx+11],ch |
268 | mov [ebx+11],ch |
235 | setne al |
269 | setne al |
236 | or ah,al |
270 | or ah,al |
237 | mov edx,[org_registers] |
271 | cmp ebp,[ebx+12] |
238 | cmp edx,[ebx+12] |
- | |
239 | mov [ebx+12],edx |
272 | mov [ebx+12],ebp |
240 | setne al |
273 | setne al |
241 | or ah,al |
274 | or ah,al |
242 | or ch,ch |
275 | or ch,ch |
243 | jz label_symbol_ok |
276 | jz label_symbol_ok |
244 | mov edx,[org_symbol] |
277 | cmp edx,[ebx+20] |
245 | cmp edx,[ebx+20] |
- | |
246 | mov [ebx+20],edx |
278 | mov [ebx+20],edx |
247 | setne al |
279 | setne al |
248 | or ah,al |
280 | or ah,al |
249 | label_symbol_ok: |
281 | label_symbol_ok: |
250 | mov cx,[current_pass] |
282 | mov cx,[current_pass] |
Line 259... | Line 291... | ||
259 | inc cx |
291 | inc cx |
260 | sub cx,[ebx+16] |
292 | sub cx,[ebx+16] |
261 | setnz al |
293 | setnz al |
262 | or ah,al |
294 | or ah,al |
263 | jz continue_line |
295 | jz label_made |
264 | test byte [ebx+8],8 |
296 | test byte [ebx+8],8 |
265 | jz continue_line |
297 | jz label_made |
266 | mov cx,[current_pass] |
298 | mov cx,[current_pass] |
267 | cmp cx,[ebx+18] |
299 | cmp cx,[ebx+18] |
268 | jne continue_line |
300 | jne label_made |
269 | or [next_pass_needed],-1 |
301 | or [next_pass_needed],-1 |
270 | jmp continue_line |
302 | label_made: |
271 | new_label: |
303 | ret |
- | 304 | new_label: |
|
272 | or byte [ebx+8],1 |
305 | or byte [ebx+8],1 |
273 | jmp continue_line |
306 | ret |
274 | define_constant: |
307 | define_constant: |
275 | lods dword [esi] |
308 | lods dword [esi] |
276 | inc esi |
309 | inc esi |
277 | cmp eax,0Fh |
310 | cmp eax,0Fh |
278 | jb invalid_use_of_symbol |
311 | jb invalid_use_of_symbol |
279 | je reserved_word_used_as_symbol |
312 | je reserved_word_used_as_symbol |
Line 291... | Line 324... | ||
291 | get_constant_value: |
324 | get_constant_value: |
292 | push eax |
325 | push eax |
293 | mov al,byte [esi-1] |
326 | mov al,byte [esi-1] |
294 | push eax |
327 | push eax |
295 | call get_value |
328 | or [size_override],-1 |
- | 329 | call get_value |
|
296 | pop ebx |
330 | pop ebx |
297 | mov ch,bl |
331 | mov ch,bl |
298 | pop ebx |
332 | pop ebx |
299 | pop dword [ebx+8] |
333 | pop dword [ebx+8] |
300 | cmp ebx,0Fh |
334 | cmp ebx,0Fh |
Line 312... | Line 346... | ||
312 | cmp edx,[ebx+4] |
346 | cmp edx,[ebx+4] |
313 | mov [ebx+4],edx |
347 | mov [ebx+4],edx |
314 | setne al |
348 | setne al |
315 | or ah,al |
349 | or ah,al |
316 | cmp cl,[ebx+10] |
350 | mov al,[value_sign] |
- | 351 | xor al,[ebx+9] |
|
- | 352 | and al,10b |
|
- | 353 | or ah,al |
|
- | 354 | xor [ebx+9],al |
|
- | 355 | cmp cl,[ebx+10] |
|
317 | mov [ebx+10],cl |
356 | mov [ebx+10],cl |
318 | setne al |
357 | setne al |
319 | or ah,al |
358 | or ah,al |
320 | cmp ch,[ebx+11] |
359 | cmp ch,[ebx+11] |
321 | mov [ebx+11],ch |
360 | mov [ebx+11],ch |
Line 368... | Line 407... | ||
368 | ; mov [operand_size],0 |
407 | ; mov [operand_size],0 |
369 | ; mov [size_override],0 |
408 | ; mov [size_override],0 |
370 | ; mov [operand_prefix],0 |
409 | ; mov [operand_prefix],0 |
371 | ; mov [opcode_prefix],0 |
410 | ; mov [opcode_prefix],0 |
372 | mov dword [operand_size],0 |
411 | and dword [operand_size],0 |
373 | ; mov [rex_prefix],0 |
412 | ; mov [rex_prefix],0 |
374 | ; mov [vex_required],0 |
413 | ; mov [vex_required],0 |
375 | ; mov [vex_register],0 |
414 | ; mov [vex_register],0 |
376 | ; mov [immediate_size],0 |
415 | ; mov [immediate_size],0 |
377 | mov dword [rex_prefix],0 |
416 | and dword [rex_prefix],0 |
378 | call instruction_handler |
417 | call instruction_handler |
379 | instruction_handler: |
418 | instruction_handler: |
380 | movzx ebx,word [esi] |
419 | movzx ebx,word [esi] |
381 | mov al,[esi+2] |
420 | mov al,[esi+2] |
382 | add esi,3 |
421 | add esi,3 |
383 | add [esp],ebx |
422 | add [esp],ebx |
Line 406... | Line 445... | ||
406 | mov cl,[value_type] |
445 | mov cl,[value_type] |
407 | test cl,1 |
446 | test cl,1 |
408 | jnz invalid_use_of_symbol |
447 | jnz invalid_use_of_symbol |
409 | mov [labels_type],cl |
448 | mov [labels_type],cl |
410 | mov ecx,edi |
449 | mov dword [org_origin],edi |
411 | sub ecx,eax |
450 | xor ecx,ecx |
412 | adc edx,0 |
451 | mov dword [org_origin+4],ecx |
- | 452 | mov [org_origin_sign],cl |
|
- | 453 | mov [org_registers],ecx |
|
413 | neg edx |
454 | mov cl,[value_sign] |
414 | mov dword [org_origin],ecx |
455 | sub dword [org_origin],eax |
415 | mov dword [org_origin+4],edx |
456 | sbb dword [org_origin+4],edx |
416 | mov [org_registers],0 |
457 | sbb [org_origin_sign],cl |
417 | mov [org_start],edi |
458 | jp org_value_ok |
- | 459 | call recoverable_overflow |
|
- | 460 | org_value_ok: |
|
- | 461 | mov [org_start],edi |
|
418 | mov edx,[symbol_identifier] |
462 | mov edx,[symbol_identifier] |
419 | mov [org_symbol],edx |
463 | mov [org_symbol],edx |
420 | cmp [output_format],1 |
464 | cmp [output_format],1 |
421 | ja instruction_assembled |
465 | ja instruction_assembled |
422 | cmp edi,[code_start] |
466 | cmp edi,[code_start] |
Line 434... | Line 478... | ||
434 | jb invalid_use_of_symbol |
478 | jb invalid_use_of_symbol |
435 | je reserved_word_used_as_symbol |
479 | je reserved_word_used_as_symbol |
436 | inc esi |
480 | inc esi |
437 | mov ebx,eax |
481 | mov ebx,eax |
438 | xor cl,cl |
482 | mov [label_size],0 |
439 | lods byte [esi] |
483 | lods byte [esi] |
440 | cmp al,':' |
484 | cmp al,':' |
441 | je get_label_size |
485 | je get_label_size |
442 | dec esi |
486 | dec esi |
443 | cmp al,11h |
487 | cmp al,11h |
444 | jne label_size_ok |
488 | jne label_size_ok |
445 | get_label_size: |
489 | get_label_size: |
446 | lods word [esi] |
490 | lods word [esi] |
447 | cmp al,11h |
491 | cmp al,11h |
448 | jne invalid_argument |
492 | jne invalid_argument |
449 | mov cl,ah |
493 | mov [label_size],ah |
450 | label_size_ok: |
494 | label_size_ok: |
451 | mov eax,edi |
495 | cmp byte [esi],80h |
452 | xor edx,edx |
- | |
453 | sub eax,dword [org_origin] |
- | |
454 | sbb edx,dword [org_origin+4] |
- | |
455 | mov ebp,[org_registers] |
- | |
456 | cmp byte [esi],80h |
- | |
457 | je get_free_label_value |
496 | je get_free_label_value |
458 | mov ch,[labels_type] |
497 | call make_label |
459 | push [org_symbol] |
- | |
460 | pop [address_symbol] |
- | |
461 | cmp [virtual_data],0 |
- | |
462 | jne make_free_label |
- | |
463 | or byte [ebx+9],1 |
498 | jmp instruction_assembled |
464 | xchg eax,[ebx] |
- | |
465 | xchg edx,[ebx+4] |
- | |
466 | sub eax,[ebx] |
- | |
467 | sbb edx,[ebx+4] |
- | |
468 | mov dword [adjustment],eax |
- | |
469 | mov dword [adjustment+4],edx |
- | |
470 | or eax,edx |
- | |
471 | setne ah |
- | |
472 | jmp finish_label |
- | |
473 | get_free_label_value: |
499 | get_free_label_value: |
474 | inc esi |
500 | inc esi |
475 | lods byte [esi] |
501 | lods byte [esi] |
476 | cmp al,'(' |
502 | cmp al,'(' |
477 | jne invalid_argument |
503 | jne invalid_argument |
478 | push dword [ebx+8] |
504 | push dword [ebx+8] |
Line 505... | Line 531... | ||
505 | cmp edx,[ebx+4] |
531 | cmp edx,[ebx+4] |
506 | mov [ebx+4],edx |
532 | mov [ebx+4],edx |
507 | setne al |
533 | setne al |
508 | or ah,al |
534 | or ah,al |
509 | finish_label: |
535 | mov edx,[address_symbol] |
510 | cmp cl,[ebx+10] |
- | |
511 | mov [ebx+10],cl |
- | |
512 | setne al |
- | |
513 | or ah,al |
- | |
514 | cmp ch,[ebx+11] |
- | |
515 | mov [ebx+11],ch |
- | |
516 | setne al |
- | |
517 | or ah,al |
- | |
518 | cmp ebp,[ebx+12] |
- | |
519 | mov [ebx+12],ebp |
- | |
520 | setne al |
- | |
521 | or ah,al |
- | |
522 | or ch,ch |
- | |
523 | jz free_label_symbol_ok |
- | |
524 | mov edx,[address_symbol] |
- | |
525 | cmp edx,[ebx+20] |
536 | mov cl,[label_size] |
526 | mov [ebx+20],edx |
- | |
527 | setne al |
537 | call finish_label_symbol |
528 | or ah,al |
- | |
529 | free_label_symbol_ok: |
- | |
530 | mov cx,[current_pass] |
538 | jmp instruction_assembled |
531 | xchg [ebx+16],cx |
- | |
532 | mov edx,[current_line] |
- | |
533 | mov [ebx+28],edx |
- | |
534 | and byte [ebx+8],not 2 |
- | |
535 | test byte [ebx+8],1 |
- | |
536 | jz new_free_label |
- | |
537 | cmp cx,[ebx+16] |
- | |
538 | je symbol_already_defined |
- | |
539 | inc cx |
- | |
540 | sub cx,[ebx+16] |
- | |
541 | setnz al |
- | |
542 | or ah,al |
- | |
543 | jz instruction_assembled |
- | |
544 | test byte [ebx+8],8 |
- | |
545 | jz instruction_assembled |
- | |
546 | mov cx,[current_pass] |
- | |
547 | cmp cx,[ebx+18] |
- | |
548 | jne instruction_assembled |
- | |
549 | or [next_pass_needed],-1 |
- | |
550 | jmp instruction_assembled |
- | |
551 | new_free_label: |
- | |
552 | or byte [ebx+8],1 |
- | |
553 | jmp instruction_assembled |
- | |
554 | load_directive: |
539 | load_directive: |
555 | lods byte [esi] |
540 | lods byte [esi] |
556 | cmp al,2 |
541 | cmp al,2 |
557 | jne invalid_argument |
542 | jne invalid_argument |
558 | lods dword [esi] |
543 | lods dword [esi] |
Line 569... | Line 554... | ||
569 | load_size_ok: |
554 | load_size_ok: |
570 | cmp al,8 |
555 | cmp al,8 |
571 | ja invalid_value |
556 | ja invalid_value |
572 | mov [operand_size],al |
557 | mov [operand_size],al |
573 | mov dword [value],0 |
558 | and dword [value],0 |
574 | mov dword [value+4],0 |
559 | and dword [value+4],0 |
575 | lods word [esi] |
560 | lods word [esi] |
576 | cmp ax,82h+'(' shl 8 |
561 | cmp ax,82h+'(' shl 8 |
577 | jne invalid_argument |
562 | jne invalid_argument |
578 | load_from_code: |
563 | load_from_code: |
579 | cmp byte [esi],'.' |
564 | cmp byte [esi],'.' |
580 | je invalid_value |
565 | je invalid_value |
Line 601... | Line 586... | ||
601 | ja bad_load_address |
586 | ja bad_load_address |
602 | rep movs byte [edi],[esi] |
587 | rep movs byte [edi],[esi] |
603 | jmp value_loaded |
588 | jmp value_loaded |
604 | bad_load_address: |
589 | bad_load_address: |
605 | cmp [error_line],0 |
590 | call recoverable_overflow |
606 | jne value_loaded |
- | |
607 | mov eax,[current_line] |
- | |
608 | mov [error_line],eax |
- | |
609 | mov [error],value_out_of_range |
- | |
610 | value_loaded: |
591 | value_loaded: |
611 | pop edi esi |
592 | pop edi esi |
612 | mov eax,dword [value] |
593 | mov [value_sign],0 |
- | 594 | mov eax,dword [value] |
|
613 | mov edx,dword [value+4] |
595 | mov edx,dword [value+4] |
614 | pop ebx |
596 | pop ebx |
615 | xor cx,cx |
597 | xor cx,cx |
616 | jmp make_constant |
598 | jmp make_constant |
617 | store_directive: |
599 | store_directive: |
Line 625... | Line 607... | ||
625 | movzx eax,al |
607 | movzx eax,al |
626 | mov [operand_size],1 |
608 | mov [operand_size],1 |
627 | jmp store_value_ok |
609 | jmp store_value_ok |
628 | sized_store: |
610 | sized_store: |
629 | call get_value |
611 | or [size_override],-1 |
- | 612 | call get_value |
|
630 | store_value_ok: |
613 | store_value_ok: |
631 | cmp [value_type],0 |
614 | cmp [value_type],0 |
632 | jne invalid_use_of_symbol |
615 | jne invalid_use_of_symbol |
633 | mov dword [value],eax |
616 | mov dword [value],eax |
634 | mov dword [value+4],edx |
617 | mov dword [value+4],edx |
Line 667... | Line 650... | ||
667 | mov [undefined_data_start],eax |
650 | mov [undefined_data_start],eax |
668 | jmp instruction_assembled |
651 | jmp instruction_assembled |
669 | bad_store_address: |
652 | bad_store_address: |
670 | pop edi esi |
653 | pop edi esi |
671 | cmp [error_line],0 |
654 | call recoverable_overflow |
672 | jne instruction_assembled |
- | |
673 | mov eax,[current_line] |
- | |
674 | mov [error_line],eax |
- | |
675 | mov [error],value_out_of_range |
- | |
676 | jmp instruction_assembled |
655 | jmp instruction_assembled |
677 | 656 | ||
Line 678... | Line 657... | ||
678 | display_directive: |
657 | display_directive: |
679 | lods byte [esi] |
658 | lods byte [esi] |
680 | cmp al,'(' |
659 | cmp al,'(' |
Line 793... | Line 772... | ||
793 | cmp byte [esi],'.' |
772 | cmp byte [esi],'.' |
794 | je invalid_value |
773 | je invalid_value |
795 | call get_address_value |
774 | call get_address_value |
796 | mov ebp,[address_symbol] |
775 | mov ebp,[address_symbol] |
797 | xor ch,ch |
776 | or bh,bh |
798 | or bh,bh |
- | |
799 | jz set_virtual |
777 | setnz ch |
800 | mov ch,1 |
- | |
801 | jmp set_virtual |
778 | jmp set_virtual |
802 | virtual_at_current: |
779 | virtual_at_current: |
803 | dec esi |
780 | dec esi |
804 | mov al,[labels_type] |
781 | mov al,[labels_type] |
805 | mov [value_type],al |
782 | mov [value_type],al |
806 | mov ebp,[org_symbol] |
783 | mov ebp,[org_symbol] |
807 | mov eax,edi |
784 | mov eax,edi |
808 | xor edx,edx |
785 | xor edx,edx |
809 | sub eax,dword [org_origin] |
786 | xor cl,cl |
- | 787 | sub eax,dword [org_origin] |
|
810 | sbb edx,dword [org_origin+4] |
788 | sbb edx,dword [org_origin+4] |
811 | mov bx,word [org_registers] |
789 | sbb cl,[org_origin_sign] |
- | 790 | mov [address_sign],cl |
|
- | 791 | mov bx,word [org_registers] |
|
812 | mov cx,word [org_registers+2] |
792 | mov cx,word [org_registers+2] |
813 | xchg bh,bl |
793 | xchg bh,bl |
814 | xchg ch,cl |
794 | xchg ch,cl |
815 | set_virtual: |
795 | set_virtual: |
816 | push [org_registers] |
796 | push [org_registers] |
Line 819... | Line 799... | ||
819 | mov byte [org_registers+2],ch |
799 | mov byte [org_registers+2],ch |
820 | mov byte [org_registers+3],cl |
800 | mov byte [org_registers+3],cl |
821 | call allocate_structure_data |
801 | call allocate_structure_data |
822 | mov word [ebx],virtual_directive-instruction_handler |
802 | mov word [ebx],virtual_directive-instruction_handler |
823 | not eax |
803 | mov cl,[address_sign] |
- | 804 | not eax |
|
824 | not edx |
805 | not edx |
825 | add eax,1 |
806 | not cl |
- | 807 | add eax,1 |
|
826 | adc edx,0 |
808 | adc edx,0 |
827 | add eax,edi |
809 | adc cl,0 |
- | 810 | add eax,edi |
|
828 | adc edx,0 |
811 | adc edx,0 |
829 | xchg dword [org_origin],eax |
812 | adc cl,0 |
- | 813 | xchg dword [org_origin],eax |
|
830 | xchg dword [org_origin+4],edx |
814 | xchg dword [org_origin+4],edx |
831 | mov [ebx+10h],eax |
815 | xchg [org_origin_sign],cl |
- | 816 | mov [ebx+10h],eax |
|
832 | mov [ebx+14h],edx |
817 | mov [ebx+14h],edx |
833 | pop eax |
818 | pop eax |
834 | mov [ebx+18h],eax |
819 | mov [ebx+18h],eax |
835 | mov al,[virtual_data] |
820 | mov al,[virtual_data] |
836 | mov [ebx+2],al |
821 | and al,0Fh |
- | 822 | shl cl,4 |
|
- | 823 | or al,cl |
|
- | 824 | mov [ebx+2],al |
|
837 | mov al,[labels_type] |
825 | mov al,[labels_type] |
838 | mov [ebx+3],al |
826 | mov [ebx+3],al |
839 | mov eax,edi |
827 | mov eax,edi |
840 | xchg eax,[org_start] |
828 | xchg eax,[org_start] |
841 | mov [ebx+0Ch],eax |
829 | mov [ebx+0Ch],eax |
Line 874... | Line 862... | ||
874 | end_virtual: |
862 | end_virtual: |
875 | call find_structure_data |
863 | call find_structure_data |
876 | jc unexpected_instruction |
864 | jc unexpected_instruction |
877 | mov al,[ebx+2] |
865 | mov al,[ebx+2] |
878 | mov [virtual_data],al |
866 | mov ah,al |
- | 867 | shr ah,4 |
|
- | 868 | and al,1 |
|
- | 869 | neg al |
|
- | 870 | and ah,1 |
|
- | 871 | neg ah |
|
- | 872 | mov [virtual_data],al |
|
879 | mov al,[ebx+3] |
873 | mov [org_origin_sign],ah |
- | 874 | mov al,[ebx+3] |
|
880 | mov [labels_type],al |
875 | mov [labels_type],al |
881 | mov eax,[ebx+10h] |
876 | mov eax,[ebx+10h] |
882 | mov dword [org_origin],eax |
877 | mov dword [org_origin],eax |
883 | mov eax,[ebx+14h] |
878 | mov eax,[ebx+14h] |
884 | mov dword [org_origin+4],eax |
879 | mov dword [org_origin+4],eax |
Line 1337... | Line 1332... | ||
1337 | je get_word |
1332 | je get_word |
1338 | cmp al,'?' |
1333 | cmp al,'?' |
1339 | jne invalid_argument |
1334 | jne invalid_argument |
1340 | mov eax,edi |
1335 | mov eax,edi |
1341 | mov word [edi],0 |
1336 | and word [edi],0 |
1342 | scas word [edi] |
1337 | scas word [edi] |
1343 | jmp undefined_data |
1338 | jmp undefined_data |
1344 | ret |
1339 | ret |
1345 | get_word: |
1340 | get_word: |
1346 | cmp [base_code],0 |
1341 | cmp [base_code],0 |
1347 | je word_data_value |
1342 | je word_data_value |
Line 1375... | Line 1370... | ||
1375 | je get_dword |
1370 | je get_dword |
1376 | cmp al,'?' |
1371 | cmp al,'?' |
1377 | jne invalid_argument |
1372 | jne invalid_argument |
1378 | mov eax,edi |
1373 | mov eax,edi |
1379 | mov dword [edi],0 |
1374 | and dword [edi],0 |
1380 | scas dword [edi] |
1375 | scas dword [edi] |
1381 | jmp undefined_data |
1376 | jmp undefined_data |
1382 | get_dword: |
1377 | get_dword: |
1383 | push esi |
1378 | push esi |
1384 | call get_dword_value |
1379 | call get_dword_value |
1385 | pop ebx |
1380 | pop ebx |
Line 1418... | Line 1413... | ||
1418 | je get_pword |
1413 | je get_pword |
1419 | cmp al,'?' |
1414 | cmp al,'?' |
1420 | jne invalid_argument |
1415 | jne invalid_argument |
1421 | mov eax,edi |
1416 | mov eax,edi |
1422 | mov dword [edi],0 |
1417 | and dword [edi],0 |
1423 | scas dword [edi] |
1418 | scas dword [edi] |
1424 | mov word [edi],0 |
1419 | and word [edi],0 |
1425 | scas word [edi] |
1420 | scas word [edi] |
1426 | jmp undefined_data |
1421 | jmp undefined_data |
1427 | get_pword: |
1422 | get_pword: |
1428 | push esi |
1423 | push esi |
1429 | call get_pword_value |
1424 | call get_pword_value |
1430 | pop ebx |
1425 | pop ebx |
Line 1465... | Line 1460... | ||
1465 | je get_qword |
1460 | je get_qword |
1466 | cmp al,'?' |
1461 | cmp al,'?' |
1467 | jne invalid_argument |
1462 | jne invalid_argument |
1468 | mov eax,edi |
1463 | mov eax,edi |
1469 | mov dword [edi],0 |
1464 | and dword [edi],0 |
1470 | scas dword [edi] |
1465 | scas dword [edi] |
1471 | mov dword [edi],0 |
1466 | and dword [edi],0 |
1472 | scas dword [edi] |
1467 | scas dword [edi] |
1473 | jmp undefined_data |
1468 | jmp undefined_data |
1474 | get_qword: |
1469 | get_qword: |
1475 | call get_qword_value |
1470 | call get_qword_value |
1476 | call mark_relocation |
1471 | call mark_relocation |
1477 | stos dword [edi] |
1472 | stos dword [edi] |
Line 1485... | Line 1480... | ||
1485 | je get_tword |
1480 | je get_tword |
1486 | cmp al,'?' |
1481 | cmp al,'?' |
1487 | jne invalid_argument |
1482 | jne invalid_argument |
1488 | mov eax,edi |
1483 | mov eax,edi |
1489 | mov dword [edi],0 |
1484 | and dword [edi],0 |
1490 | scas dword [edi] |
1485 | scas dword [edi] |
1491 | mov dword [edi],0 |
1486 | and dword [edi],0 |
1492 | scas dword [edi] |
1487 | scas dword [edi] |
1493 | mov word [edi],0 |
1488 | and word [edi],0 |
1494 | scas word [edi] |
1489 | scas word [edi] |
1495 | jmp undefined_data |
1490 | jmp undefined_data |
1496 | get_tword: |
1491 | get_tword: |
1497 | cmp byte [esi],'.' |
1492 | cmp byte [esi],'.' |
1498 | jne complex_tword |
1493 | jne complex_tword |
1499 | inc esi |
1494 | inc esi |
Line 1645... | Line 1640... | ||
1645 | find_current_source_path: |
1640 | find_current_source_path: |
1646 | mov esi,[eax] |
1641 | mov esi,[eax] |
1647 | test byte [eax+7],80h |
1642 | test byte [eax+7],80h |
1648 | jz get_current_path |
1643 | jz get_current_path |
1649 | mov eax,[eax+12] |
1644 | mov eax,[eax+8] |
1650 | jmp find_current_source_path |
1645 | jmp find_current_source_path |
1651 | get_current_path: |
1646 | get_current_path: |
1652 | lodsb |
1647 | lodsb |
1653 | stosb |
1648 | stosb |
1654 | or al,al |
1649 | or al,al |
1655 | jnz get_current_path |
1650 | jnz get_current_path |
Line 1663... | Line 1658... | ||
1663 | dec edi |
1658 | dec edi |
1664 | jmp cut_current_path |
1659 | jmp cut_current_path |
1665 | current_path_ok: |
1660 | current_path_ok: |
1666 | mov esi,[esp+4] |
1661 | mov esi,[esp+4] |
1667 | call preprocess_path |
1662 | call expand_path |
1668 | pop edx |
1663 | pop edx |
- | 1664 | mov esi,edx |
|
- | 1665 | call open |
|
- | 1666 | jnc file_opened |
|
- | 1667 | mov edx,[include_paths] |
|
- | 1668 | search_in_include_paths: |
|
- | 1669 | push edx esi |
|
- | 1670 | mov edi,esi |
|
- | 1671 | mov esi,[esp+4] |
|
- | 1672 | call get_include_directory |
|
- | 1673 | mov [esp+4],esi |
|
- | 1674 | mov esi,[esp+8] |
|
- | 1675 | call expand_path |
|
- | 1676 | pop edx |
|
1669 | mov esi,edx |
1677 | mov esi,edx |
1670 | call open |
1678 | call open |
1671 | jnc file_opened |
1679 | pop edx |
- | 1680 | jnc file_opened |
|
1672 | mov edi,esi |
1681 | cmp byte [edx],0 |
- | 1682 | jne search_in_include_paths |
|
- | 1683 | mov edi,esi |
|
1673 | mov esi,[esp] |
1684 | mov esi,[esp] |
1674 | push edi |
1685 | push edi |
1675 | call preprocess_path |
1686 | call expand_path |
1676 | pop edx |
1687 | pop edx |
1677 | mov esi,edx |
1688 | mov esi,edx |
1678 | call open |
1689 | call open |
1679 | jc file_not_found |
1690 | jc file_not_found |
1680 | file_opened: |
1691 | file_opened: |
1681 | mov edi,esi |
1692 | mov edi,esi |