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
@ -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
|
||||||
|
@ -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]
|
||||||
|
@ -21,6 +21,8 @@ preprocessor_directives:
|
|||||||
dw define_macro-directive_handler
|
dw define_macro-directive_handler
|
||||||
db 5,'match'
|
db 5,'match'
|
||||||
dw match_directive-directive_handler
|
dw match_directive-directive_handler
|
||||||
|
db 8,'postpone'
|
||||||
|
dw postpone_directive-directive_handler
|
||||||
db 5,'purge'
|
db 5,'purge'
|
||||||
dw purge_macro-directive_handler
|
dw purge_macro-directive_handler
|
||||||
db 4,'rept'
|
db 4,'rept'
|
||||||
|
@ -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