forked from KolibriOS/kolibrios
fasm: 1.71.16
git-svn-id: svn://kolibrios.org@4478 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b2e030871f
commit
69834ba166
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm -m 16384 fasm.asm fasm
|
@fasm -m 16384 fasm.asm fasm
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@kpack fasm
|
@kpack fasm
|
||||||
@pause
|
@pause
|
@ -1,6 +1,6 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm -m 16384 fasm.asm fasm
|
@fasm -m 16384 fasm.asm fasm
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@kpack fasm
|
@kpack fasm
|
||||||
@pause
|
@pause
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -3707,6 +3707,7 @@ format_elf_exe:
|
|||||||
add eax,edi
|
add eax,edi
|
||||||
adc ebp,0
|
adc ebp,0
|
||||||
adc cl,0
|
adc cl,0
|
||||||
|
mov edx,ebp
|
||||||
elf_exe_addressing_setup:
|
elf_exe_addressing_setup:
|
||||||
push eax
|
push eax
|
||||||
call init_addressing_space
|
call init_addressing_space
|
||||||
@ -3938,6 +3939,7 @@ elf_segment:
|
|||||||
add eax,edi
|
add eax,edi
|
||||||
sub eax,edx
|
sub eax,edx
|
||||||
mov [ebx+10h],eax
|
mov [ebx+10h],eax
|
||||||
|
and [undefined_data_end],0
|
||||||
mov eax,[ebx+8]
|
mov eax,[ebx+8]
|
||||||
cmp byte [ebx],1
|
cmp byte [ebx],1
|
||||||
jne elf_segment_position_ok
|
jne elf_segment_position_ok
|
||||||
@ -4067,6 +4069,7 @@ elf_segment:
|
|||||||
add eax,edi
|
add eax,edi
|
||||||
sub eax,edx
|
sub eax,edx
|
||||||
mov [ebx+20h],eax
|
mov [ebx+20h],eax
|
||||||
|
and [undefined_data_end],0
|
||||||
mov eax,[ebx+10h]
|
mov eax,[ebx+10h]
|
||||||
mov edx,[ebx+10h+4]
|
mov edx,[ebx+10h+4]
|
||||||
cmp byte [ebx],1
|
cmp byte [ebx],1
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
flat assembler version 1.70
|
flat assembler version 1.71
|
||||||
Copyright (c) 1999-2012, Tomasz Grysztar.
|
Copyright (c) 1999-2013, Tomasz Grysztar.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
This program is free for commercial and non-commercial use as long as
|
This program is free for commercial and non-commercial use as long as
|
||||||
|
@ -1,52 +1,52 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2013, Tomasz Grysztar.
|
; Copyright (c) 1999-2013, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
_out_of_memory db 'out of memory',0
|
_out_of_memory db 'out of memory',0
|
||||||
_stack_overflow db 'out of stack space',0
|
_stack_overflow db 'out of stack space',0
|
||||||
_main_file_not_found db 'source file not found',0
|
_main_file_not_found db 'source file not found',0
|
||||||
_unexpected_end_of_file db 'unexpected end of file',0
|
_unexpected_end_of_file db 'unexpected end of file',0
|
||||||
_code_cannot_be_generated db 'code cannot be generated',0
|
_code_cannot_be_generated db 'code cannot be generated',0
|
||||||
_format_limitations_exceeded db 'format limitations exceeded',0
|
_format_limitations_exceeded db 'format limitations exceeded',0
|
||||||
_invalid_definition db 'invalid definition provided',0
|
_invalid_definition db 'invalid definition provided',0
|
||||||
_write_failed db 'write failed',0
|
_write_failed db 'write failed',0
|
||||||
_file_not_found db 'file not found',0
|
_file_not_found db 'file not found',0
|
||||||
_error_reading_file db 'error reading file',0
|
_error_reading_file db 'error reading file',0
|
||||||
_invalid_file_format db 'invalid file format',0
|
_invalid_file_format db 'invalid file format',0
|
||||||
_invalid_macro_arguments db 'invalid macro arguments',0
|
_invalid_macro_arguments db 'invalid macro arguments',0
|
||||||
_incomplete_macro db 'incomplete macro',0
|
_incomplete_macro db 'incomplete macro',0
|
||||||
_unexpected_characters db 'unexpected characters',0
|
_unexpected_characters db 'unexpected characters',0
|
||||||
_invalid_argument db 'invalid argument',0
|
_invalid_argument db 'invalid argument',0
|
||||||
_illegal_instruction db 'illegal instruction',0
|
_illegal_instruction db 'illegal instruction',0
|
||||||
_invalid_operand db 'invalid operand',0
|
_invalid_operand db 'invalid operand',0
|
||||||
_invalid_operand_size db 'invalid size of operand',0
|
_invalid_operand_size db 'invalid size of operand',0
|
||||||
_operand_size_not_specified db 'operand size not specified',0
|
_operand_size_not_specified db 'operand size not specified',0
|
||||||
_operand_sizes_do_not_match db 'operand sizes do not match',0
|
_operand_sizes_do_not_match db 'operand sizes do not match',0
|
||||||
_invalid_address_size db 'invalid size of address value',0
|
_invalid_address_size db 'invalid size of address value',0
|
||||||
_address_sizes_do_not_agree db 'address sizes do not agree',0
|
_address_sizes_do_not_agree db 'address sizes do not agree',0
|
||||||
_disallowed_combination_of_registers db 'disallowed combination of registers',0
|
_disallowed_combination_of_registers db 'disallowed combination of registers',0
|
||||||
_long_immediate_not_encodable db 'not encodable with long immediate',0
|
_long_immediate_not_encodable db 'not encodable with long immediate',0
|
||||||
_relative_jump_out_of_range db 'relative jump out of range',0
|
_relative_jump_out_of_range db 'relative jump out of range',0
|
||||||
_invalid_expression db 'invalid expression',0
|
_invalid_expression db 'invalid expression',0
|
||||||
_invalid_address db 'invalid address',0
|
_invalid_address db 'invalid address',0
|
||||||
_invalid_value db 'invalid value',0
|
_invalid_value db 'invalid value',0
|
||||||
_value_out_of_range db 'value out of range',0
|
_value_out_of_range db 'value out of range',0
|
||||||
_undefined_symbol db 'undefined symbol',0
|
_undefined_symbol db 'undefined symbol',0
|
||||||
_symbol_out_of_scope_1 db 'symbol',0
|
_symbol_out_of_scope_1 db 'symbol',0
|
||||||
_symbol_out_of_scope_2 db 'out of scope',0
|
_symbol_out_of_scope_2 db 'out of scope',0
|
||||||
_invalid_use_of_symbol db 'invalid use of symbol',0
|
_invalid_use_of_symbol db 'invalid use of symbol',0
|
||||||
_name_too_long db 'name too long',0
|
_name_too_long db 'name too long',0
|
||||||
_invalid_name db 'invalid name',0
|
_invalid_name db 'invalid name',0
|
||||||
_reserved_word_used_as_symbol db 'reserved word used as symbol',0
|
_reserved_word_used_as_symbol db 'reserved word used as symbol',0
|
||||||
_symbol_already_defined db 'symbol already defined',0
|
_symbol_already_defined db 'symbol already defined',0
|
||||||
_missing_end_quote db 'missing end quote',0
|
_missing_end_quote db 'missing end quote',0
|
||||||
_missing_end_directive db 'missing end directive',0
|
_missing_end_directive db 'missing end directive',0
|
||||||
_unexpected_instruction db 'unexpected instruction',0
|
_unexpected_instruction db 'unexpected instruction',0
|
||||||
_extra_characters_on_line db 'extra characters on line',0
|
_extra_characters_on_line db 'extra characters on line',0
|
||||||
_section_not_aligned_enough db 'section is not aligned enough',0
|
_section_not_aligned_enough db 'section is not aligned enough',0
|
||||||
_setting_already_specified db 'setting already specified',0
|
_setting_already_specified db 'setting already specified',0
|
||||||
_data_already_defined db 'data already defined',0
|
_data_already_defined db 'data already defined',0
|
||||||
_too_many_repeats db 'too many repeats',0
|
_too_many_repeats db 'too many repeats',0
|
||||||
_invoked_error db 'error directive encountered in source file',0
|
_invoked_error db 'error directive encountered in source file',0
|
||||||
_assertion_failed db 'assertion failed',0
|
_assertion_failed db 'assertion failed',0
|
||||||
|
@ -48,12 +48,45 @@ preprocessor:
|
|||||||
jc main_file_not_found
|
jc main_file_not_found
|
||||||
mov edi,[memory_start]
|
mov edi,[memory_start]
|
||||||
call preprocess_file
|
call preprocess_file
|
||||||
|
cmp [macro_status],0
|
||||||
|
je process_postponed
|
||||||
mov eax,[error_line]
|
mov eax,[error_line]
|
||||||
mov [current_line],eax
|
mov [current_line],eax
|
||||||
cmp [macro_status],0
|
jmp incomplete_macro
|
||||||
jne incomplete_macro
|
process_postponed:
|
||||||
|
mov edx,hash_tree
|
||||||
|
mov ecx,32
|
||||||
|
find_postponed_list:
|
||||||
|
mov edx,[edx]
|
||||||
|
or edx,edx
|
||||||
|
loopnz find_postponed_list
|
||||||
|
jz preprocessing_finished
|
||||||
|
process_postponed_list:
|
||||||
|
mov eax,[edx]
|
||||||
|
or eax,eax
|
||||||
|
jz preprocessing_finished
|
||||||
|
push edx
|
||||||
|
mov ebx,edx
|
||||||
|
find_earliest_postponed:
|
||||||
|
mov eax,[edx]
|
||||||
|
or eax,eax
|
||||||
|
jz earliest_postponed_found
|
||||||
|
mov ebx,edx
|
||||||
|
mov edx,eax
|
||||||
|
jmp find_earliest_postponed
|
||||||
|
earliest_postponed_found:
|
||||||
|
mov [ebx],eax
|
||||||
|
call use_postponed_macro
|
||||||
|
pop edx
|
||||||
|
jmp process_postponed_list
|
||||||
|
preprocessing_finished:
|
||||||
mov [source_start],edi
|
mov [source_start],edi
|
||||||
ret
|
ret
|
||||||
|
use_postponed_macro:
|
||||||
|
lea esi,[edi-1]
|
||||||
|
push ecx esi
|
||||||
|
mov [struc_name],0
|
||||||
|
jmp use_macro
|
||||||
|
|
||||||
preprocess_file:
|
preprocess_file:
|
||||||
push [memory_end]
|
push [memory_end]
|
||||||
@ -691,6 +724,9 @@ get_preprocessor_symbol:
|
|||||||
ret
|
ret
|
||||||
add_preprocessor_symbol:
|
add_preprocessor_symbol:
|
||||||
push edi esi
|
push edi esi
|
||||||
|
xor eax,eax
|
||||||
|
or cl,cl
|
||||||
|
jz reshape_hash
|
||||||
cmp ch,11b
|
cmp ch,11b
|
||||||
je preprocessor_symbol_name_ok
|
je preprocessor_symbol_name_ok
|
||||||
push ecx
|
push ecx
|
||||||
@ -701,6 +737,7 @@ add_preprocessor_symbol:
|
|||||||
pop ecx
|
pop ecx
|
||||||
preprocessor_symbol_name_ok:
|
preprocessor_symbol_name_ok:
|
||||||
call calculate_hash
|
call calculate_hash
|
||||||
|
reshape_hash:
|
||||||
mov ebp,eax
|
mov ebp,eax
|
||||||
and ebp,3FFh
|
and ebp,3FFh
|
||||||
shr eax,10
|
shr eax,10
|
||||||
@ -1013,6 +1050,27 @@ define_macro:
|
|||||||
lods dword [esi]
|
lods dword [esi]
|
||||||
add esi,eax
|
add esi,eax
|
||||||
jmp skip_macro_block
|
jmp skip_macro_block
|
||||||
|
postpone_directive:
|
||||||
|
push esi
|
||||||
|
mov esi,edx
|
||||||
|
xor ecx,ecx
|
||||||
|
call add_preprocessor_symbol
|
||||||
|
mov eax,[current_line]
|
||||||
|
mov [edx+12],eax
|
||||||
|
pop esi
|
||||||
|
mov [edx+8],esi
|
||||||
|
mov al,[macro_status]
|
||||||
|
and al,0F0h
|
||||||
|
or al,1
|
||||||
|
mov [macro_status],al
|
||||||
|
mov eax,[current_line]
|
||||||
|
mov [error_line],eax
|
||||||
|
lods byte [esi]
|
||||||
|
or al,al
|
||||||
|
jz line_preprocessed
|
||||||
|
cmp al,'{'
|
||||||
|
jne unexpected_characters
|
||||||
|
jmp found_macro_block
|
||||||
rept_directive:
|
rept_directive:
|
||||||
mov [base_code],0
|
mov [base_code],0
|
||||||
jmp define_instant_macro
|
jmp define_instant_macro
|
||||||
@ -1987,8 +2045,21 @@ process_macro:
|
|||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
jmp macro_line_header_ok
|
jmp macro_line_header_ok
|
||||||
instant_macro_line_header:
|
instant_macro_line_header:
|
||||||
mov eax,[macro_line]
|
mov eax,[esp]
|
||||||
add eax,16+1
|
add eax,16
|
||||||
|
find_defining_directive:
|
||||||
|
inc eax
|
||||||
|
cmp byte [eax-1],3Bh
|
||||||
|
je defining_directive_ok
|
||||||
|
cmp byte [eax-1],1Ah
|
||||||
|
jne find_defining_directive
|
||||||
|
push eax
|
||||||
|
movzx eax,byte [eax]
|
||||||
|
inc eax
|
||||||
|
add [esp],eax
|
||||||
|
pop eax
|
||||||
|
jmp find_defining_directive
|
||||||
|
defining_directive_ok:
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,ecx
|
mov eax,ecx
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
|
@ -1,450 +1,450 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2013, Tomasz Grysztar.
|
; Copyright (c) 1999-2013, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
dump_symbols:
|
dump_symbols:
|
||||||
mov edi,[code_start]
|
mov edi,[code_start]
|
||||||
call setup_dump_header
|
call setup_dump_header
|
||||||
mov esi,[input_file]
|
mov esi,[input_file]
|
||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
mov [ebx-40h+0Ch],eax
|
mov [ebx-40h+0Ch],eax
|
||||||
mov esi,[output_file]
|
mov esi,[output_file]
|
||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
mov edx,[symbols_stream]
|
mov edx,[symbols_stream]
|
||||||
mov ebp,[free_additional_memory]
|
mov ebp,[free_additional_memory]
|
||||||
and [number_of_sections],0
|
and [number_of_sections],0
|
||||||
cmp [output_format],4
|
cmp [output_format],4
|
||||||
je prepare_strings_table
|
je prepare_strings_table
|
||||||
cmp [output_format],5
|
cmp [output_format],5
|
||||||
jne strings_table_ready
|
jne strings_table_ready
|
||||||
bt [format_flags],0
|
bt [format_flags],0
|
||||||
jc strings_table_ready
|
jc strings_table_ready
|
||||||
prepare_strings_table:
|
prepare_strings_table:
|
||||||
cmp edx,ebp
|
cmp edx,ebp
|
||||||
je strings_table_ready
|
je strings_table_ready
|
||||||
mov al,[edx]
|
mov al,[edx]
|
||||||
test al,al
|
test al,al
|
||||||
jz prepare_string
|
jz prepare_string
|
||||||
cmp al,80h
|
cmp al,80h
|
||||||
je prepare_string
|
je prepare_string
|
||||||
add edx,0Ch
|
add edx,0Ch
|
||||||
cmp al,0C0h
|
cmp al,0C0h
|
||||||
jb prepare_strings_table
|
jb prepare_strings_table
|
||||||
add edx,4
|
add edx,4
|
||||||
jmp prepare_strings_table
|
jmp prepare_strings_table
|
||||||
prepare_string:
|
prepare_string:
|
||||||
mov esi,edi
|
mov esi,edi
|
||||||
sub esi,ebx
|
sub esi,ebx
|
||||||
xchg esi,[edx+4]
|
xchg esi,[edx+4]
|
||||||
test al,al
|
test al,al
|
||||||
jz prepare_section_string
|
jz prepare_section_string
|
||||||
or dword [edx+4],1 shl 31
|
or dword [edx+4],1 shl 31
|
||||||
add edx,0Ch
|
add edx,0Ch
|
||||||
prepare_external_string:
|
prepare_external_string:
|
||||||
mov ecx,[esi]
|
mov ecx,[esi]
|
||||||
add esi,4
|
add esi,4
|
||||||
rep movs byte [edi],[esi]
|
rep movs byte [edi],[esi]
|
||||||
mov byte [edi],0
|
mov byte [edi],0
|
||||||
inc edi
|
inc edi
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
jmp prepare_strings_table
|
jmp prepare_strings_table
|
||||||
prepare_section_string:
|
prepare_section_string:
|
||||||
mov ecx,[number_of_sections]
|
mov ecx,[number_of_sections]
|
||||||
mov eax,ecx
|
mov eax,ecx
|
||||||
inc eax
|
inc eax
|
||||||
mov [number_of_sections],eax
|
mov [number_of_sections],eax
|
||||||
xchg eax,[edx+4]
|
xchg eax,[edx+4]
|
||||||
shl ecx,2
|
shl ecx,2
|
||||||
add ecx,[free_additional_memory]
|
add ecx,[free_additional_memory]
|
||||||
mov [ecx],eax
|
mov [ecx],eax
|
||||||
add edx,20h
|
add edx,20h
|
||||||
test esi,esi
|
test esi,esi
|
||||||
jz prepare_default_section_string
|
jz prepare_default_section_string
|
||||||
cmp [output_format],5
|
cmp [output_format],5
|
||||||
jne prepare_external_string
|
jne prepare_external_string
|
||||||
bt [format_flags],0
|
bt [format_flags],0
|
||||||
jc prepare_external_string
|
jc prepare_external_string
|
||||||
mov esi,[esi]
|
mov esi,[esi]
|
||||||
add esi,[resource_data]
|
add esi,[resource_data]
|
||||||
copy_elf_section_name:
|
copy_elf_section_name:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
test al,al
|
test al,al
|
||||||
jnz copy_elf_section_name
|
jnz copy_elf_section_name
|
||||||
jmp prepare_strings_table
|
jmp prepare_strings_table
|
||||||
prepare_default_section_string:
|
prepare_default_section_string:
|
||||||
mov eax,'.fla'
|
mov eax,'.fla'
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov ax,'t'
|
mov ax,'t'
|
||||||
stos word [edi]
|
stos word [edi]
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
jmp prepare_strings_table
|
jmp prepare_strings_table
|
||||||
strings_table_ready:
|
strings_table_ready:
|
||||||
mov edx,[tagged_blocks]
|
mov edx,[tagged_blocks]
|
||||||
mov ebp,[memory_end]
|
mov ebp,[memory_end]
|
||||||
sub ebp,[labels_list]
|
sub ebp,[labels_list]
|
||||||
add ebp,edx
|
add ebp,edx
|
||||||
prepare_labels_dump:
|
prepare_labels_dump:
|
||||||
cmp edx,ebp
|
cmp edx,ebp
|
||||||
je labels_dump_ok
|
je labels_dump_ok
|
||||||
mov eax,[edx+24]
|
mov eax,[edx+24]
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jz label_dump_name_ok
|
jz label_dump_name_ok
|
||||||
cmp eax,[memory_start]
|
cmp eax,[memory_start]
|
||||||
jb label_name_outside_source
|
jb label_name_outside_source
|
||||||
cmp eax,[source_start]
|
cmp eax,[source_start]
|
||||||
ja label_name_outside_source
|
ja label_name_outside_source
|
||||||
sub eax,[memory_start]
|
sub eax,[memory_start]
|
||||||
dec eax
|
dec eax
|
||||||
mov [edx+24],eax
|
mov [edx+24],eax
|
||||||
jmp label_dump_name_ok
|
jmp label_dump_name_ok
|
||||||
label_name_outside_source:
|
label_name_outside_source:
|
||||||
mov esi,eax
|
mov esi,eax
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
or eax,1 shl 31
|
or eax,1 shl 31
|
||||||
mov [edx+24],eax
|
mov [edx+24],eax
|
||||||
movzx ecx,byte [esi-1]
|
movzx ecx,byte [esi-1]
|
||||||
lea eax,[edi+ecx+1]
|
lea eax,[edi+ecx+1]
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
rep movsb
|
rep movsb
|
||||||
xor al,al
|
xor al,al
|
||||||
stosb
|
stosb
|
||||||
label_dump_name_ok:
|
label_dump_name_ok:
|
||||||
mov eax,[edx+28]
|
mov eax,[edx+28]
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jz label_dump_line_ok
|
jz label_dump_line_ok
|
||||||
sub eax,[memory_start]
|
sub eax,[memory_start]
|
||||||
mov [edx+28],eax
|
mov [edx+28],eax
|
||||||
label_dump_line_ok:
|
label_dump_line_ok:
|
||||||
test byte [edx+9],4
|
test byte [edx+9],4
|
||||||
jz convert_base_symbol_for_label
|
jz convert_base_symbol_for_label
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [edx],eax
|
mov [edx],eax
|
||||||
mov [edx+4],eax
|
mov [edx+4],eax
|
||||||
jmp base_symbol_for_label_ok
|
jmp base_symbol_for_label_ok
|
||||||
convert_base_symbol_for_label:
|
convert_base_symbol_for_label:
|
||||||
mov eax,[edx+20]
|
mov eax,[edx+20]
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jz base_symbol_for_label_ok
|
jz base_symbol_for_label_ok
|
||||||
cmp eax,[symbols_stream]
|
cmp eax,[symbols_stream]
|
||||||
mov eax,[eax+4]
|
mov eax,[eax+4]
|
||||||
jae base_symbol_for_label_ok
|
jae base_symbol_for_label_ok
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
base_symbol_for_label_ok:
|
base_symbol_for_label_ok:
|
||||||
mov [edx+20],eax
|
mov [edx+20],eax
|
||||||
mov ax,[current_pass]
|
mov ax,[current_pass]
|
||||||
cmp ax,[edx+16]
|
cmp ax,[edx+16]
|
||||||
je label_defined_flag_ok
|
je label_defined_flag_ok
|
||||||
and byte [edx+8],not 1
|
and byte [edx+8],not 1
|
||||||
label_defined_flag_ok:
|
label_defined_flag_ok:
|
||||||
cmp ax,[edx+18]
|
cmp ax,[edx+18]
|
||||||
je label_used_flag_ok
|
je label_used_flag_ok
|
||||||
and byte [edx+8],not 8
|
and byte [edx+8],not 8
|
||||||
label_used_flag_ok:
|
label_used_flag_ok:
|
||||||
add edx,LABEL_STRUCTURE_SIZE
|
add edx,LABEL_STRUCTURE_SIZE
|
||||||
jmp prepare_labels_dump
|
jmp prepare_labels_dump
|
||||||
labels_dump_ok:
|
labels_dump_ok:
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
mov [ebx-40h+14h],eax
|
mov [ebx-40h+14h],eax
|
||||||
add eax,40h
|
add eax,40h
|
||||||
mov [ebx-40h+18h],eax
|
mov [ebx-40h+18h],eax
|
||||||
mov ecx,[memory_end]
|
mov ecx,[memory_end]
|
||||||
sub ecx,[labels_list]
|
sub ecx,[labels_list]
|
||||||
mov [ebx-40h+1Ch],ecx
|
mov [ebx-40h+1Ch],ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
mov [ebx-40h+20h],eax
|
mov [ebx-40h+20h],eax
|
||||||
mov ecx,[source_start]
|
mov ecx,[source_start]
|
||||||
sub ecx,[memory_start]
|
sub ecx,[memory_start]
|
||||||
mov [ebx-40h+24h],ecx
|
mov [ebx-40h+24h],ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
mov [ebx-40h+28h],eax
|
mov [ebx-40h+28h],eax
|
||||||
mov eax,[number_of_sections]
|
mov eax,[number_of_sections]
|
||||||
shl eax,2
|
shl eax,2
|
||||||
mov [ebx-40h+34h],eax
|
mov [ebx-40h+34h],eax
|
||||||
call prepare_preprocessed_source
|
call prepare_preprocessed_source
|
||||||
mov esi,[labels_list]
|
mov esi,[labels_list]
|
||||||
mov ebp,edi
|
mov ebp,edi
|
||||||
make_lines_dump:
|
make_lines_dump:
|
||||||
cmp esi,[tagged_blocks]
|
cmp esi,[tagged_blocks]
|
||||||
je lines_dump_ok
|
je lines_dump_ok
|
||||||
mov eax,[esi-4]
|
mov eax,[esi-4]
|
||||||
mov ecx,[esi-8]
|
mov ecx,[esi-8]
|
||||||
sub esi,8
|
sub esi,8
|
||||||
sub esi,ecx
|
sub esi,ecx
|
||||||
cmp eax,1
|
cmp eax,1
|
||||||
je process_line_dump
|
je process_line_dump
|
||||||
cmp eax,2
|
cmp eax,2
|
||||||
jne make_lines_dump
|
jne make_lines_dump
|
||||||
add dword [ebx-40h+3Ch],8
|
add dword [ebx-40h+3Ch],8
|
||||||
jmp make_lines_dump
|
jmp make_lines_dump
|
||||||
process_line_dump:
|
process_line_dump:
|
||||||
push ebx
|
push ebx
|
||||||
mov ebx,[esi+8]
|
mov ebx,[esi+8]
|
||||||
mov eax,[esi+4]
|
mov eax,[esi+4]
|
||||||
sub eax,[code_start]
|
sub eax,[code_start]
|
||||||
add eax,[headers_size]
|
add eax,[headers_size]
|
||||||
test byte [ebx+0Ah],1
|
test byte [ebx+0Ah],1
|
||||||
jz store_offset
|
jz store_offset
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
store_offset:
|
store_offset:
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,[esi]
|
mov eax,[esi]
|
||||||
sub eax,[memory_start]
|
sub eax,[memory_start]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,[esi+4]
|
mov eax,[esi+4]
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
xor cl,cl
|
xor cl,cl
|
||||||
sub eax,[ebx]
|
sub eax,[ebx]
|
||||||
sbb edx,[ebx+4]
|
sbb edx,[ebx+4]
|
||||||
sbb cl,[ebx+8]
|
sbb cl,[ebx+8]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,[ebx+10h]
|
mov eax,[ebx+10h]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,[ebx+14h]
|
mov eax,[ebx+14h]
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jz base_symbol_for_line_ok
|
jz base_symbol_for_line_ok
|
||||||
cmp eax,[symbols_stream]
|
cmp eax,[symbols_stream]
|
||||||
mov eax,[eax+4]
|
mov eax,[eax+4]
|
||||||
jae base_symbol_for_line_ok
|
jae base_symbol_for_line_ok
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
base_symbol_for_line_ok:
|
base_symbol_for_line_ok:
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov al,[ebx+9]
|
mov al,[ebx+9]
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
mov al,[esi+10h]
|
mov al,[esi+10h]
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
mov al,[ebx+0Ah]
|
mov al,[ebx+0Ah]
|
||||||
and al,1
|
and al,1
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
mov al,cl
|
mov al,cl
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
pop ebx
|
pop ebx
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,1Ch
|
sub eax,1Ch
|
||||||
sub eax,ebp
|
sub eax,ebp
|
||||||
mov [esi],eax
|
mov [esi],eax
|
||||||
jmp make_lines_dump
|
jmp make_lines_dump
|
||||||
lines_dump_ok:
|
lines_dump_ok:
|
||||||
mov edx,edi
|
mov edx,edi
|
||||||
mov eax,[current_offset]
|
mov eax,[current_offset]
|
||||||
sub eax,[code_start]
|
sub eax,[code_start]
|
||||||
add eax,[headers_size]
|
add eax,[headers_size]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
sub ecx,ebx
|
sub ecx,ebx
|
||||||
sub ecx,[ebx-40h+14h]
|
sub ecx,[ebx-40h+14h]
|
||||||
mov [ebx-40h+2Ch],ecx
|
mov [ebx-40h+2Ch],ecx
|
||||||
add ecx,[ebx-40h+28h]
|
add ecx,[ebx-40h+28h]
|
||||||
mov [ebx-40h+30h],ecx
|
mov [ebx-40h+30h],ecx
|
||||||
add ecx,[ebx-40h+34h]
|
add ecx,[ebx-40h+34h]
|
||||||
mov [ebx-40h+38h],ecx
|
mov [ebx-40h+38h],ecx
|
||||||
find_inexisting_offsets:
|
find_inexisting_offsets:
|
||||||
sub edx,1Ch
|
sub edx,1Ch
|
||||||
cmp edx,ebp
|
cmp edx,ebp
|
||||||
jb write_symbols
|
jb write_symbols
|
||||||
test byte [edx+1Ah],1
|
test byte [edx+1Ah],1
|
||||||
jnz find_inexisting_offsets
|
jnz find_inexisting_offsets
|
||||||
cmp eax,[edx]
|
cmp eax,[edx]
|
||||||
jb correct_inexisting_offset
|
jb correct_inexisting_offset
|
||||||
mov eax,[edx]
|
mov eax,[edx]
|
||||||
jmp find_inexisting_offsets
|
jmp find_inexisting_offsets
|
||||||
correct_inexisting_offset:
|
correct_inexisting_offset:
|
||||||
and dword [edx],0
|
and dword [edx],0
|
||||||
or byte [edx+1Ah],2
|
or byte [edx+1Ah],2
|
||||||
jmp find_inexisting_offsets
|
jmp find_inexisting_offsets
|
||||||
write_symbols:
|
write_symbols:
|
||||||
mov edx,[symbols_file]
|
mov edx,[symbols_file]
|
||||||
call create
|
call create
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov ecx,[edx+14h]
|
mov ecx,[edx+14h]
|
||||||
add ecx,40h
|
add ecx,40h
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[tagged_blocks]
|
mov edx,[tagged_blocks]
|
||||||
mov ecx,[memory_end]
|
mov ecx,[memory_end]
|
||||||
sub ecx,[labels_list]
|
sub ecx,[labels_list]
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[memory_start]
|
mov edx,[memory_start]
|
||||||
mov ecx,[source_start]
|
mov ecx,[source_start]
|
||||||
sub ecx,edx
|
sub ecx,edx
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,ebp
|
mov edx,ebp
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
sub ecx,edx
|
sub ecx,edx
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[free_additional_memory]
|
mov edx,[free_additional_memory]
|
||||||
mov ecx,[number_of_sections]
|
mov ecx,[number_of_sections]
|
||||||
shl ecx,2
|
shl ecx,2
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov esi,[labels_list]
|
mov esi,[labels_list]
|
||||||
mov edi,[memory_start]
|
mov edi,[memory_start]
|
||||||
make_references_dump:
|
make_references_dump:
|
||||||
cmp esi,[tagged_blocks]
|
cmp esi,[tagged_blocks]
|
||||||
je references_dump_ok
|
je references_dump_ok
|
||||||
mov eax,[esi-4]
|
mov eax,[esi-4]
|
||||||
mov ecx,[esi-8]
|
mov ecx,[esi-8]
|
||||||
sub esi,8
|
sub esi,8
|
||||||
sub esi,ecx
|
sub esi,ecx
|
||||||
cmp eax,2
|
cmp eax,2
|
||||||
je dump_reference
|
je dump_reference
|
||||||
cmp eax,1
|
cmp eax,1
|
||||||
jne make_references_dump
|
jne make_references_dump
|
||||||
mov edx,[esi]
|
mov edx,[esi]
|
||||||
jmp make_references_dump
|
jmp make_references_dump
|
||||||
dump_reference:
|
dump_reference:
|
||||||
mov eax,[memory_end]
|
mov eax,[memory_end]
|
||||||
sub eax,[esi]
|
sub eax,[esi]
|
||||||
sub eax,LABEL_STRUCTURE_SIZE
|
sub eax,LABEL_STRUCTURE_SIZE
|
||||||
stosd
|
stosd
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
stosd
|
stosd
|
||||||
cmp edi,[tagged_blocks]
|
cmp edi,[tagged_blocks]
|
||||||
jb make_references_dump
|
jb make_references_dump
|
||||||
jmp out_of_memory
|
jmp out_of_memory
|
||||||
references_dump_ok:
|
references_dump_ok:
|
||||||
mov edx,[memory_start]
|
mov edx,[memory_start]
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
sub ecx,edx
|
sub ecx,edx
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
call close
|
call close
|
||||||
ret
|
ret
|
||||||
setup_dump_header:
|
setup_dump_header:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov ecx,40h shr 2
|
mov ecx,40h shr 2
|
||||||
rep stos dword [edi]
|
rep stos dword [edi]
|
||||||
mov ebx,edi
|
mov ebx,edi
|
||||||
mov dword [ebx-40h],'fas'+1Ah shl 24
|
mov dword [ebx-40h],'fas'+1Ah shl 24
|
||||||
mov dword [ebx-40h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 40h shl 16
|
mov dword [ebx-40h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 40h shl 16
|
||||||
mov dword [ebx-40h+10h],40h
|
mov dword [ebx-40h+10h],40h
|
||||||
ret
|
ret
|
||||||
prepare_preprocessed_source:
|
prepare_preprocessed_source:
|
||||||
mov esi,[memory_start]
|
mov esi,[memory_start]
|
||||||
mov ebp,[source_start]
|
mov ebp,[source_start]
|
||||||
test ebp,ebp
|
test ebp,ebp
|
||||||
jnz prepare_preprocessed_line
|
jnz prepare_preprocessed_line
|
||||||
mov ebp,[current_line]
|
mov ebp,[current_line]
|
||||||
inc ebp
|
inc ebp
|
||||||
prepare_preprocessed_line:
|
prepare_preprocessed_line:
|
||||||
cmp esi,ebp
|
cmp esi,ebp
|
||||||
jae preprocessed_source_ok
|
jae preprocessed_source_ok
|
||||||
mov eax,[memory_start]
|
mov eax,[memory_start]
|
||||||
mov edx,[input_file]
|
mov edx,[input_file]
|
||||||
cmp [esi],edx
|
cmp [esi],edx
|
||||||
jne line_not_from_main_input
|
jne line_not_from_main_input
|
||||||
mov [esi],eax
|
mov [esi],eax
|
||||||
line_not_from_main_input:
|
line_not_from_main_input:
|
||||||
sub [esi],eax
|
sub [esi],eax
|
||||||
test byte [esi+7],1 shl 7
|
test byte [esi+7],1 shl 7
|
||||||
jz prepare_next_preprocessed_line
|
jz prepare_next_preprocessed_line
|
||||||
sub [esi+8],eax
|
sub [esi+8],eax
|
||||||
sub [esi+12],eax
|
sub [esi+12],eax
|
||||||
prepare_next_preprocessed_line:
|
prepare_next_preprocessed_line:
|
||||||
call skip_preprocessed_line
|
call skip_preprocessed_line
|
||||||
jmp prepare_preprocessed_line
|
jmp prepare_preprocessed_line
|
||||||
preprocessed_source_ok:
|
preprocessed_source_ok:
|
||||||
ret
|
ret
|
||||||
skip_preprocessed_line:
|
skip_preprocessed_line:
|
||||||
add esi,16
|
add esi,16
|
||||||
skip_preprocessed_line_content:
|
skip_preprocessed_line_content:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,1Ah
|
cmp al,1Ah
|
||||||
je skip_preprocessed_symbol
|
je skip_preprocessed_symbol
|
||||||
cmp al,3Bh
|
cmp al,3Bh
|
||||||
je skip_preprocessed_symbol
|
je skip_preprocessed_symbol
|
||||||
cmp al,22h
|
cmp al,22h
|
||||||
je skip_preprocessed_string
|
je skip_preprocessed_string
|
||||||
or al,al
|
or al,al
|
||||||
jnz skip_preprocessed_line_content
|
jnz skip_preprocessed_line_content
|
||||||
ret
|
ret
|
||||||
skip_preprocessed_string:
|
skip_preprocessed_string:
|
||||||
lods dword [esi]
|
lods dword [esi]
|
||||||
add esi,eax
|
add esi,eax
|
||||||
jmp skip_preprocessed_line_content
|
jmp skip_preprocessed_line_content
|
||||||
skip_preprocessed_symbol:
|
skip_preprocessed_symbol:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
movzx eax,al
|
movzx eax,al
|
||||||
add esi,eax
|
add esi,eax
|
||||||
jmp skip_preprocessed_line_content
|
jmp skip_preprocessed_line_content
|
||||||
restore_preprocessed_source:
|
restore_preprocessed_source:
|
||||||
mov esi,[memory_start]
|
mov esi,[memory_start]
|
||||||
mov ebp,[source_start]
|
mov ebp,[source_start]
|
||||||
test ebp,ebp
|
test ebp,ebp
|
||||||
jnz restore_preprocessed_line
|
jnz restore_preprocessed_line
|
||||||
mov ebp,[current_line]
|
mov ebp,[current_line]
|
||||||
inc ebp
|
inc ebp
|
||||||
restore_preprocessed_line:
|
restore_preprocessed_line:
|
||||||
cmp esi,ebp
|
cmp esi,ebp
|
||||||
jae preprocessed_source_restored
|
jae preprocessed_source_restored
|
||||||
mov eax,[memory_start]
|
mov eax,[memory_start]
|
||||||
add [esi],eax
|
add [esi],eax
|
||||||
cmp [esi],eax
|
cmp [esi],eax
|
||||||
jne preprocessed_line_source_restored
|
jne preprocessed_line_source_restored
|
||||||
mov edx,[input_file]
|
mov edx,[input_file]
|
||||||
mov [esi],edx
|
mov [esi],edx
|
||||||
preprocessed_line_source_restored:
|
preprocessed_line_source_restored:
|
||||||
test byte [esi+7],1 shl 7
|
test byte [esi+7],1 shl 7
|
||||||
jz restore_next_preprocessed_line
|
jz restore_next_preprocessed_line
|
||||||
add [esi+8],eax
|
add [esi+8],eax
|
||||||
add [esi+12],eax
|
add [esi+12],eax
|
||||||
restore_next_preprocessed_line:
|
restore_next_preprocessed_line:
|
||||||
call skip_preprocessed_line
|
call skip_preprocessed_line
|
||||||
jmp restore_preprocessed_line
|
jmp restore_preprocessed_line
|
||||||
preprocessed_source_restored:
|
preprocessed_source_restored:
|
||||||
ret
|
ret
|
||||||
dump_preprocessed_source:
|
dump_preprocessed_source:
|
||||||
mov edi,[free_additional_memory]
|
mov edi,[free_additional_memory]
|
||||||
call setup_dump_header
|
call setup_dump_header
|
||||||
mov esi,[input_file]
|
mov esi,[input_file]
|
||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
cmp edi,[additional_memory_end]
|
cmp edi,[additional_memory_end]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
dec eax
|
dec eax
|
||||||
mov [ebx-40h+0Ch],eax
|
mov [ebx-40h+0Ch],eax
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
mov [ebx-40h+14h],eax
|
mov [ebx-40h+14h],eax
|
||||||
add eax,40h
|
add eax,40h
|
||||||
mov [ebx-40h+20h],eax
|
mov [ebx-40h+20h],eax
|
||||||
call prepare_preprocessed_source
|
call prepare_preprocessed_source
|
||||||
sub esi,[memory_start]
|
sub esi,[memory_start]
|
||||||
mov [ebx-40h+24h],esi
|
mov [ebx-40h+24h],esi
|
||||||
mov edx,[symbols_file]
|
mov edx,[symbols_file]
|
||||||
call create
|
call create
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[free_additional_memory]
|
mov edx,[free_additional_memory]
|
||||||
mov ecx,[edx+14h]
|
mov ecx,[edx+14h]
|
||||||
add ecx,40h
|
add ecx,40h
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[memory_start]
|
mov edx,[memory_start]
|
||||||
mov ecx,esi
|
mov ecx,esi
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
call close
|
call close
|
||||||
ret
|
ret
|
File diff suppressed because it is too large
Load Diff
@ -33,7 +33,7 @@
|
|||||||
; cannot simply be copied and put under another distribution licence
|
; cannot simply be copied and put under another distribution licence
|
||||||
; (including the GNU Public Licence).
|
; (including the GNU Public Licence).
|
||||||
|
|
||||||
VERSION_STRING equ "1.71.13"
|
VERSION_STRING equ "1.71.16"
|
||||||
|
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 71
|
VERSION_MINOR = 71
|
||||||
|
@ -2,6 +2,128 @@
|
|||||||
Visit http://flatassembler.net/ for more information.
|
Visit http://flatassembler.net/ for more information.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.16 (Oct 30, 2013)
|
||||||
|
|
||||||
|
[-] Fixed some bugs in the ELF executable formatter.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.15 (Oct 26, 2013)
|
||||||
|
|
||||||
|
[-] Fixed some bugs inadvertently introduced in the previous release.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.14 (Oct 25, 2013)
|
||||||
|
|
||||||
|
[+] Added "postpone" directive to preprocessor.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.13 (Sep 09, 2013)
|
||||||
|
|
||||||
|
[-] Fixed a bug that caused the expressions containing external symbols
|
||||||
|
to overflow from time to time.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.12 (Aug 04, 2013)
|
||||||
|
|
||||||
|
[-] Expressions in square brackets were incorrectly treated as valid numerical
|
||||||
|
values when used in some logical expressions.
|
||||||
|
|
||||||
|
[-] A previous fix to "store" directive did not apply to all the cases when it
|
||||||
|
was incorrectly leaving the data marked as uninitialized. The new fix
|
||||||
|
addresses this issue.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.11 (Jul 09, 2013)
|
||||||
|
|
||||||
|
[-] Modifying a value in uninitialized data block with "store" directive will
|
||||||
|
now correctly mark this data as initialized when it is in a different
|
||||||
|
addressing space.
|
||||||
|
|
||||||
|
[-] Missing quote will no longer cause the symbols generator to hang or crash.
|
||||||
|
|
||||||
|
[-] Address range restrictions for addressing modes no longer apply to addresses
|
||||||
|
provided to assembler directives like "label", "virtual" or "load".
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.10 (Apr 03, 2013)
|
||||||
|
|
||||||
|
[-] Fixed a crashing "heap" directive in 64-bit PE format.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.09 (Mar 30, 2013)
|
||||||
|
|
||||||
|
[-] "use16","use32" and "use64" no longer allow to put another instruction in
|
||||||
|
the same line.
|
||||||
|
|
||||||
|
[-] Fixed a bug in parser that caused it to hang while processing some
|
||||||
|
specific ill-structured preprocessed lines.
|
||||||
|
|
||||||
|
[-] Modified memory allocation algorithm on Windows machines with large RAM.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.08 (Mar 08, 2013)
|
||||||
|
|
||||||
|
[-] Fixed a bug that caused "irp" to skip processing a list with one empty
|
||||||
|
element when default value for iterating variable was specified.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.07 (Dec 23, 2012)
|
||||||
|
|
||||||
|
[-] Fixed a bug that was causing "used" operator to give incorrect results
|
||||||
|
in some very specific cases.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.06 (Nov 22, 2012)
|
||||||
|
|
||||||
|
[-] Fixed a few bugs caused by unnecesarily strong restrictions on allowed
|
||||||
|
types of relocatable values in some places (like "label" directive).
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.05 (Oct 15, 2012)
|
||||||
|
|
||||||
|
[-] Fixed a bug which caused "load" and "store" directives to sometimes
|
||||||
|
fail when assembler had preallocated very large amount of memory.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.04 (Oct 10, 2012)
|
||||||
|
|
||||||
|
[-] Fixed another bug in "org" directive, which was causing it to deal
|
||||||
|
incorrectly with negative addresses.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.03 (Sep 27, 2012)
|
||||||
|
|
||||||
|
[-] Fixed a bug in "org" directive introduced by recent changes, which
|
||||||
|
was manifesting with bases larger than 31-bit.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.02 (Sep 26, 2012)
|
||||||
|
|
||||||
|
[-] Expression calculator now allows to calculate the difference of
|
||||||
|
relocatable addresses in a reverse order (first substracting/negating
|
||||||
|
and then adding the other one).
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.01 (Sep 23, 2012)
|
||||||
|
|
||||||
|
[+] Added support for ADX, RDSEED and SMAP instruction sets.
|
||||||
|
|
||||||
|
[-] Fixed the bugs related to creating a new addressing space inside the
|
||||||
|
virtual block with "org" directive.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.71.00 (Sep 21, 2012)
|
||||||
|
|
||||||
|
[+] Added ability to define a special kind of label identifying the
|
||||||
|
addressing space. This label can the be used with "load" or "store"
|
||||||
|
directives to allow operations on bytes in any addressing space,
|
||||||
|
not just the current one. This special label is defined by following
|
||||||
|
its name with double colon, and can only be used with "load" and
|
||||||
|
"store" directive, where address can now be specified in two parts,
|
||||||
|
first the adressing space label, then the colon and then the
|
||||||
|
address inside that addressing space.
|
||||||
|
|
||||||
|
|
||||||
version 1.70.03 (Jun 29, 2012)
|
version 1.70.03 (Jun 29, 2012)
|
||||||
|
|
||||||
[-] Allowed to freely upgrade or downgrade the relocatable addresses in
|
[-] Allowed to freely upgrade or downgrade the relocatable addresses in
|
||||||
|
Loading…
Reference in New Issue
Block a user