summaryrefslogtreecommitdiff
path: root/CHANGES
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGES')
-rw-r--r--CHANGES1237
1 files changed, 1237 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..a10592c
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,1237 @@
+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.
+
+
+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.
+* FIXME: Frank, document this please.
+
+
+0.98.25
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.24p1
+---------
+
+* FIXME: Frank, document this please.
+
+
+0.98.24
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.23
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.22
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.21
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.20
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.19
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.18
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.17
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.16
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.14
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.12
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.09
+-------
+
+* FIXME: Frank, document this please.
+
+
+0.98.08
+-------
+
+* FIXME: Frank, document this please.
+
+
+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
+-------------------------
+
+* fbk - 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
+--------
+
+* fbk - cosmetic modifications to nasm.c, nasm.h,
+ AUTHORS, MODIFIED
+
+
+0.98.06f released 01/18/01
+--------------------------
+
+* fbk - "metalbrain"s jecxz bug fix in insns.dat
+ - alter nasmdoc.src to match - version "0.98.06f"
+
+
+0.98.06e released 01/09/01
+--------------------------
+
+* fbk - 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: Frank, fill this in with details
+
+
+0.98bf (bug-fixed, aka brain-fuck)
+----------------------------------
+
+* FIXME: Frank, fill this in
+
+
+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.