forked from KolibriOS/kolibrios
fasm 1.67.35
git-svn-id: svn://kolibrios.org@1053 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
31067bd91e
commit
77266e66b4
419
programs/develop/fasm/trunk/WHATSNEW.TXT
Normal file
419
programs/develop/fasm/trunk/WHATSNEW.TXT
Normal file
@ -0,0 +1,419 @@
|
||||
|
||||
Visit http://flatassembler.net/ for more information.
|
||||
|
||||
|
||||
version 1.67.35 (Mar 09, 2009)
|
||||
|
||||
[-] Some internal code size reductions.
|
||||
|
||||
[-] Discontinued "-d" switch implementation.
|
||||
|
||||
|
||||
version 1.67.34 (Feb 22, 2009)
|
||||
|
||||
[-] Fixed small bug with DT directive far pointer syntax.
|
||||
|
||||
|
||||
version 1.67.33 (Feb 20, 2009)
|
||||
|
||||
[+] Added ERR directive that allows to signalize error from the source.
|
||||
|
||||
|
||||
version 1.67.32 (Feb 13, 2009)
|
||||
|
||||
[+] Allowed single quote character to be put inside the number value,
|
||||
to help improve long numbers readability.
|
||||
|
||||
|
||||
version 1.67.31 (Feb 11, 2009)
|
||||
|
||||
[-] Fixed floating point converter to no longer generate NaN in some cases,
|
||||
and corrected denormal numbers generation.
|
||||
|
||||
|
||||
version 1.67.30 (Feb 08, 2009)
|
||||
|
||||
[+] Added missing Intel SSE4 instructions.
|
||||
|
||||
[+] Added SSE4a (EXTRQ/INSERTQ/MOVNTSD/MOVNTSS) instructions.
|
||||
|
||||
[+] Added FSTENVW/FSTENVD/FSAVEW/FSAVED mnemonics.
|
||||
|
||||
|
||||
version 1.67.29 (Nov 15, 2008)
|
||||
|
||||
[+] Added optional symbolic information output, and a set of tools that extract
|
||||
various kinds of information from it.
|
||||
|
||||
[+] Allowed RVA operator to be used in COFF object format.
|
||||
|
||||
[-] Corrected the FIX directive to allow names of preprocessor's directives to be
|
||||
used as prioritized symbolic constant name.
|
||||
|
||||
|
||||
version 1.67.28 (Nov 06, 2008)
|
||||
|
||||
[+] Added EFI/EFIBOOT/EFIRUNTIME subsystem keywords for PE format (experimental
|
||||
feature, still needs to be tested).
|
||||
|
||||
[-] Fixed a bug in preprocessor which caused some problems with DISPLAY directive
|
||||
output in some cases.
|
||||
|
||||
[-] Fixed a bug that allowed to define a symbol named "eip" or "rip".
|
||||
|
||||
[-] Fixed a problem with assembling MOVQ RAX,XMM0 instruction.
|
||||
|
||||
|
||||
version 1.67.27 (Jul 12, 2008)
|
||||
|
||||
[-] Fixed a bug which caused instructions from JCXZ/LOOP family to be incorrectly
|
||||
assembled when requiring 67h prefix and provided with "$" operand.
|
||||
|
||||
[-] Definition of macro with the same name as one of the preprocessor's directives
|
||||
is no longer allowed.
|
||||
|
||||
[-] Fixed REPT directive to check out validity of its parameters even when the
|
||||
count is zero.
|
||||
|
||||
[-] Fixed VMREAD/VMWRITE syntax in the USE64 mode.
|
||||
|
||||
[-] Corrected MZ header generation and handling for the case when the last page of
|
||||
executable contains the round 512 bytes.
|
||||
|
||||
|
||||
version 1.67.26 (Jan 27, 2008)
|
||||
|
||||
[+] Added partial SSE4 support (a couple of instructions left to be implemented
|
||||
in the next releases)
|
||||
|
||||
[+] Added GETSEC instruction for the SMX functions calling.
|
||||
|
||||
[-] Some fixes and rearrangements in the DOS version.
|
||||
|
||||
|
||||
version 1.67.25 (Dec 30, 2007)
|
||||
|
||||
[-] Fixed a couple of bugs related to undefined symbol error signaling.
|
||||
|
||||
|
||||
version 1.67.24 (Dec 03, 2007)
|
||||
|
||||
[+] Added "-d" option to allow predefining symbolic constants from command line.
|
||||
|
||||
[-] Changed some of the error messages to be more informative.
|
||||
|
||||
|
||||
version 1.67.23 (Sep 08, 2007)
|
||||
|
||||
[+] Added "static" keyword for the "public" directive in COFF format.
|
||||
|
||||
[-] Redirected error information into stderr.
|
||||
|
||||
|
||||
version 1.67.22 (Aug 05, 2007)
|
||||
|
||||
[+] Allowed to check "@b" and "@f" symbols with "defined" operator.
|
||||
|
||||
[+] Allowed "as" operator to specify the output file extension when
|
||||
placed at the end of the "format" directive line.
|
||||
|
||||
[-] Fixed a bug with stack size declaration in PE64 format that
|
||||
caused assembler to crash.
|
||||
|
||||
[-] Corrected the VMREAD and VMWRITE instructions to allow registers
|
||||
in place of memory operands.
|
||||
|
||||
[-] Corrected a mistake that made PLT operator not work correctly with
|
||||
the CALL instruction.
|
||||
|
||||
|
||||
version 1.67.21 (Feb 17, 2007)
|
||||
|
||||
[+] Allowed 32-bit relocations in PE64 output format.
|
||||
|
||||
[-] Fixed a bug that caused "push cr0" error to go unnoticed by assembler.
|
||||
|
||||
|
||||
version 1.67.20 (Feb 12, 2007)
|
||||
|
||||
[-] Corrected the range checking of signed address displacements in 64-bit mode.
|
||||
|
||||
|
||||
version 1.67.19 (Feb 10, 2007)
|
||||
|
||||
[-] Disallowed labels starting with $ character.
|
||||
|
||||
[-] Fixed some problems with handling 32-bit relocations in 64-bit formats.
|
||||
|
||||
|
||||
version 1.67.18 (Dec 27, 2006)
|
||||
|
||||
[-] Fixed a small mistake in the recent corrections of logical expression parser.
|
||||
|
||||
|
||||
version 1.67.17 (Dec 20, 2006)
|
||||
|
||||
[-] Corrected the precedence of operators of macroinstruction line maker.
|
||||
The symbol escaping now has always the higher priority than symbol conversion,
|
||||
and both have higher precedence than concatenation.
|
||||
|
||||
[-] Fixed problems with logical expression parser to handle correctly comparing
|
||||
values containing round brackets with the EQ or EQTYPE operator.
|
||||
The only limitation now is that when you use round brackets to enclose some
|
||||
logical expressions, they must be paired everywhere inside those expressions.
|
||||
|
||||
|
||||
version 1.67.16 (Dec 17, 2006)
|
||||
|
||||
[-] Fixed a really old bug in register expression calculator.
|
||||
|
||||
|
||||
version 1.67.15 (Nov 20, 2006)
|
||||
|
||||
[-] Some final (?) fixes and cleanup in the relative-offsets calculations.
|
||||
|
||||
|
||||
version 1.67.14 (Oct 28, 2006)
|
||||
|
||||
[-] Another small bug fixes.
|
||||
|
||||
|
||||
version 1.67.13 (Oct 26, 2006)
|
||||
|
||||
[-] Fixed a bug with handling of invalid expressions by "defined" operator.
|
||||
|
||||
[-] Fixed a newly-introduced bug with relocations in automatically generated RIP-relative
|
||||
addressings.
|
||||
|
||||
|
||||
version 1.67.12 (Oct 1, 2006)
|
||||
|
||||
[+] Added EIP-relative addressing, and fixed some bugs with RIP-related one aswell.
|
||||
|
||||
|
||||
version 1.67.11 (Sep 26, 2006)
|
||||
|
||||
[+] Added PLT operator for the ELF output format.
|
||||
|
||||
[-] Rearranged and fixed some of the relocation handling routines.
|
||||
|
||||
|
||||
version 1.67.10 (Sep 23, 2006)
|
||||
|
||||
[+] Added SSSE3 (Supplemental SSE3) instructions.
|
||||
|
||||
|
||||
version 1.67.9 (Sep 21, 2006)
|
||||
|
||||
[+] Added some Win64 headers and examples in the Windows package.
|
||||
|
||||
[-] Fixed another operand size checking bug with MOVQ instruction.
|
||||
|
||||
|
||||
version 1.67.8 (Sep 17, 2006)
|
||||
|
||||
[-] Fixed a bug in address processing that caused disallowed combinations like
|
||||
[qword eax] to be accepted.
|
||||
|
||||
|
||||
version 1.67.7 (Jul 31, 2006)
|
||||
|
||||
[-] Fixed a bug that caused over-repeated processing of macro operators when
|
||||
many embedded macros were placed in one line
|
||||
|
||||
[+] Added SYSRETQ mnemonic.
|
||||
|
||||
|
||||
version 1.67.6 (Jul 21, 2006)
|
||||
|
||||
[+] Added (not yet documented) RDMSRQ/WRMSRQ/SYSEXITQ mnemonics for the 64-bit
|
||||
variants of respective instructions.
|
||||
|
||||
[+] Added information about memory allocation to the command line interfaces.
|
||||
This should make it easier to decide when to use the -m switch.
|
||||
|
||||
|
||||
version 1.67.5 (Jul 7, 2006)
|
||||
|
||||
[-] Fixed encoding of MOV (E)AX,[WORD ADDR] instruction in 32-bit mode.
|
||||
|
||||
|
||||
version 1.67.4 (Jul 5, 2006)
|
||||
|
||||
[+] Added R8L-R15L (Intel-style) aliases for R8B-R15B registers.
|
||||
|
||||
[-] Further optimizations in the parser.
|
||||
|
||||
|
||||
version 1.67.3 (Jul 2, 2006)
|
||||
|
||||
[-] Improved an instruction searching algorithm a bit.
|
||||
|
||||
|
||||
version 1.67.2 (Jul 1, 2006)
|
||||
|
||||
[-] Fixed a recently introduced bug with ELF relocations in case of 32-bit
|
||||
object.
|
||||
|
||||
|
||||
version 1.67.1 (Jun 30, 2006)
|
||||
|
||||
[+] Added the support for the new AMD SVM technology instructions.
|
||||
|
||||
|
||||
version 1.67.0 (Jun 28, 2006)
|
||||
|
||||
[-] The PE formatter now automatically detects whether relocatable labels
|
||||
should be used, depending on whether the fixups directory is placed
|
||||
somewhere into executable by programer, or not. This makes possible the
|
||||
more flexible use of the addressing symbols in case of PE executable fixed
|
||||
at some position.
|
||||
|
||||
[-] Added support for outputting the 32-bit address relocations in case of
|
||||
64-bit object formats. This makes some specific instructions compilable,
|
||||
but it also forces linker to put such generated code into the low 2
|
||||
gigabytes of addressing space.
|
||||
|
||||
|
||||
version 1.66 (May 7, 2006)
|
||||
|
||||
[+] Added DEFINE directive to preprocessor, which defines symbolic constants,
|
||||
the same kind as EQU directive, however there's an important difference
|
||||
that DEFINE doesn't process symbolic constants in the value before
|
||||
assigning it. For example:
|
||||
|
||||
a equ 1
|
||||
a equ a+a
|
||||
|
||||
define b 1
|
||||
define b b+b
|
||||
|
||||
defines the "a" constant with value "1+1", but the "b" is defined with
|
||||
value "b+b". This directive may be useful in some advanced
|
||||
macroinstructions.
|
||||
|
||||
[-] Moved part of the conditional expression processing into parser,
|
||||
for slightly better performance and lesser memory usage by assembler.
|
||||
The logical values defined with "eq", "eqtype" and "in" operators are now
|
||||
evaluated by the parser and if they are enough to determine the condition,
|
||||
the whole block is processed accordingly. Thus this block:
|
||||
|
||||
if eax eq EAX | 0/0
|
||||
nop
|
||||
end if
|
||||
|
||||
is parsed into just NOP instruction, since parser is able to determine
|
||||
that the condition is true, even though one of the logical values makes no
|
||||
sense - but since this is none of the "eq", "eqtype" and "in" expressions,
|
||||
the parser doesn't investigate.
|
||||
|
||||
[-] Also the assembler is now calculating only as many logical values as it
|
||||
needs to determine the condition. So this block:
|
||||
|
||||
if defined alpha & alpha
|
||||
|
||||
end if
|
||||
|
||||
will not cause error when "alpha" is not defined, as it would with previous
|
||||
versions. This is because after checking that "defined alpha" is false
|
||||
condition it doesn't need to know the second logical value to determine the
|
||||
value of conjunction.
|
||||
|
||||
[+] Added "short" keyword for specifying jump type, the "jmp byte" form is now
|
||||
obsolete and no longer correct - use "jmp short" instead.
|
||||
|
||||
[-] The size operator applied to jump no longer applies to the size of relative
|
||||
displacement - now it applies to the size of target address.
|
||||
|
||||
[-] The RET instruction with 0 parameter is now assembled into short form,
|
||||
unless you force using the 16-bit immediate with "word" operator.
|
||||
|
||||
[+] Added missing extended registers for the 32-bit addressing in long mode.
|
||||
|
||||
[+] Added "linkremove" and "linkinfo" section flags for MS COFF output.
|
||||
|
||||
[+] Added support for GOT offsets in ELF object formatter, which can be useful
|
||||
when making position-independent code for shared libraries. For any label
|
||||
you can get its offset relative to GOT by preceding it with "rva" operator
|
||||
(the same keyword as for PE format is used, to avoid adding a new one,
|
||||
while this one has very similar meaning).
|
||||
|
||||
[-] Changed ELF executable to use "segment" directive in place of "section",
|
||||
to make the distinction between the run-time segments and linkable
|
||||
sections. If you had a "section" directive in your ELF executables and they
|
||||
no longer assemble, replace it with "segment".
|
||||
|
||||
[-] The PE formatter now always creates the fixups directory when told to -
|
||||
even when there are no fixups to be put there (in such case it creates the
|
||||
directory with one empty block).
|
||||
|
||||
[-] Some of the internal structures have been extended to provide the
|
||||
possibility of making extensive symbol dumps.
|
||||
|
||||
[-] Corrected FIX directive to keep the value intact before assigning it to the
|
||||
prioritized constant.
|
||||
|
||||
[+] The ` operator now works with any kind of symbol; when used with quoted
|
||||
string it simply does nothing. Thus the sequence of ` operators applied to
|
||||
one symbol work the same as if there was just one. In similar manner, the
|
||||
sequence of # operators now works as if it was a single one - using such a
|
||||
sequence instead of escaping, which was kept for some backward
|
||||
compatibility, is now deprecated.
|
||||
|
||||
[-] Corrected order of identifying assembler directives ("if db eq db" was
|
||||
incorrectly interpreted as data definition).
|
||||
|
||||
[-] Many other small bugs fixed.
|
||||
|
||||
|
||||
version 1.64 (Aug 8, 2005)
|
||||
|
||||
[+] Output of PE executables for Win64 architecture (with "format PE64"
|
||||
setting).
|
||||
|
||||
[+] Added "while" and "break" directives.
|
||||
|
||||
[+] Added "irp" and "irps" directives.
|
||||
|
||||
[+] The macro arguments can be marked as required with the "*" character.
|
||||
|
||||
[-] Fixed checking for overflow when multiplying 64-bit values - the result
|
||||
must always fit in the range of signed 64 integer now.
|
||||
|
||||
[-] Segment prefixes were generated incorrectly in 16-bit mode when BP was used
|
||||
as a second addressing register - fixed.
|
||||
|
||||
[-] The "local" directive was not creating unique labels in some cases - fixed.
|
||||
|
||||
[-] The "not encodable with long immediate" error in 64-bit mode was sometimes
|
||||
wrongly signaled - fixed.
|
||||
|
||||
[-] Other minor fixes and corrections.
|
||||
|
||||
|
||||
version 1.62 (Jun 14, 2005)
|
||||
|
||||
[+] Escaping of symbols inside macroinstructions with backslash.
|
||||
|
||||
[+] Ability of outputting the COFF object files for Win64 architecture
|
||||
(with "format MS64 COFF" setting).
|
||||
|
||||
[+] New preprocessor directives: "restruc", "rept" and "match"
|
||||
|
||||
[+] VMX instructions support (not documented).
|
||||
|
||||
[+] Extended data directives to allow use of the "dup" operator.
|
||||
|
||||
[+] Extended "struc" features to allow custom definitions of main structure's
|
||||
label.
|
||||
|
||||
[-] When building resources from the the .RES file that contained more
|
||||
than one resource of the same string name, the separate resource
|
||||
directories were created with the same names - fixed.
|
||||
|
||||
[-] Several bugs in the ELF64 object output has been fixed.
|
||||
|
||||
[-] Corrected behavior of "fix" directive to more straightforward.
|
||||
|
||||
[-] Fixed bug in "include" directive, which caused files included from within
|
||||
macros to be processed the wrong way.
|
@ -4110,7 +4110,7 @@ dump_symbols:
|
||||
xor eax,eax
|
||||
base_symbol_for_label_ok:
|
||||
mov [edx+20],eax
|
||||
add edx,32
|
||||
add edx,LABEL_STRUCTURE_SIZE
|
||||
jmp prepare_labels_dump
|
||||
labels_dump_ok:
|
||||
mov eax,edi
|
||||
|
@ -30,7 +30,7 @@ preprocessor:
|
||||
mov esi,include_variable
|
||||
call get_environment_variable
|
||||
xor al,al
|
||||
stosb
|
||||
stos byte [edi]
|
||||
mov [memory_start],edi
|
||||
mov eax,[additional_memory]
|
||||
mov [free_additional_memory],eax
|
||||
@ -40,149 +40,6 @@ preprocessor:
|
||||
mov [display_buffer],eax
|
||||
mov [hash_tree],eax
|
||||
mov [macro_status],al
|
||||
|
||||
mov esi,predefinitions
|
||||
process_predefinitions:
|
||||
movzx ecx,byte [esi]
|
||||
test ecx,ecx
|
||||
jz predefinitions_ok
|
||||
inc esi
|
||||
lea eax,[esi+ecx]
|
||||
push eax
|
||||
mov ch,10b
|
||||
call add_preprocessor_symbol
|
||||
pop esi
|
||||
mov edi,[memory_start]
|
||||
mov [edx+8],edi
|
||||
convert_predefinition:
|
||||
cmp edi,[memory_end]
|
||||
jae out_of_memory
|
||||
lods byte [esi]
|
||||
or al,al
|
||||
jz predefinition_converted
|
||||
cmp al,20h
|
||||
je convert_predefinition
|
||||
mov ah,al
|
||||
mov ebx,characters
|
||||
xlat byte [ebx]
|
||||
or al,al
|
||||
jz predefinition_separator
|
||||
cmp ah,27h
|
||||
je predefinition_string
|
||||
cmp ah,22h
|
||||
je predefinition_string
|
||||
mov byte [edi],1Ah
|
||||
scas word [edi]
|
||||
xchg al,ah
|
||||
stos byte [edi]
|
||||
mov ebx,characters
|
||||
xor ecx,ecx
|
||||
predefinition_symbol:
|
||||
lods byte [esi]
|
||||
stos byte [edi]
|
||||
xlat byte [ebx]
|
||||
or al,al
|
||||
loopnzd predefinition_symbol
|
||||
neg ecx
|
||||
cmp ecx,255
|
||||
ja invalid_definition
|
||||
mov ebx,edi
|
||||
sub ebx,ecx
|
||||
mov byte [ebx-2],cl
|
||||
found_predefinition_separator:
|
||||
dec edi
|
||||
mov ah,[esi-1]
|
||||
predefinition_separator:
|
||||
xchg al,ah
|
||||
or al,al
|
||||
jz predefinition_converted
|
||||
cmp al,20h
|
||||
je convert_line_data
|
||||
cmp al,3Bh
|
||||
je invalid_definition
|
||||
cmp al,5Ch
|
||||
je predefinition_backslash
|
||||
stos byte [edi]
|
||||
jmp convert_predefinition
|
||||
predefinition_string:
|
||||
mov al,22h
|
||||
stos byte [edi]
|
||||
scas dword [edi]
|
||||
mov ebx,edi
|
||||
copy_predefinition_string:
|
||||
lods byte [esi]
|
||||
stos byte [edi]
|
||||
or al,al
|
||||
jz invalid_definition
|
||||
cmp al,ah
|
||||
jne copy_predefinition_string
|
||||
lods byte [esi]
|
||||
cmp al,ah
|
||||
je copy_predefinition_string
|
||||
dec esi
|
||||
dec edi
|
||||
mov eax,edi
|
||||
sub eax,ebx
|
||||
mov [ebx-4],eax
|
||||
jmp convert_predefinition
|
||||
predefinition_backslash:
|
||||
mov byte [edi],0
|
||||
lods byte [esi]
|
||||
or al,al
|
||||
jz invalid_definition
|
||||
cmp al,20h
|
||||
je invalid_definition
|
||||
cmp al,3Bh
|
||||
je invalid_definition
|
||||
mov al,1Ah
|
||||
stos byte [edi]
|
||||
mov ecx,edi
|
||||
mov ax,5C01h
|
||||
stos word [edi]
|
||||
dec esi
|
||||
group_predefinition_backslashes:
|
||||
lods byte [esi]
|
||||
cmp al,5Ch
|
||||
jne predefinition_backslashed_symbol
|
||||
stos byte [edi]
|
||||
inc byte [ecx]
|
||||
jmp group_predefinition_backslashes
|
||||
predefinition_backslashed_symbol:
|
||||
cmp al,20h
|
||||
je invalid_definition
|
||||
cmp al,22h
|
||||
je invalid_definition
|
||||
cmp al,27h
|
||||
je invalid_definition
|
||||
cmp al,3Bh
|
||||
je invalid_definition
|
||||
mov ah,al
|
||||
mov ebx,characters
|
||||
xlat byte [ebx]
|
||||
or al,al
|
||||
jz predefinition_backslashed_symbol_character
|
||||
mov al,ah
|
||||
convert_predefinition_backslashed_symbol:
|
||||
stos byte [edi]
|
||||
xlat byte [ebx]
|
||||
or al,al
|
||||
jz found_predefinition_separator
|
||||
inc byte [ecx]
|
||||
jz invalid_definition
|
||||
lods byte [esi]
|
||||
jmp convert_predefinition_backslashed_symbol
|
||||
predefinition_backslashed_symbol_character:
|
||||
mov al,ah
|
||||
stos byte [edi]
|
||||
inc byte [ecx]
|
||||
jmp convert_predefinition
|
||||
predefinition_converted:
|
||||
mov [memory_start],edi
|
||||
sub edi,[edx+8]
|
||||
mov [edx+12],edi
|
||||
jmp process_predefinitions
|
||||
predefinitions_ok:
|
||||
|
||||
mov esi,[input_file]
|
||||
mov edx,esi
|
||||
call open
|
||||
@ -1672,7 +1529,6 @@ use_instant_macro:
|
||||
cmp dword [edi+4],0
|
||||
jne value_out_of_range
|
||||
mov eax,[edi]
|
||||
|
||||
cmp eax,80000000h
|
||||
jae value_out_of_range
|
||||
push [free_additional_memory]
|
||||
|
@ -33,7 +33,7 @@
|
||||
; cannot simply be copied and put under another distribution licence
|
||||
; (including the GNU Public Licence).
|
||||
|
||||
VERSION_STRING equ "1.67.34"
|
||||
VERSION_STRING equ "1.67.35"
|
||||
|
||||
VERSION_MAJOR = 1
|
||||
VERSION_MINOR = 67
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user