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.
[+] Allowed PE fixups to be resolved anywhere in the generated executable.
version 1.69.26 (Nov 26, 2010)
[-] "swapgs" no longer allowed outside the 64-bit mode.
[-] Corrected a bug that caused crash in symbols dump generator when it
was running out of memory.
version 1.69.25 (Oct 11, 2010)
[-] Macroinstructions no longer breed the lines that are empty in their
definitions.
[-] "vmovsd" with three register operands is now optimized better.
version 1.69.24 (Sep 15, 2010)
[+] Added half-precision floating point values support.
version 1.69.23 (Sep 12, 2010)
[+] Added "large" keyword to 32-bit PE settings.
[-] Few more specific addressing-related size optimizations were improved.
version 1.69.22 (Sep 09, 2010)
[-] Formatter symbols like "PE" or "readable" are now recognized only in the
context of formatter directives, and thus are no longer disallowed as
labels.
version 1.69.21 (Sep 08, 2010)
[-] Corrected encoding of "pextrq" instruction with memory operand.
[-] Improved some very specific instruction size optimizations.
version 1.69.20 (Sep 06, 2010)
[+] Added missing "vstmxcsr", "xsave", "xrstor" instructions.
version 1.69.19 (Sep 04, 2010)
[-] Corrected the calculation of "shr" and "xor" on negative values when the size
of value is explicitly stated.
[-] Allowed "dup" to be used with zero count. Also other small corrections were
made in handling various counts specified to assembler.
The flat assembler is a fast and efficient self-assembling 80x86 assembler
for DOS, Windows and Linux operating systems.
Currently it supports all 8086-80486/Pentium instructions with MMX, SSE,
SSE2, SSE3 and 3DNow! extensions and x86-64 (both AMD64 and EM64T)
instructions, can produce output in binary, MZ, PE, COFF or ELF format.
It includes the powerful but easy to use macroinstruction support and
does multiple passes to optimize the instruction codes for size.
The flat assembler is self-compilable and the full source code is included.