2009-03-10 11:33:02 +01:00
|
|
|
|
|
|
|
Visit http://flatassembler.net/ for more information.
|
|
|
|
|
|
|
|
|
2010-01-05 19:46:12 +01:00
|
|
|
version 1.69.11 (Dec 19, 2009)
|
|
|
|
|
|
|
|
[+] Allowed syntax of "pmovmskb" with 64-bit register destination in long mode.
|
|
|
|
|
|
|
|
[-] The code generated for "call eax" instruction was missing prefix in 16-bit
|
|
|
|
mode - fixed.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.10 (Oct 28, 2009)
|
|
|
|
|
|
|
|
[-] Fixed long mode opcode generator to allow absolute addresses to be
|
|
|
|
generated with "qword" keyword inside square brackets.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.09 (Oct 20, 2009)
|
|
|
|
|
|
|
|
[-] Fixed a crash during the symbolic information generation when a "static"
|
|
|
|
symbol was encountered.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.08 (Oct 04, 2009)
|
|
|
|
|
|
|
|
[-] Minor bugfixes.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.07 (Oct 03, 2009)
|
|
|
|
|
|
|
|
[-] Corrected encoding of "extrq" intruction for some cases.
|
|
|
|
|
|
|
|
|
2009-10-01 02:41:45 +02:00
|
|
|
version 1.69.06 (Sep 29, 2009)
|
|
|
|
|
|
|
|
[-] The prefix 67h for "jecxz" and "loopd" instructions in 64-bit mode wasn't
|
|
|
|
correctly generated - fixed.
|
|
|
|
|
|
|
|
[-] It's no longer possible to define two special segments of the same type
|
|
|
|
in ELF executables.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.05 (Sep 14, 2009)
|
|
|
|
|
|
|
|
[+] 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.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.04 (Sep 7, 2009)
|
|
|
|
|
|
|
|
[-] Fixed a bug with REX prefix generation with address of type "rX+rsp".
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.03 (Aug 03, 2009)
|
|
|
|
|
|
|
|
[+] Allowed simplified syntax for "monitor", "mwait", "blendvps", "blendvpd" and
|
|
|
|
"pblendvb" instructions.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.02 (Jul 04, 2009)
|
|
|
|
|
|
|
|
[-] Minor bugfixes.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.01 (Jul 01, 2009)
|
|
|
|
|
|
|
|
[+] Added "movbe" instruction.
|
|
|
|
|
|
|
|
[-] "extractps" no longer generates the double 66h prefix.
|
|
|
|
|
|
|
|
|
|
|
|
version 1.69.00 (Jun 23, 2009)
|
|
|
|
|
|
|
|
[+] Extended the syntax of "rept" directive to allow numerical expressions
|
|
|
|
to be calculated by preprocessor in its arguments.
|
|
|
|
|
|
|
|
[-] The code of assembler (but not data) has been made position-independent, and
|
|
|
|
this allowed to use code segmentation in DOS unREAL mode, so the code is
|
|
|
|
no longer limited to 64 kilobytes.
|
|
|
|
|
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
version 1.68 (Jun 13, 2009)
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added SSSE3 (Supplemental SSE3), SSE4.1, SSE4.2 and SSE4a instructions.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added the AMD SVM and Intel SMX instructions.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added "rdmsrq", "wrmsrq", "sysexitq" and "sysretq" mnemonics for the
|
|
|
|
64-bit variants of respective instructions.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] 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.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added "plt" operator for the ELF output format.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Allowed "rva" operator to be used in MS COFF object format, and also
|
|
|
|
added "static" keyword for the "public" directive.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added Intel-style aliases for the additional long mode 8-bit registers.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[-] 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.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[-] 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.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added "EFI", "EFIboot" and "EFIruntime" subsystem keywords for PE format.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
|
|
|
[-] 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.
|
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Allowed to check "@b" and "@f" symbols with "defined" operator.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Allowed "as" operator to specify the output file extension when
|
|
|
|
placed at the end of the "format" directive line.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[-] Definition of macro with the same name as one of the preprocessor's directives
|
|
|
|
is no longer allowed.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Allowed single quote character to be put inside the number value,
|
|
|
|
to help improve long numbers readability.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added optional symbolic information output, and a set of tools that extract
|
|
|
|
various kinds of information from it.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] Added "err" directive that allows to signalize error from the source.
|
2009-03-10 11:33:02 +01:00
|
|
|
|
|
|
|
|
|
|
|
version 1.66 (May 7, 2006)
|
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[+] 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
|
2009-03-10 11:33:02 +01:00
|
|
|
assigning it. For example:
|
|
|
|
|
2009-10-01 02:41:45 +02:00
|
|
|
a equ 1
|
|
|
|
a equ a+a
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-10-01 02:41:45 +02:00
|
|
|
define b 1
|
|
|
|
define b b+b
|
2009-03-10 11:33:02 +01:00
|
|
|
|
|
|
|
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:
|
|
|
|
|
2009-10-01 02:41:45 +02:00
|
|
|
if eax eq EAX | 0/0
|
|
|
|
nop
|
|
|
|
end if
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
is parsed into just "nop" instruction, since parser is able to determine
|
2009-03-10 11:33:02 +01:00
|
|
|
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:
|
|
|
|
|
2009-10-01 02:41:45 +02:00
|
|
|
if defined alpha & alpha
|
2009-03-10 11:33:02 +01:00
|
|
|
|
2009-10-01 02:41:45 +02:00
|
|
|
end if
|
2009-03-10 11:33:02 +01:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[-] The "ret" instruction with 0 parameter is now assembled into short form,
|
2009-03-10 11:33:02 +01:00
|
|
|
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.
|
|
|
|
|
2009-06-14 17:16:54 +02:00
|
|
|
[-] Corrected "fix" directive to keep the value intact before assigning it to the
|
2009-03-10 11:33:02 +01:00
|
|
|
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.
|