mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-21 03:14:19 +08:00
1481 lines
49 KiB
Plaintext
1481 lines
49 KiB
Plaintext
2.03p1 (?)
|
|
------
|
|
* Fix buffer overflow in the listing module.
|
|
* Fix the handling of hexadecimal escape codes in `...` strings.
|
|
|
|
2.03
|
|
----
|
|
* Add support for Intel AVX, CLMUL and FMA instructions,
|
|
including YMM registers.
|
|
* "dy", "resy" and "yword" for 32-byte operands.
|
|
* Fix some SSE5 instructions.
|
|
* Intel INVEPT, INVVPID and MOVBE instructions.
|
|
* Fix checking for critical expressions when the optimizer is enabled.
|
|
* Support the DWARF debugging format for ELF targets.
|
|
* Fix optimizations of signed bytes.
|
|
* Fix operation on bigendian machines.
|
|
* Fix buffer overflow in the preprocessor.
|
|
* SAFESEH support for Win32, IMAGEREL for Win64 (SEH).
|
|
* %? and %?? to refer to the name of a macro itself. In particular,
|
|
"%idefine keyword $%?" can be used to make a keyword "disappear".
|
|
* New options for dependency generation: -MD, -MF, -MP, -MT, -MQ.
|
|
* New preprocessor directives %pathsearch and %depend; INCBIN
|
|
reimplemented as a macro.
|
|
* %include now resolves macros in a sane manner.
|
|
* %substr can now be used to get other than one-character substrings.
|
|
* New type of character/string constants, using backquotes (`...`),
|
|
which support C-style escape sequences.
|
|
* %defstr and %idefstr to stringize macro definitions before creation.
|
|
* Fix forward references used in EQU statements.
|
|
|
|
2.02
|
|
----
|
|
* Additional fixes for MMX operands with explicit "qword", as well as
|
|
(hopefully) SSE operands with "oword".
|
|
* Fix handling of truncated strings with DO.
|
|
* Fix segfaults due to memory overwrites when floating-point constants
|
|
were used.
|
|
* Fix segfaults due to missing include files.
|
|
* Fix OpenWatcom Makefiles for DOS and OS/2.
|
|
* Add autogenerated instruction list back into the documentation.
|
|
* ELF: Fix segfault when generating stabs, and no symbols have been
|
|
defined.
|
|
* ELF: Experimental support for DWARF debugging information.
|
|
* New compile date and time standard macros.
|
|
* %ifnum now returns true for negative numbers.
|
|
* New %iftoken test for a single token.
|
|
* New %ifempty test for empty expansion.
|
|
* Add support for the XSAVE instruction group.
|
|
* Makefile for Netware/gcc.
|
|
* Fix issue with some warnings getting emitted way too many times.
|
|
* Autogenerated instruction list added to the documentation.
|
|
|
|
2.01
|
|
----
|
|
* Fix the handling of MMX registers with explicit "qword" tags on
|
|
memory (broken in 2.00 due to 64-bit changes.)
|
|
* Fix the PREFETCH instructions.
|
|
* Fix the documentation.
|
|
* Fix debugging info when using "-f elf" (backwards alias for "-f
|
|
elf32").
|
|
* Man pages for rdoff tools (from the Debian project.)
|
|
* ELF: handle large numbers of sections.
|
|
* Fix corrupt output when the optimizer runs out of passes.
|
|
|
|
2.00
|
|
----
|
|
* Added c99 data-type compliance.
|
|
* Added general x86-64 support.
|
|
* Added win64 (x86-64 COFF) output format.
|
|
* Added __BITS__ standard macro.
|
|
* Renamed the elf output format to elf32 for clarity.
|
|
* Added elf64 and macho (MacOS X) output formats.
|
|
* Added Numeric constants in DQ directive.
|
|
* Added oword, do and reso pseudo operands.
|
|
* Allow underscores in numbers.
|
|
* Added 8-, 16- and 128-bit floating-point formats.
|
|
* Added binary, octal and hexadecimal floating-point.
|
|
* Correct the generation of floating-point constants.
|
|
* Added Floating-point option control.
|
|
* Added Infinity and NaN floating point support.
|
|
* Added ELF Symbol Visibility support.
|
|
* Added Setting OSABI value in ELF header directive.
|
|
* Added Generate Makefile Dependencies option.
|
|
* Added Unlimited Optimization Passes option.
|
|
* Added %IFN and %ELIFN support.
|
|
* Added Logical Negation Operator.
|
|
* Enhanced Stack Relative Preprocessor Directives.
|
|
* Enhanced ELF Debug Formats.
|
|
* Enhanced Send Errors to a File option.
|
|
* Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
|
|
* Added a large number of additional instructions.
|
|
* Significant performance improvements.
|
|
|
|
0.98.39
|
|
-------
|
|
* fix buffer overflow
|
|
* fix outas86's .bss handling
|
|
* "make spotless" no longer deletes config.h.in.
|
|
* %(el)if(n)idn insensitivity to string quotes difference (#809300).
|
|
* (nasm.c) __OUTPUT_FORMAT__ changed to string value instead of symbol.
|
|
|
|
0.98.38
|
|
-------
|
|
* Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
|
|
mkdep.pl to be able to generate completely pathless dependencies, as
|
|
required by OpenWatcom wmake (it supports path searches, but not
|
|
explicit paths.)
|
|
* Fix the STR instruction.
|
|
* Fix the ELF output format, which was broken under certain
|
|
circumstances due to the addition of stabs support.
|
|
* Quick-fix Borland format debug-info for -f obj
|
|
* Fix for %rep with no arguments (#560568)
|
|
* Fix concatenation of preprocessor function call (#794686)
|
|
* Fix long label causes coredump (#677841)
|
|
* Use autoheader as well as autoconf to keep configure from generating
|
|
ridiculously long command lines.
|
|
* Make sure that all of the formats which support debugging output
|
|
actually will suppress debugging output when -g not specified.
|
|
|
|
0.98.37
|
|
-------
|
|
* Paths given in "-I" switch searched for "incbin"ed as
|
|
well as "%include"ed files.
|
|
* Added stabs debugging for the ELF output format, patch from
|
|
Martin Wawro.
|
|
* Fix output/outbin.c to allow origin > 80000000h.
|
|
* Make -U switch work.
|
|
* Fix the use of relative offsets with explicit prefixes, e.g. "a32 loop foo".
|
|
* Remove "backslash()".
|
|
* Fix the SMSW and SLDT instructions.
|
|
* -O2 and -O3 are no longer aliases for -O10 and -O15. If you mean the
|
|
latter, please say so! :)
|
|
|
|
0.98.36
|
|
-------
|
|
* Update rdoff - librarian/archiver - common rec - docs!
|
|
* Fix signed/unsigned problems.
|
|
* Fix JMP FAR label and CALL FAR label.
|
|
* Add new multisection support - map files - fix align bug
|
|
* Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
|
|
* "Q" or "O" suffixes indicate octal
|
|
* Support Prescott new instructions (PNI).
|
|
* Cyrix XSTORE instruction.
|
|
|
|
0.98.35
|
|
-------
|
|
* Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
|
|
* Fix dependencies and compiler warnings.
|
|
* Add "const" in a number of places.
|
|
* Add -X option to specify error reporting format (use -Xvc to
|
|
integrate with Microsoft Visual Studio.)
|
|
* Minor changes for code legibility.
|
|
* Drop use of tmpnam() in rdoff (security fix.)
|
|
|
|
0.98.34
|
|
-------
|
|
* Correct additional address-size vs. operand-size confusions.
|
|
* Generate dependencies for all Makefiles automatically.
|
|
* Add support for unimplemented (but theoretically available)
|
|
registers such as tr0 and cr5. Segment registers 6 and 7 are called
|
|
segr6 and segr7 for the operations which they can be represented.
|
|
* Correct some disassembler bugs related to redundant address-size prefixes.
|
|
Some work still remains in this area.
|
|
* Correctly generate an error for things like "SEG eax".
|
|
* Add the JMPE instruction, enabled by "CPU IA64".
|
|
* Correct compilation on newer gcc/glibc platforms.
|
|
* Issue an error on things like "jmp far eax".
|
|
|
|
|
|
0.98.33
|
|
-------
|
|
|
|
* New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
|
|
round out the version-query macros. version.pl now understands
|
|
X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
|
|
X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
|
|
* New keyword "strict" to disable the optimization of specific
|
|
operands.
|
|
* Fix the handing of size overrides with JMP instructions
|
|
(instructions such as "jmp dword foo".)
|
|
* Fix the handling of "ABSOLUTE label", where "label" points into a
|
|
relocatable segment.
|
|
* Fix OBJ output format with lots of externs.
|
|
* More documentation updates.
|
|
* Add -Ov option to get verbose information about optimizations.
|
|
* Undo a braindead change which broke %elif directives.
|
|
* Makefile updates.
|
|
|
|
|
|
0.98.32
|
|
-------
|
|
|
|
* Fix NASM crashing when %macro directives were left unterminated.
|
|
* Lots of documentation updates.
|
|
* Complete rewrite of the PostScript/PDF documentation generator.
|
|
* The MS Visual C++ Makefile was updated and corrected.
|
|
* Recognize .rodata as a standard section name in ELF.
|
|
* Fix some obsolete Perl4-isms in Perl scripts.
|
|
* Fix configure.in to work with autoconf 2.5x.
|
|
* Fix a couple of "make cleaner" misses.
|
|
* Make the normal "./configure && make" work with Cygwin.
|
|
|
|
|
|
0.98.31
|
|
-------
|
|
|
|
* Correctly build in a separate object directory again.
|
|
* Derive all references to the version number from the version file.
|
|
* New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
|
|
* Lots of Makefile updates and bug fixes.
|
|
* New %ifmacro directive to test for multiline macros.
|
|
* Documentation updates.
|
|
* Fixes for 16-bit OBJ format output.
|
|
* Changed the NASM environment variable to NASMENV.
|
|
|
|
|
|
0.98.30
|
|
-------
|
|
|
|
* Changed doc files a lot: completely removed old READMExx and
|
|
Wishlist files, incorporating all information in CHANGES and TODO.
|
|
* I waited a long time to rename zoutieee.c to (original) outieee.c
|
|
* moved all output modules to output/ subdirectory.
|
|
* Added 'make strip' target to strip debug info from nasm & ndisasm.
|
|
* Added INSTALL file with installation instructions.
|
|
* Added -v option description to nasm man.
|
|
* Added dist makefile target to produce source distributions.
|
|
* 16-bit support for ELF output format (GNU extension, but useful.)
|
|
|
|
|
|
0.98.28
|
|
-------
|
|
|
|
* Fastcooked this for Debian's Woody release:
|
|
Frank applied the INCBIN bug patch to 0.98.25alt and called
|
|
it 0.98.28 to not confuse poor little apt-get.
|
|
|
|
|
|
0.98.26
|
|
-------
|
|
|
|
* Reorganised files even better from 0.98.25alt
|
|
|
|
|
|
0.98.25alt
|
|
----------
|
|
|
|
* Prettified the source tree. Moved files to more reasonable places.
|
|
* Added findleak.pl script to misc/ directory.
|
|
* Attempted to fix doc.
|
|
|
|
0.98.25
|
|
-------
|
|
|
|
* Line continuation character '\'
|
|
* Docs inadvertantly reverted - "dos packaging".
|
|
|
|
|
|
0.98.24p1
|
|
---------
|
|
|
|
* FIXME: Someone, document this please.
|
|
|
|
|
|
0.98.24
|
|
-------
|
|
|
|
* Documentation - Ndisasm doc added to Nasm.doc.
|
|
|
|
|
|
0.98.23
|
|
-------
|
|
|
|
* Attempted to remove rdoff version1
|
|
* Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
|
|
|
|
|
|
0.98.22
|
|
-------
|
|
|
|
* Update rdoff2 - attempt to remove v1.
|
|
|
|
|
|
0.98.21
|
|
-------
|
|
|
|
* Optimization fixes.
|
|
|
|
|
|
0.98.20
|
|
-------
|
|
|
|
* Optimization fixes.
|
|
|
|
|
|
0.98.19
|
|
-------
|
|
|
|
* H. J. Lu's patch back out.
|
|
|
|
|
|
0.98.18
|
|
-------
|
|
|
|
* Added ".rdata" to "-f win32".
|
|
|
|
|
|
0.98.17
|
|
-------
|
|
|
|
* H. J. Lu's "bogus elf" patch. (Red Hat problem?)
|
|
|
|
|
|
0.98.16
|
|
-------
|
|
|
|
* Fix whitespace before "[section ..." bug.
|
|
|
|
0.98.15
|
|
-------
|
|
|
|
* Rdoff changes (?).
|
|
* Fix fixes to memory leaks.
|
|
|
|
0.98.14
|
|
-------
|
|
|
|
* Fix memory leaks.
|
|
* (there was no '.13)
|
|
|
|
0.98.12
|
|
-------
|
|
|
|
* Update optimization (new function of "-O1")
|
|
* Changes to test/bintest.asm (?).
|
|
|
|
0.98.11
|
|
-------
|
|
|
|
* Optimization changes.
|
|
* Ndisasm fixed.
|
|
* (there was no '.10)
|
|
|
|
0.98.09
|
|
-------
|
|
|
|
* Add multiple sections support to "-f bin".
|
|
* Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
|
|
* Add "-v" as an alias to the "-r" switch.
|
|
* Remove "#ifdef" from Tasm compatibility options.
|
|
* Remove redundant size-overrides on "mov ds, ex", etc.
|
|
* Fixes to SSE2, other insns.dat (?).
|
|
* Enable uppercase "I" and "P" switches.
|
|
* Case insinsitive "seg" and "wrt".
|
|
* Update install.sh (?).
|
|
* Allocate tokens in blocks.
|
|
* Improve "invalid effective address" messages.
|
|
|
|
0.98.08
|
|
-------
|
|
|
|
* Add "%strlen" and "%substr" macro operators
|
|
* Fixed broken c16.mac.
|
|
* Unterminated string error reported.
|
|
* Fixed bugs as per 0.98bf
|
|
|
|
|
|
0.98.09b with John Coffman patches released 28-Oct-2001
|
|
-------------------------------------------------------
|
|
|
|
Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
|
|
|
|
* More closely compatible with 0.98 when -O0 is implied
|
|
or specified. Not strictly identical, since backward
|
|
branches in range of short offsets are recognized, and signed
|
|
byte values with no explicit size specification will be
|
|
assembled as a single byte.
|
|
|
|
* More forgiving with the PUSH instruction. 0.98 requires
|
|
a size to be specified always. 0.98.09b will imply the size
|
|
from the current BITS setting (16 or 32).
|
|
|
|
* Changed definition of the optimization flag:
|
|
|
|
-O0 strict two-pass assembly, JMP and Jcc are
|
|
handled more like 0.98, except that back-
|
|
ward JMPs are short, if possible.
|
|
|
|
-O1 strict two-pass assembly, but forward
|
|
branches are assembled with code guaranteed
|
|
to reach; may produce larger code than
|
|
-O0, but will produce successful assembly
|
|
more often if branch offset sizes are not
|
|
specified.
|
|
|
|
-O2 multi-pass optimization, minimize branch
|
|
offsets; also will minimize signed immed-
|
|
iate bytes, overriding size specification.
|
|
|
|
-O3 like -O2, but more passes taken, if needed
|
|
|
|
|
|
0.98.07 released 01/28/01
|
|
-------------------------
|
|
|
|
* Added Stepane Denis' SSE2 instructions to a *working*
|
|
version of the code - some earlier versions were based on
|
|
broken code - sorry 'bout that. version "0.98.07"
|
|
|
|
|
|
01/28/01
|
|
--------
|
|
|
|
* Cosmetic modifications to nasm.c, nasm.h,
|
|
AUTHORS, MODIFIED
|
|
|
|
|
|
0.98.06f released 01/18/01
|
|
--------------------------
|
|
|
|
* - Add "metalbrain"s jecxz bug fix in insns.dat
|
|
- alter nasmdoc.src to match - version "0.98.06f"
|
|
|
|
|
|
0.98.06e released 01/09/01
|
|
--------------------------
|
|
|
|
* Removed the "outforms.h" file - it appears to be
|
|
someone's old backup of "outform.h". version "0.98.06e"
|
|
|
|
|
|
01/09/01
|
|
--------
|
|
|
|
* fbk - finally added the fix for the "multiple %includes bug",
|
|
known since 7/27/99 - reported originally (?) and sent to
|
|
us by Austin Lunnen - he reports that John Fine had a fix
|
|
within the day. Here it is...
|
|
|
|
* Nelson Rush resigns from the group. Big thanks to Nelson for
|
|
his leadership and enthusiasm in getting these changes
|
|
incorporated into Nasm!
|
|
|
|
* fbk - [list +], [list -] directives - ineptly implemented, should
|
|
be re-written or removed, perhaps.
|
|
|
|
* Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
|
|
as well - testing might be desirable...
|
|
|
|
|
|
08/07/00
|
|
--------
|
|
|
|
* James Seter - -postfix, -prefix command line switches.
|
|
* Yuri Zaporogets - rdoff utility changes.
|
|
|
|
|
|
0.98p1
|
|
------
|
|
|
|
* GAS-like palign (Panos Minos)
|
|
* FIXME: Someone, fill this in with details
|
|
|
|
|
|
0.98bf (bug-fixed)
|
|
----------------------------------
|
|
|
|
* Fixed - elf and aoutb bug - shared libraries
|
|
- multiple "%include" bug in "-f obj"
|
|
- jcxz, jecxz bug
|
|
- unrecognized option bug in ndisasm
|
|
|
|
0.98.03 with John Coffman's changes released 27-Jul-2000
|
|
--------------------------------------------------------
|
|
|
|
* Added signed byte optimizations for the 0x81/0x83 class
|
|
of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
|
|
when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also
|
|
optimization of signed byte form of 'PUSH imm' and 'IMUL
|
|
reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.
|
|
|
|
* Added multi-pass JMP and Jcc offset optimization. Offsets
|
|
on forward references will preferentially use the short form,
|
|
without the need to code a specific size (short or near) for
|
|
the branch. Added instructions for 'Jcc label' to use the
|
|
form 'Jnotcc $+3/JMP label', in cases where a short offset
|
|
is out of bounds. If compiling for a 386 or higher CPU, then
|
|
the 386 form of Jcc will be used instead.
|
|
|
|
This feature is controlled by a new command-line switch: "O",
|
|
(upper case letter O). "-O0" reverts the assembler to no
|
|
extra optimization passes, "-O1" allows up to 5 extra passes,
|
|
and "-O2"(default), allows up to 10 extra optimization passes.
|
|
|
|
* Added a new directive: 'cpu XXX', where XXX is any of:
|
|
8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
|
|
Katmai. All are case insensitive. All instructions will
|
|
be selected only if they apply to the selected cpu or lower.
|
|
Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
|
|
|
|
* Added to 'standard.mac', the "use16" and "use32" forms of
|
|
the "bits 16/32" directive. This is nothing new, just conforms
|
|
to a lot of other assemblers. (minor)
|
|
|
|
* Changed label allocation from 320/32 (10000 labels @ 200K+)
|
|
to 32/37 (1000 labels); makes running under DOS much easier.
|
|
Since additional label space is allocated dynamically, this
|
|
should have no effect on large programs with lots of labels.
|
|
The 37 is a prime, believed to be better for hashing. (minor)
|
|
|
|
* Integrated patchfile 0.98-0.98.01. I call this version
|
|
0.98.03, for historical reasons: 0.98.02 was trashed.
|
|
|
|
--John Coffman <johninsd@san.rr.com> 27-Jul-2000
|
|
|
|
|
|
Kendall Bennett's SciTech MGL changes
|
|
-------------------------------------
|
|
Note that you must define "TASM_COMPAT" at compile-time
|
|
to get the Tasm Ideal Mode compatibility.
|
|
|
|
All changes can be compiled in and out using the TASM_COMPAT macros,
|
|
and when compiled without TASM_COMPAT defined we get the exact same
|
|
binary as the unmodified 0.98 sources.
|
|
|
|
standard.mac, macros.c:
|
|
. Added macros to ignore TASM directives before first include
|
|
|
|
nasm.h:
|
|
. Added extern declaration for tasm_compatible_mode
|
|
|
|
nasm.c:
|
|
. Added global variable tasm_compatible_mode
|
|
. Added command line switch for TASM compatible mode (-t)
|
|
. Changed version command line to reflect when compiled with TASM additions
|
|
. Added response file processing to allow all arguments on a single
|
|
line (response file is @resp rather than -@resp for NASM format).
|
|
|
|
labels.c:
|
|
. Changes islocal() macro to support TASM style @@local labels.
|
|
. Added islocalchar() macro to support TASM style @@local labels.
|
|
|
|
parser.c:
|
|
. Added support for TASM style memory references (ie: mov [DWORD eax],10
|
|
rather than the NASM style mov DWORD [eax],10).
|
|
|
|
preproc.c:
|
|
. Added new directives, %arg, %local, %stacksize to directives table
|
|
. Added support for TASM style directives without a leading % symbol.
|
|
|
|
Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
|
|
|
|
* A new keyword %xdefine and its case-insensitive counterpart %ixdefine.
|
|
They work almost the same way as %define and %idefine but expand
|
|
the definition immediately, not on the invocation. Something like a cross
|
|
between %define and %assign. The "x" suffix stands for "eXpand", so
|
|
"xdefine" can be deciphered as "expand-and-define". Thus you can do
|
|
things like this:
|
|
|
|
%assign ofs 0
|
|
|
|
%macro arg 1
|
|
%xdefine %1 dword [esp+ofs]
|
|
%assign ofs ofs+4
|
|
%endmacro
|
|
|
|
* Changed the place where the expansion of %$name macros are expanded.
|
|
Now they are converted into ..@ctxnum.name form when detokenizing, so
|
|
there are no quirks as before when using %$name arguments to macros,
|
|
in macros etc. For example:
|
|
|
|
%macro abc 1
|
|
%define %1 hello
|
|
%endm
|
|
|
|
abc %$here
|
|
%$here
|
|
|
|
Now last line will be expanded into "hello" as expected. This also allows
|
|
for lots of goodies, a good example are extended "proc" macros included
|
|
in this archive.
|
|
|
|
* Added a check for "cstk" in smacro_defined() before calling get_ctx() -
|
|
this allows for things like:
|
|
|
|
%ifdef %$abc
|
|
%endif
|
|
|
|
to work without warnings even in no context.
|
|
|
|
* Added a check for "cstk" in %if*ctx and %elif*ctx directives -
|
|
this allows to use %ifctx without excessive warnings. If there is
|
|
no active context, %ifctx goes through "false" branch.
|
|
|
|
* Removed "user error: " prefix with %error directive: it just clobbers the
|
|
output and has absolutely no functionality. Besides, this allows to write
|
|
macros that does not differ from built-in functions in any way.
|
|
|
|
* Added expansion of string that is output by %error directive. Now you
|
|
can do things like:
|
|
|
|
%define hello(x) Hello, x!
|
|
|
|
%define %$name andy
|
|
%error "hello(%$name)"
|
|
|
|
Same happened with %include directive.
|
|
|
|
* Now all directives that expect an identifier will try to expand and
|
|
concatenate everything without whitespaces in between before usage.
|
|
For example, with "unfixed" nasm the commands
|
|
|
|
%define %$abc hello
|
|
%define __%$abc goodbye
|
|
__%$abc
|
|
|
|
would produce "incorrect" output: last line will expand to
|
|
|
|
hello goodbyehello
|
|
|
|
Not quite what you expected, eh? :-) The answer is that preprocessor
|
|
treats the %define construct as if it would be
|
|
|
|
%define __ %$abc goodbye
|
|
|
|
(note the white space between __ and %$abc). After my "fix" it
|
|
will "correctly" expand into
|
|
|
|
goodbye
|
|
|
|
as expected. Note that I use quotes around words "correct", "incorrect"
|
|
etc because this is rather a feature not a bug; however current behaviour
|
|
is more logical (and allows more advanced macro usage :-).
|
|
|
|
Same change was applied to:
|
|
%push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine,
|
|
%assign,%iassign,%undef
|
|
|
|
* A new directive [WARNING {+|-}warning-id] have been added. It works only
|
|
if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
|
|
|
|
* A new warning type: macro-selfref. By default this warning is disabled;
|
|
when enabled NASM warns when a macro self-references itself; for example
|
|
the following source:
|
|
|
|
[WARNING macro-selfref]
|
|
|
|
%macro push 1-*
|
|
%rep %0
|
|
push %1
|
|
%rotate 1
|
|
%endrep
|
|
%endmacro
|
|
|
|
push eax,ebx,ecx
|
|
|
|
will produce a warning, but if we remove the first line we won't see it
|
|
anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
|
|
eats such constructs without warnings at all).
|
|
|
|
* Added a "error" routine to preprocessor which always will set ERR_PASS1
|
|
bit in severity_code. This removes annoying repeated errors on first
|
|
and second passes from preprocessor.
|
|
|
|
* Added the %+ operator in single-line macros for concatenating two
|
|
identifiers. Usage example:
|
|
|
|
%define _myfunc _otherfunc
|
|
%define cextern(x) _ %+ x
|
|
cextern (myfunc)
|
|
|
|
After first expansion, third line will become "_myfunc". After this
|
|
expansion is performed again so it becomes "_otherunc".
|
|
|
|
* Now if preprocessor is in a non-emmitting state, no warning or error
|
|
will be emmitted. Example:
|
|
|
|
%if 1
|
|
mov eax,ebx
|
|
%else
|
|
put anything you want between these two brackets,
|
|
even macro-parameter references %1 or local labels %$zz
|
|
or macro-local labels %%zz - no warning will be emmitted.
|
|
%endif
|
|
|
|
* Context-local variables on expansion as a last resort are looked up
|
|
in outer contexts. For example, the following piece:
|
|
|
|
%push outer
|
|
%define %$a [esp]
|
|
|
|
%push inner
|
|
%$a
|
|
%pop
|
|
%pop
|
|
|
|
will expand correctly the fourth line to [esp]; if we'll define another
|
|
%$a inside the "inner" context, it will take precedence over outer
|
|
definition. However, this modification has been applied only to
|
|
expand_smacro and not to smacro_define: as a consequence expansion
|
|
looks in outer contexts, but %ifdef won't look in outer contexts.
|
|
|
|
This behaviour is needed because we don't want nested contexts to
|
|
act on already defined local macros. Example:
|
|
|
|
%define %$arg1 [esp+4]
|
|
test eax,eax
|
|
if nz
|
|
mov eax,%$arg1
|
|
endif
|
|
|
|
In this example the "if" mmacro enters into the "if" context, so %$arg1
|
|
is not valid anymore inside "if". Of course it could be worked around
|
|
by using explicitely %$$arg1 but this is ugly IMHO.
|
|
|
|
* Fixed memory leak in %undef. The origline wasn't freed before
|
|
exiting on success.
|
|
|
|
* Fixed trap in preprocessor when line expanded to empty set of tokens.
|
|
This happens, for example, in the following case:
|
|
|
|
#define SOMETHING
|
|
SOMETHING
|
|
|
|
|
|
0.98
|
|
----
|
|
|
|
All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
|
|
|
|
* The documentation comment delimiter is \# not #.
|
|
* Allow EQU definitions to refer to external labels; reported by
|
|
Pedro Gimeno.
|
|
* Re-enable support for RDOFF v1; reported by Pedro Gimeno.
|
|
* Updated License file per OK from Simon and Julian.
|
|
|
|
|
|
0.98p9
|
|
------
|
|
|
|
* Update documentation (although the instruction set reference will
|
|
have to wait; I don't want to hold up the 0.98 release for it.)
|
|
* Verified that the NASM implementation of the PEXTRW and PMOVMSKB
|
|
instructions is correct. The encoding differs from what the Intel
|
|
manuals document, but the Pentium III behaviour matches NASM, not
|
|
the Intel manuals.
|
|
* Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
|
|
Stefan Hoffmeister.
|
|
* Resurrect the -s option, which was removed when changing the
|
|
diagnostic output to stdout.
|
|
|
|
|
|
0.98p8
|
|
------
|
|
|
|
* Fix for "DB" when NASM is running on a bigendian machine.
|
|
* Invoke insns.pl once for each output script, making Makefile.in
|
|
legal for "make -j".
|
|
* Improve the Unix configure-based makefiles to make package
|
|
creation easier.
|
|
* Included an RPM .spec file for building RPM (RedHat Package Manager)
|
|
packages on Linux or Unix systems.
|
|
* Fix Makefile dependency problems.
|
|
* Change src/rdsrc.pl to include sectioning information in info
|
|
output; required for install-info to work.
|
|
* Updated the RDOFF distribution to version 2 from Jules; minor
|
|
massaging to make it compile in my environment.
|
|
* Split doc files that can be built by anyone with a Perl interpreter off
|
|
into a separate archive.
|
|
* "Dress rehearsal" release!
|
|
|
|
|
|
0.98p7
|
|
------
|
|
|
|
* Fixed opcodes with a third byte-sized immediate argument to not
|
|
complain if given "byte" on the immediate.
|
|
* Allow %undef to remove single-line macros with arguments. This
|
|
matches the behaviour of #undef in the C preprocessor.
|
|
* Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
|
|
compatibility with most C compilers and preprocessors. This allows
|
|
Makefile options to be shared between cc and nasm, for example.
|
|
* Minor cleanups.
|
|
* Went through the list of Katmai instructions and hopefully fixed the
|
|
(rather few) mistakes in it.
|
|
* (Hopefully) fixed a number of disassembler bugs related to ambiguous
|
|
instructions (disambiguated by -p) and SSE instructions with REP.
|
|
* Fix for bug reported by Mark Junger: "call dword 0x12345678" should
|
|
work and may add an OSP (affected CALL, JMP, Jcc).
|
|
* Fix for environments when "stderr" isn't a compile-time constant.
|
|
|
|
|
|
0.98p6
|
|
------
|
|
|
|
* Took officially over coordination of the 0.98 release; so drop
|
|
the p3.x notation. Skipped p4 and p5 to avoid confusion with John
|
|
Fine's J4 and J5 releases.
|
|
* Update the documentation; however, it still doesn't include
|
|
documentation for the various new instructions. I somehow wonder if
|
|
it makes sense to have an instruction set reference in the assembler
|
|
manual when Intel et al have PDF versions of their manuals online.
|
|
* Recognize "idt" or "centaur" for the -p option to ndisasm.
|
|
* Changed error messages back to stderr where they belong, but add an
|
|
-E option to redirect them elsewhere (the DOS shell cannot redirect
|
|
stderr.)
|
|
* -M option to generate Makefile dependencies (based on code from Alex
|
|
Verstak.)
|
|
* %undef preprocessor directive, and -u option, that undefines a
|
|
single-line macro.
|
|
* OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
|
|
Chuck Crayne.
|
|
* Various minor bugfixes (reported by):
|
|
- Dangling %s in preproc.c (Martin Junker)
|
|
* THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am
|
|
on a trip and didn't bring the Katmai instruction reference, so I
|
|
can't work on them right now.
|
|
* Updated the License file per agreement with Simon and Jules to
|
|
include a GPL distribution clause.
|
|
|
|
|
|
0.98p3.7
|
|
--------
|
|
|
|
* (Hopefully) fixed the canned Makefiles to include the outrdf2 and
|
|
zoutieee modules.
|
|
* Renamed changes.asm to changed.asm.
|
|
|
|
|
|
0.98p3.6
|
|
--------
|
|
|
|
* Fixed a bunch of instructions that were added in 0.98p3.5 which had
|
|
memory operands, and the address-size prefix was missing from the
|
|
instruction pattern.
|
|
|
|
|
|
0.98p3.5
|
|
--------
|
|
|
|
* Merged in changes from John S. Fine's 0.98-J5 release. John's based
|
|
0.98-J5 on my 0.98p3.3 release; this merges the changes.
|
|
* Expanded the instructions flag field to a long so we can fit more
|
|
flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
|
|
such.
|
|
* Fix the "PRIV" flag on a bunch of instructions, and create new
|
|
"PROT" flag for protected-mode-only instructions (orthogonal to if
|
|
the instruction is privileged!) and new "SMM" flag for SMM-only
|
|
instructions.
|
|
* Added AMD-only SYSCALL and SYSRET instructions.
|
|
* Make SSE actually work, and add new Katmai MMX instructions.
|
|
* Added a -p (preferred vendor) option to ndisasm so that it can
|
|
distinguish e.g. Cyrix opcodes also used in SSE. For example:
|
|
|
|
ndisasm -p cyrix aliased.bin
|
|
00000000 670F514310 paddsiw mm0,[ebx+0x10]
|
|
00000005 670F514320 paddsiw mm0,[ebx+0x20]
|
|
ndisasm -p intel aliased.bin
|
|
00000000 670F514310 sqrtps xmm0,[ebx+0x10]
|
|
00000005 670F514320 sqrtps xmm0,[ebx+0x20]
|
|
* Added a bunch of Cyrix-specific instructions.
|
|
|
|
|
|
0.98p3.4
|
|
--------
|
|
|
|
* Made at least an attempt to modify all the additional Makefiles (in
|
|
the Mkfiles directory). I can't test it, but this was the best I
|
|
could do.
|
|
* DOS DJGPP+"Opus Make" Makefile from John S. Fine.
|
|
* changes.asm changes from John S. Fine.
|
|
|
|
|
|
0.98p3.3
|
|
--------
|
|
|
|
* Patch from Conan Brink to allow nesting of %rep directives.
|
|
* If we're going to allow INT01 as an alias for INT1/ICEBP (one of
|
|
Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
|
|
as well.
|
|
* Updated changes.asm to include the latest changes.
|
|
* Tried to clean up the <CR>s that had snuck in from a DOS/Windows
|
|
environment into my Unix environment, and try to make sure than
|
|
DOS/Windows users get them back.
|
|
* We would silently generate broken tools if insns.dat wasn't sorted
|
|
properly. Change insns.pl so that the order doesn't matter.
|
|
* Fix bug in insns.pl (introduced by me) which would cause conditional
|
|
instructions to have an extra "cc" in disassembly, e.g. "jnz"
|
|
disassembled as "jccnz".
|
|
|
|
|
|
0.98p3.2
|
|
--------
|
|
|
|
* Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
|
|
http://www.csoft.net/cz/johnfine/
|
|
* Changed previous "spotless" Makefile target (appropriate for distribution)
|
|
to "distclean", and added "cleaner" target which is same as "clean"
|
|
except deletes files generated by Perl scripts; "spotless" is union.
|
|
* Removed BASIC programs from distribution. Get a Perl interpreter
|
|
instead (see below.)
|
|
* Calling this "pre-release 3.2" rather than "p3-hpa2" because of
|
|
John's contributions.
|
|
* Actually link in the IEEE output format (zoutieee.c); fix a bunch of
|
|
compiler warnings in that file. Note I don't know what IEEE output
|
|
is supposed to look like, so these changes were made "blind".
|
|
|
|
|
|
0.98p3-hpa
|
|
----------
|
|
|
|
* Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
|
|
buildable version for Unix systems (Makefile.in updates, etc.)
|
|
* Changed insns.pl to create the instruction tables in nasm.h and
|
|
names.c, so that a new instruction can be added by adding it *only*
|
|
to insns.dat.
|
|
* Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
|
|
FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
|
|
guarantee will never be used; one of them is documented as UD2 in
|
|
Intel documentation, the other one just as "Undefined Opcode" --
|
|
calling it UD1 seemed to make sense.)
|
|
* MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
|
|
characters long. Now MAX_SYMBOL is derived from insns.dat.
|
|
* A note on the BASIC programs included: forget them. insns.bas is
|
|
already out of date. Get yourself a Perl interpreter for your
|
|
platform of choice at:
|
|
|
|
http://www.cpan.org/ports/index.html
|
|
|
|
|
|
0.98 pre-release 3
|
|
-------------------
|
|
|
|
added response file support, improved command line handling, new layout
|
|
help screen
|
|
|
|
fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
|
|
related bugs, updated Wishlist; 0.98 Prerelease 3.
|
|
|
|
|
|
0.98 pre-release 2
|
|
-------------------
|
|
|
|
fixed bug in outcoff.c to do with truncating section names longer
|
|
than 8 characters, referencing beyond end of string; 0.98 pre-release 2
|
|
|
|
|
|
0.98 pre-released May 1999
|
|
--------------------------
|
|
|
|
Fixed a bug whereby STRUC didn't work at all in RDF.
|
|
|
|
Fixed a problem with group specification in PUBDEFs in OBJ.
|
|
|
|
Improved ease of adding new output formats. Contribution due to
|
|
Fox Cutter.
|
|
|
|
Fixed a bug in relocations in the `bin' format: was showing up when
|
|
a relocatable reference crossed an 8192-byte boundary in any output
|
|
section.
|
|
|
|
Fixed a bug in local labels: local-label lookups were inconsistent
|
|
between passes one and two if an EQU occurred between the definition
|
|
of a global label and the subsequent use of a local label local to
|
|
that global.
|
|
|
|
Fixed a seg-fault in the preprocessor (again) which happened when
|
|
you use a blank line as the first line of a multi-line macro
|
|
definition and then defined a label on the same line as a call to
|
|
that macro.
|
|
|
|
Fixed a stale-pointer bug in the handling of the NASM environment
|
|
variable. Thanks to Thomas McWilliams.
|
|
|
|
ELF had a hard limit on the number of sections which caused
|
|
segfaults when transgressed. Fixed.
|
|
|
|
Added ability for ndisasm to read from stdin by using `-' as the
|
|
filename.
|
|
|
|
ndisasm wasn't outputting the TO keyword. Fixed.
|
|
|
|
Fixed error cascade on bogus expression in %if - an error in
|
|
evaluation was causing the entire %if to be discarded, thus creating
|
|
trouble later when the %else or %endif was encountered.
|
|
|
|
Forward reference tracking was instruction-granular not operand-
|
|
granular, which was causing 286-specific code to be generated
|
|
needlessly on code of the form `shr word [forwardref],1'. Thanks to
|
|
Jim Hague for sending a patch.
|
|
|
|
All messages now appear on stdout, as sending them to stderr serves
|
|
no useful purpose other than to make redirection difficult.
|
|
|
|
Fixed the problem with EQUs pointing to an external symbol - this
|
|
now generates an error message.
|
|
|
|
Allowed multiple size prefixes to an operand, of which only the first
|
|
is taken into account.
|
|
|
|
Incorporated John Fine's changes, including fixes of a large number
|
|
of preprocessor bugs, some small problems in OBJ, and a reworking of
|
|
label handling to define labels before their line is assembled, rather
|
|
than after.
|
|
|
|
Reformatted a lot of the source code to be more readable. Included
|
|
'coding.txt' as a guideline for how to format code for contributors.
|
|
|
|
Stopped nested %reps causing a panic - they now cause a slightly more
|
|
friendly error message instead.
|
|
|
|
Fixed floating point constant problems (patch by Pedro Gimeno)
|
|
|
|
Fixed the return value of insn_size() not being checked for -1, indicating
|
|
an error.
|
|
|
|
Incorporated 3D now instructions.
|
|
|
|
Fixed the 'mov eax, eax + ebx' bug.
|
|
|
|
Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
|
|
|
|
Incorporated John Fine's command line parsing changes
|
|
|
|
Incorporated David Lindauer's OMF debug support
|
|
|
|
Made changes for LCC 4.0 support (__NASM_CDecl__, removed register size
|
|
specification warning when sizes agree).
|
|
|
|
Released NASM 0.98 Pre-release 1
|
|
|
|
|
|
0.97 released December 1997
|
|
---------------------------
|
|
|
|
This was entirely a bug-fix release to 0.96, which seems to have got
|
|
cursed. Silly me.
|
|
|
|
Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
|
|
fail. Caused by an error in the `MOV EAX,<segment>' support.
|
|
|
|
ndisasm hung at EOF when compiled with lcc on Linux because lcc on
|
|
Linux somehow breaks feof(). ndisasm now does not rely on feof().
|
|
|
|
A heading in the documentation was missing due to a markup error in
|
|
the indexing. Fixed.
|
|
|
|
Fixed failure to update all pointers on realloc() within extended-
|
|
operand code in parser.c. Was causing wrong behaviour and seg faults
|
|
on lines such as `dd 0.0,0.0,0.0,0.0,...'
|
|
|
|
Fixed a subtle preprocessor bug whereby invoking one multi-line
|
|
macro on the first line of the expansion of another, when the second
|
|
had been invoked with a label defined before it, didn't expand the
|
|
inner macro.
|
|
|
|
Added internal.doc back in to the distribution archives - it was
|
|
missing in 0.96 *blush*
|
|
|
|
Fixed bug causing 0.96 to be unable to assemble its own test files,
|
|
specifically objtest.asm. *blush again*
|
|
|
|
Fixed seg-faults and bogus error messages caused by mismatching
|
|
%rep and %endrep within multi-line macro definitions.
|
|
|
|
Fixed a problem with buffer overrun in OBJ, which was causing
|
|
corruption at ends of long PUBDEF records.
|
|
|
|
Separated DOS archives into main-program and documentation to reduce
|
|
download size.
|
|
|
|
|
|
0.96 released November 1997
|
|
---------------------------
|
|
|
|
Fixed a bug whereby, if `nasm sourcefile' would cause a filename
|
|
collision warning and put output into `nasm.out', then `nasm
|
|
sourcefile -o outputfile' still gave the warning even though the
|
|
`-o' was honoured.
|
|
|
|
Fixed name pollution under Digital UNIX: one of its header files
|
|
defined R_SP, which broke the enum in nasm.h.
|
|
|
|
Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
|
|
two-operand forms; NDISASM didn't recognise the longer register
|
|
forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
|
|
flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
|
|
size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
|
|
undocumented because the Intel Architecture reference documents
|
|
them.
|
|
|
|
Fixed a problem with the local-label mechanism, whereby strange
|
|
types of symbol (EQUs, auto-defined OBJ segment base symbols)
|
|
interfered with the `previous global label' value and screwed up
|
|
local labels.
|
|
|
|
Fixed a bug whereby the stub preprocessor didn't communicate with
|
|
the listing file generator, so that the -a and -l options in
|
|
conjunction would produce a useless listing file.
|
|
|
|
Merged `os2' object file format back into `obj', after discovering
|
|
that `obj' _also_ shouldn't have a link pass separator in a module
|
|
containing a non-trivial MODEND. Flat segments are now declared
|
|
using the FLAT attribute. `os2' is no longer a valid object format
|
|
name: use `obj'.
|
|
|
|
Removed the fixed-size temporary storage in the evaluator. Very very
|
|
long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
|
|
so) should now no longer crash NASM.
|
|
|
|
Fixed a bug involving segfaults on disassembly of MMX instructions,
|
|
by changing the meaning of one of the operand-type flags in nasm.h.
|
|
This may cause other apparently unrelated MMX problems; it needs to
|
|
be tested thoroughly.
|
|
|
|
Fixed some buffer overrun problems with large OBJ output files.
|
|
Thanks to DJ Delorie for the bug report and fix.
|
|
|
|
Made preprocess-only mode actually listen to the %line markers as it
|
|
prints them, so that it can report errors more sanely.
|
|
|
|
Re-designed the evaluator to keep more sensible track of expressions
|
|
involving forward references: can now cope with previously-nightmare
|
|
situations such as
|
|
mov ax,foo | bar
|
|
foo equ 1
|
|
bar equ 2
|
|
|
|
Added the ALIGN and ALIGNB standard macros.
|
|
|
|
Added PIC support in ELF: use of WRT to obtain the four extra
|
|
relocation types needed.
|
|
|
|
Added the ability for output file formats to define their own
|
|
extensions to the GLOBAL, COMMON and EXTERN directives.
|
|
|
|
Implemented common-variable alignment, and global-symbol type and
|
|
size declarations, in ELF.
|
|
|
|
Implemented NEAR and FAR keywords for common variables, plus
|
|
far-common element size specification, in OBJ.
|
|
|
|
Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
|
|
default WRT specification (either a segment or a group).
|
|
|
|
Transformed the Unix NASM archive into an auto-configuring package.
|
|
|
|
Added a sanity-check for people applying SEG to things which are
|
|
already segment bases: this previously went unnoticed by the SEG
|
|
processing and caused OBJ-driver panics later.
|
|
|
|
Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
|
|
type references: OBJ doesn't directly support dword-size segment
|
|
base fixups, but as long as the low two bytes of the constant term
|
|
are zero, a word-size fixup can be generated instead and it will
|
|
work.
|
|
|
|
Added the ability to specify sections' alignment requirements in
|
|
Win32 object files and pure binary files.
|
|
|
|
Added preprocess-time expression evaluation: the %assign (and
|
|
%iassign) directive and the bare %if (and %elif) conditional. Added
|
|
relational operators to the evaluator, for use only in %if
|
|
constructs: the standard relationals = < > <= >= <> (and C-like
|
|
synonyms == and !=) plus low-precedence logical operators &&, ^^ and
|
|
||.
|
|
|
|
Added a preprocessor repeat construct: %rep / %exitrep / %endrep.
|
|
|
|
Added the __FILE__ and __LINE__ standard macros.
|
|
|
|
Added a sanity check for number constants being greater than
|
|
0xFFFFFFFF. The warning can be disabled.
|
|
|
|
Added the %0 token whereby a variadic multi-line macro can tell how
|
|
many parameters it's been given in a specific invocation.
|
|
|
|
Added %rotate, allowing multi-line macro parameters to be cycled.
|
|
|
|
Added the `*' option for the maximum parameter count on multi-line
|
|
macros, allowing them to take arbitrarily many parameters.
|
|
|
|
Added the ability for the user-level forms of EXTERN, GLOBAL and
|
|
COMMON to take more than one argument.
|
|
|
|
Added the IMPORT and EXPORT directives in OBJ format, to deal with
|
|
Windows DLLs.
|
|
|
|
Added some more preprocessor %if constructs: %ifidn / %ifidni (exact
|
|
textual identity), and %ifid / %ifnum / %ifstr (token type testing).
|
|
|
|
Added the ability to distinguish SHL AX,1 (the 8086 version) from
|
|
SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
|
|
be 1).
|
|
|
|
Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
|
|
with PIC shared library features.
|
|
|
|
Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
|
|
FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
|
|
otherwise accepted standard. The previous behaviour, though it was a
|
|
deliberate feature, was a deliberate feature based on a
|
|
misunderstanding. Apologies for the inconvenience.
|
|
|
|
Improved the flexibility of ABSOLUTE: you can now give it an
|
|
expression rather than being restricted to a constant, and it can
|
|
take relocatable arguments as well.
|
|
|
|
Added the ability for a variable to be declared as EXTERN multiple
|
|
times, and the subsequent definitions are just ignored.
|
|
|
|
We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
|
|
alone on a line (without a following instruction).
|
|
|
|
Improved sanity checks on whether the arguments to EXTERN, GLOBAL
|
|
and COMMON are valid identifiers.
|
|
|
|
Added misc/exebin.mac to allow direct generation of .EXE files by
|
|
hacking up an EXE header using DB and DW; also added test/binexe.asm
|
|
to demonstrate the use of this. Thanks to Yann Guidon for
|
|
contributing the EXE header code.
|
|
|
|
ndisasm forgot to check whether the input file had been successfully
|
|
opened. Now it does. Doh!
|
|
|
|
Added the Cyrix extensions to the MMX instruction set.
|
|
|
|
Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
|
|
assembled differently. This is important since [ESI+EBP] and
|
|
[EBP+ESI] have different default base segment registers.
|
|
|
|
Added support for the PharLap OMF extension for 4096-byte segment
|
|
alignment.
|
|
|
|
|
|
0.95 released July 1997
|
|
-----------------------
|
|
|
|
Fixed yet another ELF bug. This one manifested if the user relied on
|
|
the default segment, and attempted to define global symbols without
|
|
first explicitly declaring the target segment.
|
|
|
|
Added makefiles (for NASM and the RDF tools) to build Win32 console
|
|
apps under Symantec C++. Donated by Mark Junker.
|
|
|
|
Added `macros.bas' and `insns.bas', QBasic versions of the Perl
|
|
scripts that convert `standard.mac' to `macros.c' and convert
|
|
`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
|
|
Junker.
|
|
|
|
Changed the diassembled forms of the conditional instructions so
|
|
that JB is now emitted as JC, and other similar changes. Suggested
|
|
list by Ulrich Doewich.
|
|
|
|
Added `@' to the list of valid characters to begin an identifier
|
|
with.
|
|
|
|
Documentary changes, notably the addition of the `Common Problems'
|
|
section in nasm.doc.
|
|
|
|
Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
|
|
|
|
Fixed a bug in perm_copy() in labels.c which was causing exceptions
|
|
in cleanup_labels() on some systems.
|
|
|
|
Positivity sanity check in TIMES argument changed from a warning to
|
|
an error following a further complaint.
|
|
|
|
Changed the acceptable limits on byte and word operands to allow
|
|
things like `~10111001b' to work.
|
|
|
|
Fixed a major problem in the preprocessor which caused seg-faults if
|
|
macro definitions contained blank lines or comment-only lines.
|
|
|
|
Fixed inadequate error checking on the commas separating the
|
|
arguments to `db', `dw' etc.
|
|
|
|
Fixed a crippling bug in the handling of macros with operand counts
|
|
defined with a `+' modifier.
|
|
|
|
Fixed a bug whereby object file formats which stored the input file
|
|
name in the output file (such as OBJ and COFF) weren't doing so
|
|
correctly when the output file name was specified on the command
|
|
line.
|
|
|
|
Removed [INC] and [INCLUDE] support for good, since they were
|
|
obsolete anyway.
|
|
|
|
Fixed a bug in OBJ which caused all fixups to be output in 16-bit
|
|
(old-format) FIXUPP records, rather than putting the 32-bit ones in
|
|
FIXUPP32 (new-format) records.
|
|
|
|
Added, tentatively, OS/2 object file support (as a minor variant on
|
|
OBJ).
|
|
|
|
Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
|
|
|
|
Removed a spurious second fclose() on the output file.
|
|
|
|
Added the `-s' command line option to redirect all messages which
|
|
would go to stderr (errors, help text) to stdout instead.
|
|
|
|
Added the `-w' command line option to selectively suppress some
|
|
classes of assembly warning messages.
|
|
|
|
Added the `-p' pre-include and `-d' pre-define command-line options.
|
|
|
|
Added an include file search path: the `-i' command line option.
|
|
|
|
Fixed a silly little preprocessor bug whereby starting a line with a
|
|
`%!' environment-variable reference caused an `unknown directive'
|
|
error.
|
|
|
|
Added the long-awaited listing file support: the `-l' command line
|
|
option.
|
|
|
|
Fixed a problem with OBJ format whereby, in the absence of any
|
|
explicit segment definition, non-global symbols declared in the
|
|
implicit default segment generated spurious EXTDEF records in the
|
|
output.
|
|
|
|
Added the NASM environment variable.
|
|
|
|
From this version forward, Win32 console-mode binaries will be
|
|
included in the DOS distribution in addition to the 16-bit binaries.
|
|
Added Makefile.vc for this purpose.
|
|
|
|
Added `return 0;' to test/objlink.c to prevent compiler warnings.
|
|
|
|
Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
|
|
|
|
Added an alternative memory-reference syntax in which prefixing an
|
|
operand with `&' is equivalent to enclosing it in square brackets,
|
|
at the request of Fox Cutter.
|
|
|
|
Errors in pass two now cause the program to return a non-zero error
|
|
code, which they didn't before.
|
|
|
|
Fixed the single-line macro cycle detection, which didn't work at
|
|
all on macros with no parameters (caused an infinite loop). Also
|
|
changed the behaviour of single-line macro cycle detection to work
|
|
like cpp, so that macros like `extrn' as given in the documentation
|
|
can be implemented.
|
|
|
|
Fixed the implementation of WRT, which was too restrictive in that
|
|
you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
|
|
a relocatable reference.
|
|
|
|
|
|
0.94 released April 1997
|
|
------------------------
|
|
|
|
Major item: added the macro processor.
|
|
|
|
Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
|
|
reorganised CMPXCHG instruction into early-486 and Pentium forms.
|
|
Thanks to Thobias Jones for the information.
|
|
|
|
Fixed two more stupid bugs in ELF, which were causing `ld' to
|
|
continue to seg-fault in a lot of non-trivial cases.
|
|
|
|
Fixed a seg-fault in the label manager.
|
|
|
|
Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
|
|
the only option for BCD loads/stores in any case.
|
|
|
|
Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
|
|
anyone bothers to provide it. Previously they complained unless no
|
|
keyword at all was present.
|
|
|
|
Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
|
|
vestige of a bug that I thought had been fixed in 0.92. This was
|
|
fixed, hopefully for good this time...
|
|
|
|
Another minor phase error (insofar as a phase error can _ever_ be
|
|
minor) fixed, this one occurring in code of the form
|
|
rol ax,forward_reference
|
|
forward_reference equ 1
|
|
|
|
The number supplied to TIMES is now sanity-checked for positivity,
|
|
and also may be greater than 64K (which previously didn't work on
|
|
16-bit systems).
|
|
|
|
Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
|
|
|
|
Added the INCBIN pseudo-opcode.
|
|
|
|
Due to the advent of the preprocessor, the [INCLUDE] and [INC]
|
|
directives have become obsolete. They are still supported in this
|
|
version, with a warning, but won't be in the next.
|
|
|
|
Fixed a bug in OBJ format, which caused incorrect object records to
|
|
be output when absolute labels were made global.
|
|
|
|
Updates to RDOFF subdirectory, and changes to outrdf.c.
|
|
|
|
|
|
0.93 released January 1997
|
|
--------------------------
|
|
|
|
This release went out in a great hurry after semi-crippling bugs
|
|
were found in 0.92.
|
|
|
|
Really _did_ fix the stack overflows this time. *blush*
|
|
|
|
Had problems with EA instruction sizes changing between passes, when
|
|
an offset contained a forward reference and so 4 bytes were
|
|
allocated for the offset in pass one; by pass two the symbol had
|
|
been defined and happened to be a small absolute value, so only 1
|
|
byte got allocated, causing instruction size mismatch between passes
|
|
and hence incorrect address calculations. Fixed.
|
|
|
|
Stupid bug in the revised ELF section generation fixed (associated
|
|
string-table section for .symtab was hard-coded as 7, even when this
|
|
didn't fit with the real section table). Was causing `ld' to
|
|
seg-fault under Linux.
|
|
|
|
Included a new Borland C makefile, Makefile.bc2, donated by Fox
|
|
Cutter <lmb@comtch.iea.com>.
|
|
|
|
|
|
0.92 released January 1997
|
|
--------------------------
|
|
|
|
The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
|
|
fixed. This also affected the LCC driver.
|
|
|
|
Fixed a bug regarding 32-bit effective addresses of the form
|
|
[other_register+ESP].
|
|
|
|
Documentary changes, notably documentation of the fact that Borland
|
|
Win32 compilers use `obj' rather than `win32' object format.
|
|
|
|
Fixed the COMENT record in OBJ files, which was formatted
|
|
incorrectly.
|
|
|
|
Fixed a bug causing segfaults in large RDF files.
|
|
|
|
OBJ format now strips initial periods from segment and group
|
|
definitions, in order to avoid complications with the local label
|
|
syntax.
|
|
|
|
Fixed a bug in disassembling far calls and jumps in NDISASM.
|
|
|
|
Added support for user-defined sections in COFF and ELF files.
|
|
|
|
Compiled the DOS binaries with a sensible amount of stack, to
|
|
prevent stack overflows on any arithmetic expression containing
|
|
parentheses.
|
|
|
|
Fixed a bug in handling of files that do not terminate in a newline.
|
|
|
|
|
|
0.91 released November 1996
|
|
---------------------------
|
|
|
|
Loads of bug fixes.
|
|
Support for RDF added.
|
|
Support for DBG debugging format added.
|
|
Support for 32-bit extensions to Microsoft OBJ format added.
|
|
Revised for Borland C: some variable names changed, makefile added.
|
|
LCC support revised to actually work.
|
|
JMP/CALL NEAR/FAR notation added.
|
|
`a16', `o16', `a32' and `o32' prefixes added.
|
|
Range checking on short jumps implemented.
|
|
MMX instruction support added.
|
|
Negative floating point constant support added.
|
|
Memory handling improved to bypass 64K barrier under DOS.
|
|
$ prefix to force treatment of reserved words as identifiers added.
|
|
Default-size mechanism for object formats added.
|
|
Compile-time configurability added.
|
|
`#', `@', `~' and `?' are now valid characters in labels.
|
|
`-e' and `-k' options in NDISASM added.
|
|
|
|
|
|
0.90 released October 1996
|
|
--------------------------
|
|
|
|
First release version. First support for object file output. Other
|
|
changes from previous version (0.3x) too numerous to document.
|