
I'm not very sure of what it changes, but anyway

Code: Select all
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.