77266e66b4
git-svn-id: svn://kolibrios.org@1053 a494cfbc-eb01-0410-851d-a64ba20cac60
420 lines
13 KiB
Plaintext
420 lines
13 KiB
Plaintext
|
|
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.
|