00fce03e89
git-svn-id: svn://kolibrios.org@7839 a494cfbc-eb01-0410-851d-a64ba20cac60
402 lines
14 KiB
Plaintext
402 lines
14 KiB
Plaintext
|
|
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)
|
|
|
|
[-] Allowed to freely upgrade or downgrade the relocatable addresses in
|
|
object format between the 32-bit or 64-bit size.
|
|
|
|
|
|
version 1.70.02 (May 22, 2012)
|
|
|
|
[-] Corrected the optimization of segment prefixes when the extended syntax
|
|
of some string instructions ("cmps", "lods", "movs" and "outs") is
|
|
used in long mode. Now it is consistent with optimizations done with
|
|
all the other instructions.
|
|
|
|
|
|
version 1.70.01 (Apr 30, 2012)
|
|
|
|
[-] Corrected a recently introduced bug that caused some illegal
|
|
address expressions to cause an error prematurely during the
|
|
parsing stage.
|
|
|
|
|
|
version 1.70 (Apr 17, 2012)
|
|
|
|
[+] Added support for AVX, AVX2, AES, CLMUL, FMA, RDRAND, FSGSBASE, F16C,
|
|
FMA4, XOP, MOVBE, BMI, TBM, INVPCID, HLE and RTM instruction sets.
|
|
|
|
[+] Added half-precision floating point values support.
|
|
|
|
[+] Extended the syntax of "rept" directive to allow numerical expressions
|
|
to be calculated by preprocessor in its arguments.
|
|
|
|
[+] Added "large" and "NX" settings for PE format.
|
|
|
|
[+] Allowed PE fixups to be resolved anywhere in the generated executable.
|
|
|
|
[+] Allowed to specify branding value (use 3 for Linux) after the
|
|
"format ELF executable" setting.
|
|
|
|
[+] Added "intepreter", "dynamic" and "note" keywords for creation of
|
|
special segments in ELF executables.
|
|
|
|
[-] Fixed long mode opcode generator to allow absolute addresses to be
|
|
generated with "qword" keyword inside square brackets.
|
|
|
|
[-] Disallowed negative immediates with "int", "enter", "ret" instructions.
|
|
|
|
[+] Allowed symbolic information dump file to be created even in case of error.
|
|
In such case it contains only the preprocessed source that can be extracted
|
|
with PREPSRC tool. If error occured during preprocessing, only the source up
|
|
to the point of error is provided.
|
|
|
|
[+] Added symbol references table to symbolic dump file.
|
|
|
|
[-] Corrected the "defined" and "used" flags in the symbols dump to reflect the
|
|
state from the final assembly pass.
|
|
|
|
[+] Added "assert" directive.
|
|
|
|
[-] Formatter symbols like "PE" or "readable" are now recognized only in the
|
|
context of formatter directives, and thus are no longer disallowed as
|
|
labels.
|
|
|
|
[+] Macroinstruction argument now can have default value, defined with "="
|
|
symbol followed by value after the argument name in definition.
|
|
|
|
[+] Added "relativeto" operator, which can be used in logical expressions
|
|
to test whether two values differ only by a constant and not relocatable
|
|
amount.
|
|
|
|
[-] Revised the expression calculator, it now is able to correctly perform
|
|
calculations in signed and unsigned ranges in full 64-bit. This fixes
|
|
a number of issues - the overflow will now be correctly detected for
|
|
64-bit values in cases, where previous versions could not distinguish
|
|
whether it was an overflow or not. The effect of these corrections is
|
|
that "dq" directive will now behave consistently with behavior of the
|
|
data directives for smaller sizes, and the same applies to all the
|
|
places where "qword" size for value is used.
|
|
|
|
|
|
version 1.68 (Jun 13, 2009)
|
|
|
|
[+] Added SSSE3 (Supplemental SSE3), SSE4.1, SSE4.2 and SSE4a instructions.
|
|
|
|
[+] Added the AMD SVM and Intel SMX instructions.
|
|
|
|
[+] Added "rdmsrq", "wrmsrq", "sysexitq" and "sysretq" mnemonics for the
|
|
64-bit variants of respective instructions.
|
|
|
|
[+] Added "fstenvw", "fstenvd", "fsavew", "fsaved", "frstorw" and "frstord"
|
|
mnemonics to allow choosing between 16-bit and 32-bit variants of
|
|
structures used by the "fstenv", "fsave" and "frstor" instructions.
|
|
|
|
[+] Added "plt" operator for the ELF output format.
|
|
|
|
[+] Allowed "rva" operator to be used in MS COFF object format, and also
|
|
added "static" keyword for the "public" directive.
|
|
|
|
[+] Added Intel-style aliases for the additional long mode 8-bit registers.
|
|
|
|
[-] 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 and PE executable. This makes some specific
|
|
instructions compilable, but it also forces linker to put such
|
|
generated code into the low 2 gigabytes of addressing space.
|
|
|
|
[+] Added "EFI", "EFIboot" and "EFIruntime" subsystem keywords for PE format.
|
|
|
|
[-] 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.
|
|
|
|
[+] 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.
|
|
|
|
[-] Definition of macro with the same name as one of the preprocessor's directives
|
|
is no longer allowed.
|
|
|
|
[+] Allowed single quote character to be put inside the number value,
|
|
to help improve long numbers readability.
|
|
|
|
[+] Added optional symbolic information output, and a set of tools that extract
|
|
various kinds of information from it.
|
|
|
|
[+] Added "err" directive that allows to signalize error from the source.
|
|
|
|
|
|
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.
|