507 lines
16 KiB
Plaintext
507 lines
16 KiB
Plaintext
|
|
Visit http://flatassembler.net/ for more information.
|
|
|
|
|
|
version 1.73.32 (Dec 04, 2023)
|
|
|
|
[-] Corrected encoding of "rdpid" instruction operand.
|
|
|
|
|
|
version 1.73.31 (Jul 12, 2023)
|
|
|
|
[+] Handling multiple sign characters before a floating-point value.
|
|
|
|
[-] Corrected an issue with negative offsets for some relocatable addresses.
|
|
|
|
[-] Fixed a potential crash in external stub processor for PE.
|
|
|
|
|
|
version 1.73.30 (Feb 21, 2022)
|
|
|
|
[-] No longer signal an error when there is no line to concatenate with "\".
|
|
|
|
|
|
version 1.73.29 (Dec 18, 2021)
|
|
|
|
[-] Corrected an issue in external use of expression calculator.
|
|
|
|
|
|
version 1.73.28 (Sep 16, 2021)
|
|
|
|
[+] Added special preprocessing of symbols "__file__" and "__line__"
|
|
(backported from flat assembler g).
|
|
|
|
|
|
version 1.73.27 (Jan 27, 2021)
|
|
|
|
[-] The assembler should no longer prematurely abort when sign-extended 32-bit
|
|
value in 64-bit instruction overflows during intermediate passes.
|
|
|
|
|
|
version 1.73.26 (Jan 26, 2021)
|
|
|
|
[-] Corrected assembly of some "mov" variants when "use32" setting is used
|
|
with 64-bit relocatable formats.
|
|
|
|
|
|
version 1.73.25 (Aug 20, 2020)
|
|
|
|
[-] Corrected operand size handling for "vldmxcsr"/"vstmxcsr" instructions.
|
|
|
|
|
|
version 1.73.24 (Apr 29, 2020)
|
|
|
|
[+] Added "invlpgb" and "tlbsync" instructions.
|
|
|
|
[-] Upper bits of default entry point of ELF64 executable were not correctly
|
|
stored in the header.
|
|
|
|
|
|
version 1.73.23 (Apr 09, 2020)
|
|
|
|
[+] Added "psmash", "pvalidate", "rmpadjust" and "rmpupdate" instructions.
|
|
|
|
[-] No longer allowing "mov" to/from CR9-CR15 outside of long mode.
|
|
|
|
|
|
version 1.73.22 (Feb 09, 2020)
|
|
|
|
[-] Removed a trick from preprocessor's implementation that caused
|
|
the x64 version to crash when replacing symbolic constant in a label.
|
|
|
|
|
|
version 1.73.21 (Dec 05, 2019)
|
|
|
|
[+] Added "$%" and "$%%" symbols, and output offset addressing with "load"
|
|
and "store" directives (backported from flat assembler g).
|
|
It can be used only with binary output format.
|
|
|
|
[+] Added VAES and VPCMULQDQ instruction set extensions.
|
|
|
|
[+] Added "pconfig" instruction.
|
|
|
|
|
|
version 1.73.20 (Nov 29, 2019)
|
|
|
|
[-] Fixed a bug in "cmpxchg" and "xadd" introduced by previous version.
|
|
|
|
|
|
version 1.73.19 (Nov 27, 2019)
|
|
|
|
[+] Added AVX512_BITALG, AVX512_VPOPCNTDQ, AVX512_VBMI2, AVX512_VNNI
|
|
and AVX512_4VNNIW instruction sets.
|
|
|
|
[+] Added CET_SS and CET_IBT instruction sets.
|
|
|
|
[+] Added "ptwrite" instruction.
|
|
|
|
|
|
version 1.73.18 (Nov 13, 2019)
|
|
|
|
[-] Addresses prefixed with "fs:" or "gs:" are no longer RIP-relative by default.
|
|
|
|
|
|
version 1.73.17 (Nov 10, 2019)
|
|
|
|
[+] Added "mcommit" instruction.
|
|
|
|
|
|
version 1.73.16 (Aug 04, 2019)
|
|
|
|
[-] Corrected a mistake in AVX-512 mask parsing that led to "{k0}" mask being
|
|
erroneously accepted.
|
|
|
|
|
|
version 1.73.15 (Aug 01, 2019)
|
|
|
|
[+] Added "movdiri", "movdir64b" instructions and GFNI instruction set.
|
|
|
|
|
|
version 1.73.14 (Jul 30, 2019)
|
|
|
|
[+] Added "rdpru" and "wbnoinvd" instructions.
|
|
|
|
|
|
version 1.73.13 (Jul 14, 2019)
|
|
|
|
[-] Corrections in 64-bit Linux interface.
|
|
|
|
|
|
version 1.73.12 (May 19, 2019)
|
|
|
|
[-] Implied memory size allowed for 16-bit "movzx"/"movsx".
|
|
|
|
|
|
version 1.73.11 (Apr 19, 2019)
|
|
|
|
[+] Added "definite" operator.
|
|
|
|
|
|
version 1.73.10 (Apr 05, 2019)
|
|
|
|
[+] Added "cldemote", "tpause", "umonitor" and "umwait" instructions.
|
|
|
|
|
|
version 1.73.09 (Feb 17, 2019)
|
|
|
|
[-] Fixed a bug in AVX-512 instruction encoding with "{sae}" modifier.
|
|
|
|
|
|
version 1.73.08 (Jan 31, 2019)
|
|
|
|
[-] Fixed a bug in "align" directive for "dynamic" variant of ELF executable.
|
|
|
|
|
|
version 1.73.07 (Jan 30, 2019)
|
|
|
|
[+] Added "dynamic" variant of ELF executable.
|
|
|
|
[+] Added "gnurelro" segment type for ELF executable.
|
|
|
|
|
|
version 1.73.06 (Jan 04, 2019)
|
|
|
|
[+] Added "ud0" and "ud1" instruction.
|
|
|
|
[-] Fixed a minor bug in ELF formatter.
|
|
|
|
|
|
version 1.73.05 (Jan 03, 2019)
|
|
|
|
[-] Segments in ELF executable format automatically expanded to cover headers
|
|
and dynamic linking information.
|
|
|
|
|
|
version 1.73.04 (Apr 30, 2018)
|
|
|
|
[-] Fixed a bug in "bndstx"/"bndldx" special address syntax processing.
|
|
|
|
|
|
version 1.73.03 (Apr 15, 2018)
|
|
|
|
[+] Added "rdpid", "xsavec", "xsaves", "xrstors", "clzero", "monitorx" and "mwaitx"
|
|
instructions.
|
|
|
|
|
|
version 1.73.02 (Dec 16, 2017)
|
|
|
|
[-] Fixed a bug in the storage of "virtual as" blocks.
|
|
|
|
|
|
version 1.73.01 (Nov 25, 2017)
|
|
|
|
[+] Added virtual block continuation syntax (backported from flat assembler g).
|
|
|
|
[+] Documentation update.
|
|
|
|
[-] Fixed a bug in addressing data of the "virtual as" block.
|
|
|
|
|
|
version 1.73.00 (Nov 24, 2017)
|
|
|
|
[+] Added "virtual as" syntax (backported from flat assembler g).
|
|
|
|
|
|
version 1.72 (Oct 10, 2017)
|
|
|
|
[+] Support for Intel AVX-512, SHA, CLFLUSHOPT, CLWB, PCOMMIT, ADX, RDSEED, SMAP
|
|
and MPX instruction sets.
|
|
|
|
[+] Added "irpv" and "postpone" directives.
|
|
|
|
[+] 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.
|
|
|
|
[+] In the definition of macroinstruction the last argument can now be followed by
|
|
"&" character to indicate that this argument can be filled with all the remaining
|
|
contents of line that called the macro. This feature cannot be combined with a
|
|
multi-value arguments.
|
|
|
|
[+] Default value for macroinstruction parameter can now be defined with ":"
|
|
character as an alternative to "=".
|
|
|
|
[+] Added a 64-bit ELF executable version of flat assembler for Linux. It has
|
|
no extended capabilities compared to regular versions, it just simulates
|
|
the 32-bit environment to allow running the assembler on systems that
|
|
support only 64-bit executables.
|
|
|
|
[+] Added "gnustack" and "gnuehframe" segment types to ELF executable formatter.
|
|
|
|
[+] Console versions now display preprocessed instruction that caused an error
|
|
(previously only displayed by Windows GUI interface).
|
|
|
|
[+] Brought back the "-d" switch for command line.
|
|
|
|
[-] Removed dependence on size context for expression operators like NOT and XOR.
|
|
|
|
[+] Added "bsf" and "bsr" operators to numerical expressions.
|
|
|
|
[+] Allowed underscore character to be put inside a number value.
|
|
|
|
[+] Allowed octal numbers ending with "q".
|
|
|
|
[-] Removed the restriction that disallowed numerical constant to
|
|
forward-reference its own value.
|
|
|
|
|
|
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.
|