From 04156cd099ca15a9aa89d405b0ad967d3de564e6 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Mon, 14 Jul 2008 02:45:57 -0400 Subject: [PATCH] Move the revision history into the documentation Clumsily convert the revision history to nasmdoc format, so it can be included in the documentation as Appendix C. --- CHANGES | 1500 +---------------------------------------------- doc/Makefile.in | 10 +- doc/changes.src | 1727 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/nasmdoc.src | 4 + 4 files changed, 1738 insertions(+), 1503 deletions(-) rewrite CHANGES (100%) create mode 100644 doc/changes.src diff --git a/CHANGES b/CHANGES dissimilarity index 100% index 36462307..b89696f4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,1498 +1,2 @@ -2.04 ----- -* Sanitize macro handing in the %error directive. -* New %warning preprocessor directive. -* __utf16__ and __utf32__ operators to generate UTF-16 and UTF-32 - strings. -* Fix bug in case-insensitive matching when compiled on platforms that - don't use the "configure" script. Of the official release binaries, - that only affects the OS/2 binary. -* Correct the handling of nested %reps. -* Support for x87 packed BCD constants. -* New %warning directive to issue user-controlled warnings. -* New %strcat directive to join strings together. -* Correct the LTR instruction in 64-bit mode. -* Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode. - -2.03.01 -------- -* Fix buffer overflow in the listing module. -* Fix the handling of hexadecimal escape codes in `...` strings. -* The Postscript/PDF documentation has been reformatted. -* The -F option now implies -g. - -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 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 : - -* 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 . - -* 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 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,' to -fail. Caused by an error in the `MOV EAX,' 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,' -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 . - - -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. +The revision history has moved to the file doc/changes.src, and +is now included in the documentation as Appendix C. diff --git a/doc/Makefile.in b/doc/Makefile.in index a7d24d99..f704f03e 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -26,7 +26,7 @@ ACRODIST = @ACRODIST@ # Acrobat Distiller PSTOPDF = @PSTOPDF@ # BSD/MacOS X utility PS2PDF = @PS2PDF@ # Part of GhostScript -SRCS = nasmdoc.src +SRCS = nasmdoc.src inslist.src changes.src OUT = info html nasmdoc.txt nasmdoc.ps nasmdoc.pdf # exports @@ -43,18 +43,18 @@ inslist.src: inslist.pl ../insns.dat .PHONY: html html: html/nasmdoc0.html -html/nasmdoc0.html: nasmdoc.src rdsrc.pl inslist.src +html/nasmdoc0.html: $(SRCS) rdsrc.pl mkdir -p html $(PERL) $(srcdir)/rdsrc.pl html < $< mv -f *.html html -nasmdoc.dip: nasmdoc.src rdsrc.pl inslist.src +nasmdoc.dip: $(SRCS) rdsrc.pl $(PERL) $(srcdir)/rdsrc.pl dip < $< -nasmdoc.texi: nasmdoc.src rdsrc.pl inslist.src +nasmdoc.texi: $(SRCS) rdsrc.pl $(PERL) $(srcdir)/rdsrc.pl texi < $< -nasmdoc.txt: nasmdoc.src rdsrc.pl inslist.src +nasmdoc.txt: $(SRCS) rdsrc.pl $(PERL) $(srcdir)/rdsrc.pl txt < $< nasmdoc.ps: nasmdoc.dip nasmlogo.eps $(srcdir)/../version genpsdriver.pl \ diff --git a/doc/changes.src b/doc/changes.src new file mode 100644 index 00000000..029ae931 --- /dev/null +++ b/doc/changes.src @@ -0,0 +1,1727 @@ +\# +\# NASM revision history in nasmdoc format +\# + +\H{cl-2.xx} NASM 2 Series + +The NASM 2 series support x86-64, and is the production version of NASM +since 2007. + + +\S{cl-2.04} Version 2.04 + +\b Sanitize macro handing in the %error directive. + +\b New \c{%warning} preprocessor directive. + +\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32 + strings. + +\b Fix bug in case-insensitive matching when compiled on platforms that + don't use the \c{configure} script. Of the official release binaries, + that only affects the OS/2 binary. + +\b Correct the handling of nested %reps. + +\b Support for x87 packed BCD constants. + +\b New %warning directive to issue user-controlled warnings. + +\b New %strcat directive to join strings together. + +\b Correct the \c{LTR} instruction in 64-bit mode. + +\b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode. + + +\S{cl-2.03.01} Version 2.03.01 + +\b Fix buffer overflow in the listing module. + +\b Fix the handling of hexadecimal escape codes in `...` strings. + +\b The Postscript/PDF documentation has been reformatted. + +\b The \c{-F} option now implies \c{-g}. + + +\S{cl-2.03} Version 2.03 + +\b Add support for Intel AVX, CLMUL and FMA instructions, +including YMM registers. + +\b \c{dy}, \c{resy} and \c{yword} for 32-byte operands. + +\b Fix some SSE5 instructions. + +\b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions. + +\b Fix checking for critical expressions when the optimizer is enabled. + +\b Support the DWARF debugging format for ELF targets. + +\b Fix optimizations of signed bytes. + +\b Fix operation on bigendian machines. + +\b Fix buffer overflow in the preprocessor. + +\b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH). + +\b \c{%?} and \c{%??} to refer to the name of a macro itself. In particular, +\c{%idefine keyword $%?} can be used to make a keyword "disappear". + +\b New options for dependency generation: \c{-MD}, \c{-MF}, +\c{-MP}, \c{-MT}, \c{-MQ}. + +\b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN +reimplemented as a macro. + +\b \c{%include} now resolves macros in a sane manner. + +\b \c{%substr} can now be used to get other than one-character substrings. + +\b New type of character/string constants, using backquotes (\c{`...`}), +which support C-style escape sequences. + +\b \c{%defstr} and \c{%idefstr} to stringize macro definitions before +creation. + +\b Fix forward references used in \c{EQU} statements. + +\S{cl-2.02} Version 2.02 + + +\b Additional fixes for MMX operands with explicit \c{qword}, as well as + (hopefully) SSE operands with \c{oword}. + +\b Fix handling of truncated strings with \c{DO}. + +\b Fix segfaults due to memory overwrites when floating-point constants + were used. + +\b Fix segfaults due to missing include files. + +\b Fix OpenWatcom Makefiles for DOS and OS/2. + +\b Add autogenerated instruction list back into the documentation. + +\b ELF: Fix segfault when generating stabs, and no symbols have been + defined. + +\b ELF: Experimental support for DWARF debugging information. + +\b New compile date and time standard macros. + +\b %ifnum now returns true for negative numbers. + +\b New %iftoken test for a single token. + +\b New %ifempty test for empty expansion. + +\b Add support for the \c{XSAVE} instruction group. + +\b Makefile for Netware/gcc. + +\b Fix issue with some warnings getting emitted way too many times. + +\b Autogenerated instruction list added to the documentation. + +\S{cl-2.01} Version 2.01 + + +\b Fix the handling of MMX registers with explicit \c{qword} tags on + memory (broken in 2.00 due to 64-bit changes.) + +\b Fix the PREFETCH instructions. + +\b Fix the documentation. + +\b Fix debugging info when using \c{-f elf} +(backwards compatibility alias for \c{-f elf32}). + +\b Man pages for rdoff tools (from the Debian project.) + +\b ELF: handle large numbers of sections. + +\b Fix corrupt output when the optimizer runs out of passes. + + +\S{cl-2.00} Version 2.00 + +\b Added c99 data-type compliance. + +\b Added general x86-64 support. + +\b Added win64 (x86-64 COFF) output format. + +\b Added \c{__BITS__} standard macro. + +\b Renamed the \c{elf} output format to \c{elf32} for clarity. + +\b Added \c{elf64} and \c{macho} (MacOS X) output formats. + +\b Added Numeric constants in \c{dq} directive. + +\b Added \c{oword}, \c{do} and \c{reso} pseudo operands. + +\b Allow underscores in numbers. + +\b Added 8-, 16- and 128-bit floating-point formats. + +\b Added binary, octal and hexadecimal floating-point. + +\b Correct the generation of floating-point constants. + +\b Added floating-point option control. + +\b Added Infinity and NaN floating point support. + +\b Added ELF Symbol Visibility support. + +\b Added setting OSABI value in ELF header directive. + +\b Added Generate Makefile Dependencies option. + +\b Added Unlimited Optimization Passes option. + +\b Added \c{%IFN} and \c{%ELIFN} support. + +\b Added Logical Negation Operator. + +\b Enhanced Stack Relative Preprocessor Directives. + +\b Enhanced ELF Debug Formats. + +\b Enhanced Send Errors to a File option. + +\b Added SSSE3, SSE4.1, SSE4.2, SSE5 support. + +\b Added a large number of additional instructions. + +\b Significant performance improvements. + + +\H{cl-0.98.xx} NASM 0.98 Series + +The 0.98 series was the production versions of NASM from 1999 to 2007. + + +\S{cl-0.98.39} Version 0.98.39 + +\b fix buffer overflow + +\b fix outas86's \c{.bss} handling + +\b "make spotless" no longer deletes config.h.in. + +\b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300). + +\b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol. + +\S{cl-0.98.38} Version 0.98.38 + + +\b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify + \c{mkdep.pl} to be able to generate completely pathless dependencies, as + required by OpenWatcom wmake (it supports path searches, but not + explicit paths.) + +\b Fix the \c{STR} instruction. + +\b Fix the ELF output format, which was broken under certain + circumstances due to the addition of stabs support. + +\b Quick-fix Borland format debug-info for \c{-f obj} + +\b Fix for \c{%rep} with no arguments (#560568) + +\b Fix concatenation of preprocessor function call (#794686) + +\b Fix long label causes coredump (#677841) + +\b Use autoheader as well as autoconf to keep configure from generating + ridiculously long command lines. + +\b Make sure that all of the formats which support debugging output + actually will suppress debugging output when \c{-g} not specified. + +\S{cl-0.98.37} Version 0.98.37 + + +\b Paths given in \c{-I} switch searched for \c{incbin}-ed as + well as \c{%include}-ed files. + +\b Added stabs debugging for the ELF output format, patch from + Martin Wawro. + +\b Fix \c{output/outbin.c} to allow origin > 80000000h. + +\b Make \c{-U} switch work. + +\b Fix the use of relative offsets with explicit prefixes, e.g. +\c{a32 loop foo}. + +\b Remove \c{backslash()}. + +\b Fix the \c{SMSW} and \c{SLDT} instructions. + +\b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}. +If you mean the latter, please say so! :) + +\S{cl-0.98.36} Version 0.98.36 + + +\b Update rdoff - librarian/archiver - common rec - docs! + +\b Fix signed/unsigned problems. + +\b Fix \c{JMP FAR label} and \c{CALL FAR label}. + +\b Add new multisection support - map files - fix align bug + +\b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat + +\b \c{Q} or \c{O} suffixes indicate octal + +\b Support Prescott new instructions (PNI). + +\b Cyrix \c{XSTORE} instruction. + + +\S{cl-0.98.35} Version 0.98.35 + +\b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.) + +\b Fix dependencies and compiler warnings. + +\b Add "const" in a number of places. + +\b Add -X option to specify error reporting format (use -Xvc to + integrate with Microsoft Visual Studio.) + +\b Minor changes for code legibility. + +\b Drop use of tmpnam() in rdoff (security fix.) + + +\S{cl-0.98.34} Version 0.98.34 + +\b Correct additional address-size vs. operand-size confusions. + +\b Generate dependencies for all Makefiles automatically. + +\b 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. + +\b Correct some disassembler bugs related to redundant address-size prefixes. + Some work still remains in this area. + +\b Correctly generate an error for things like "SEG eax". + +\b Add the JMPE instruction, enabled by "CPU IA64". + +\b Correct compilation on newer gcc/glibc platforms. + +\b Issue an error on things like "jmp far eax". + + +\S{cl-0.98.33} Version 0.98.33 + +\b 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). + +\b New keyword "strict" to disable the optimization of specific + operands. + +\b Fix the handing of size overrides with JMP instructions + (instructions such as "jmp dword foo".) + +\b Fix the handling of "ABSOLUTE label", where "label" points into a + relocatable segment. + +\b Fix OBJ output format with lots of externs. + +\b More documentation updates. + +\b Add -Ov option to get verbose information about optimizations. + +\b Undo a braindead change which broke %elif directives. + +\b Makefile updates. + + +\S{cl-0.98.32} Version 0.98.32 + +\b Fix NASM crashing when %macro directives were left unterminated. + +\b Lots of documentation updates. + +\b Complete rewrite of the PostScript/PDF documentation generator. + +\b The MS Visual C++ Makefile was updated and corrected. + +\b Recognize .rodata as a standard section name in ELF. + +\b Fix some obsolete Perl4-isms in Perl scripts. + +\b Fix configure.in to work with autoconf 2.5x. + +\b Fix a couple of "make cleaner" misses. + +\b Make the normal "./configure && make" work with Cygwin. + + +\S{cl-0.98.31} Version 0.98.31 + +\b Correctly build in a separate object directory again. + +\b Derive all references to the version number from the version file. + +\b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros. + +\b Lots of Makefile updates and bug fixes. + +\b New %ifmacro directive to test for multiline macros. + +\b Documentation updates. + +\b Fixes for 16-bit OBJ format output. + +\b Changed the NASM environment variable to NASMENV. + + +\S{cl-0.98.30} Version 0.98.30 + +\b Changed doc files a lot: completely removed old READMExx and + Wishlist files, incorporating all information in CHANGES and TODO. + +\b I waited a long time to rename zoutieee.c to (original) outieee.c + +\b moved all output modules to output/ subdirectory. + +\b Added 'make strip' target to strip debug info from nasm & ndisasm. + +\b Added INSTALL file with installation instructions. + +\b Added -v option description to nasm man. + +\b Added dist makefile target to produce source distributions. + +\b 16-bit support for ELF output format (GNU extension, but useful.) + + +\S{cl-0.98.28} Version 0.98.28 + +\b 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. + + +\S{cl-0.98.26} Version 0.98.26 + +\b Reorganised files even better from 0.98.25alt + + +\S{cl-0.98.25alt} Version 0.98.25alt + +\b Prettified the source tree. Moved files to more reasonable places. + +\b Added findleak.pl script to misc/ directory. + +\b Attempted to fix doc. + + +\S{cl-0.98.25} Version 0.98.25 + +\b Line continuation character \c{\\}. + +\b Docs inadvertantly reverted - "dos packaging". + + +\S{cl-0.98.24p1} Version 0.98.24p1 + +\b FIXME: Someone, document this please. + + +\S{cl-0.98.24} Version 0.98.24 + +\b Documentation - Ndisasm doc added to Nasm.doc. + + +\S{cl-0.98.23} Version 0.98.23 + +\b Attempted to remove rdoff version1 + +\b Lino Mastrodomenico's patches to preproc.c (%$$ bug?). + + +\S{cl-0.98.22} Version 0.98.22 + +\b Update rdoff2 - attempt to remove v1. + + +\S{cl-0.98.21} Version 0.98.21 + +\b Optimization fixes. + + +\S{cl-0.98.20} Version 0.98.20 + +\b Optimization fixes. + + +\S{cl-0.98.19} Version 0.98.19 + +\b H. J. Lu's patch back out. + + +\S{cl-0.98.18} Version 0.98.18 + +\b Added ".rdata" to "-f win32". + + +\S{cl-0.98.17} Version 0.98.17 + +\b H. J. Lu's "bogus elf" patch. (Red Hat problem?) + + +\S{cl-0.98.16} Version 0.98.16 + +\b Fix whitespace before "[section ..." bug. + + +\S{cl-0.98.15} Version 0.98.15 + +\b Rdoff changes (?). + +\b Fix fixes to memory leaks. + + +\S{cl-0.98.14} Version 0.98.14 + +\b Fix memory leaks. + + +\S{cl-0.98.13} Version 0.98.13 + +\b There was no 0.98.13 + + +\S{cl-0.98.12} Version 0.98.12 + +\b Update optimization (new function of "-O1") + +\b Changes to test/bintest.asm (?). + + +\S{cl-0.98.11} Version 0.98.11 + +\b Optimization changes. + +\b Ndisasm fixed. + + +\S{cl-0.98.10} Version 0.98.10 + +\b There was no 0.98.10 + + +\S{cl-0.98.09} Version 0.98.09 + +\b Add multiple sections support to "-f bin". + +\b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15. + +\b Add "-v" as an alias to the "-r" switch. + +\b Remove "#ifdef" from Tasm compatibility options. + +\b Remove redundant size-overrides on "mov ds, ex", etc. + +\b Fixes to SSE2, other insns.dat (?). + +\b Enable uppercase "I" and "P" switches. + +\b Case insinsitive "seg" and "wrt". + +\b Update install.sh (?). + +\b Allocate tokens in blocks. + +\b Improve "invalid effective address" messages. + + +\S{cl-0.98.08} Version 0.98.08 + +\b Add "%strlen" and "%substr" macro operators + +\b Fixed broken c16.mac. + +\b Unterminated string error reported. + +\b Fixed bugs as per 0.98bf + + +\S{cl-0.98.09b with John Coffman patches released 28-Oct-2001} Version 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 + +\b 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. + +\b 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). + +\b 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 + + +\S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01 + +\b 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 + + +\b Cosmetic modifications to nasm.c, nasm.h, + AUTHORS, MODIFIED + + +\S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01 + + +\b - Add "metalbrain"s jecxz bug fix in insns.dat + - alter nasmdoc.src to match - version "0.98.06f" + + +\S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01 + + +\b Removed the "outforms.h" file - it appears to be + someone's old backup of "outform.h". version "0.98.06e" + +01/09/01 + +\b 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... + +\b Nelson Rush resigns from the group. Big thanks to Nelson for + his leadership and enthusiasm in getting these changes + incorporated into Nasm! + +\b fbk - [list +], [list -] directives - ineptly implemented, should + be re-written or removed, perhaps. + +\b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format + as well - testing might be desirable... + +08/07/00 + +\b James Seter - -postfix, -prefix command line switches. + +\b Yuri Zaporogets - rdoff utility changes. + + +\S{cl-0.98p1} Version 0.98p1 + +\b GAS-like palign (Panos Minos) + +\b FIXME: Someone, fill this in with details + + +\S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed) + +\b Fixed - elf and aoutb bug - shared libraries + - multiple "%include" bug in "-f obj" + - jcxz, jecxz bug + - unrecognized option bug in ndisasm + +\S{cl-0.98.03 with John Coffman's changes released 27-Jul-2000} Version 0.98.03 with John Coffman's changes released 27-Jul-2000 + +\b 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. + +\b 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. + +\b 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'. + +\b 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) + +\b 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) + + +\S{cl-0.98.03} Version 0.98.03 + +"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for +historical reasons: 0.98.02 was trashed." --John Coffman +, 27-Jul-2000 + +\b Kendall Bennett's SciTech MGL changes + +\b Note that you must define "TASM_COMPAT" at compile-time +to get the Tasm Ideal Mode compatibility. + +\b 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. + +\b standard.mac, macros.c: Added macros to ignore TASM directives before +first include + +\b nasm.h: Added extern declaration for tasm_compatible_mode + +\b nasm.c: Added global variable tasm_compatible_mode + +\b Added command line switch for TASM compatible mode (-t) + +\b Changed version command line to reflect when compiled with TASM additions + +\b Added response file processing to allow all arguments on a single +line (response file is @resp rather than -@resp for NASM format). + +\b labels.c: Changes islocal() macro to support TASM style @@local labels. + +\b Added islocalchar() macro to support TASM style @@local labels. + +\b parser.c: Added support for TASM style memory references (ie: mov +[DWORD eax],10 rather than the NASM style mov DWORD [eax],10). + +\b preproc.c: Added new directives, %arg, %local, %stacksize to directives +table + +\b Added support for TASM style directives without a leading % symbol. + +\b Integrated a block of changes from Andrew Zabolotny : + +\b 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: + +\c %assign ofs 0 +\c +\c %macro arg 1 +\c %xdefine %1 dword [esp+ofs] +\c %assign ofs ofs+4 +\c %endmacro + +\b 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: + +\c %macro abc 1 +\c %define %1 hello +\c %endm +\c +\c abc %$here +\c %$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. + +\b Added a check for "cstk" in smacro_defined() before calling get_ctx() - + this allows for things like: + +\c %ifdef %$abc +\c %endif + + to work without warnings even in no context. + +\b 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. + +\b 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. + +\b Added expansion of string that is output by %error directive. Now you + can do things like: + +\c %define hello(x) Hello, x! +\c +\c %define %$name andy +\c %error "hello(%$name)" + + Same happened with %include directive. + +\b 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 + +\c %define %$abc hello +\c %define __%$abc goodbye +\c __%$abc + + would produce "incorrect" output: last line will expand to + +\c hello goodbyehello + + Not quite what you expected, eh? :-) The answer is that preprocessor + treats the %define construct as if it would be + +\c %define __ %$abc goodbye + + (note the white space between __ and %$abc). After my "fix" it + will "correctly" expand into + +\c 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 + +\b 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). + +\b 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: + +\c [WARNING macro-selfref] +\c +\c %macro push 1-* +\c %rep %0 +\c push %1 +\c %rotate 1 +\c %endrep +\c %endmacro +\c +\c 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). + +\b 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. + +\b Added the %+ operator in single-line macros for concatenating two + identifiers. Usage example: + +\c %define _myfunc _otherfunc +\c %define cextern(x) _ %+ x +\c cextern (myfunc) + + After first expansion, third line will become "_myfunc". After this + expansion is performed again so it becomes "_otherunc". + +\b Now if preprocessor is in a non-emitting state, no warning or error + will be emitted. Example: + +\c %if 1 +\c mov eax,ebx +\c %else +\c put anything you want between these two brackets, +\c even macro-parameter references %1 or local +\c labels %$zz or macro-local labels %%zz - no +\c warning will be emitted. +\c %endif + +\b Context-local variables on expansion as a last resort are looked up + in outer contexts. For example, the following piece: + +\c %push outer +\c %define %$a [esp] +\c +\c %push inner +\c %$a +\c %pop +\c %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: + +\c %define %$arg1 [esp+4] +\c test eax,eax +\c if nz +\c mov eax,%$arg1 +\c 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. + +\b Fixed memory leak in %undef. The origline wasn't freed before + exiting on success. + +\b Fixed trap in preprocessor when line expanded to empty set of tokens. + This happens, for example, in the following case: + +\c #define SOMETHING +\c SOMETHING + + +\S{cl-0.98} Version 0.98 + +All changes since NASM 0.98p3 have been produced by H. Peter Anvin . + +\b The documentation comment delimiter is \# not #. + +\b Allow EQU definitions to refer to external labels; reported by + Pedro Gimeno. + +\b Re-enable support for RDOFF v1; reported by Pedro Gimeno. + +\b Updated License file per OK from Simon and Julian. + + +\S{cl-0.98p9} Version 0.98p9 + +\b Update documentation (although the instruction set reference will + have to wait; I don't want to hold up the 0.98 release for it.) + +\b 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. + +\b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by + Stefan Hoffmeister. + +\b Resurrect the -s option, which was removed when changing the + diagnostic output to stdout. + + +\S{cl-0.98p8} Version 0.98p8 + +\b Fix for "DB" when NASM is running on a bigendian machine. + +\b Invoke insns.pl once for each output script, making Makefile.in + legal for "make -j". + +\b Improve the Unix configure-based makefiles to make package + creation easier. + +\b Included an RPM .spec file for building RPM (RedHat Package Manager) + packages on Linux or Unix systems. + +\b Fix Makefile dependency problems. + +\b Change src/rdsrc.pl to include sectioning information in info + output; required for install-info to work. + +\b Updated the RDOFF distribution to version 2 from Jules; minor + massaging to make it compile in my environment. + +\b Split doc files that can be built by anyone with a Perl interpreter off + into a separate archive. + +\b "Dress rehearsal" release! + + +\S{cl-0.98p7} Version 0.98p7 + +\b Fixed opcodes with a third byte-sized immediate argument to not + complain if given "byte" on the immediate. + +\b Allow %undef to remove single-line macros with arguments. This + matches the behaviour of #undef in the C preprocessor. + +\b 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. + +\b Minor cleanups. + +\b Went through the list of Katmai instructions and hopefully fixed the + (rather few) mistakes in it. + +\b (Hopefully) fixed a number of disassembler bugs related to ambiguous + instructions (disambiguated by -p) and SSE instructions with REP. + +\b Fix for bug reported by Mark Junger: "call dword 0x12345678" should + work and may add an OSP (affected CALL, JMP, Jcc). + +\b Fix for environments when "stderr" isn't a compile-time constant. + + +\S{cl-0.98p6} Version 0.98p6 + + +\b 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. + +\b 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. + +\b Recognize "idt" or "centaur" for the -p option to ndisasm. + +\b Changed error messages back to stderr where they belong, but add an + -E option to redirect them elsewhere (the DOS shell cannot redirect + stderr.) + +\b -M option to generate Makefile dependencies (based on code from Alex + Verstak.) + +\b %undef preprocessor directive, and -u option, that undefines a + single-line macro. + +\b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from + Chuck Crayne. + +\b Various minor bugfixes (reported by): + - Dangling %s in preproc.c (Martin Junker) + +\b 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. + +\b Updated the License file per agreement with Simon and Jules to + include a GPL distribution clause. + + +\S{cl-0.98p3.7} Version 0.98p3.7 + +\b (Hopefully) fixed the canned Makefiles to include the outrdf2 and + zoutieee modules. + +\b Renamed changes.asm to changed.asm. + + +\S{cl-0.98p3.6} Version 0.98p3.6 + +\b 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. + + +\S{cl-0.98p3.5} Version 0.98p3.5 + +\b 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. + +\b 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. + +\b 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. + +\b Added AMD-only SYSCALL and SYSRET instructions. + +\b Make SSE actually work, and add new Katmai MMX instructions. + +\b Added a -p (preferred vendor) option to ndisasm so that it can + distinguish e.g. Cyrix opcodes also used in SSE. For example: + +\c ndisasm -p cyrix aliased.bin +\c 00000000 670F514310 paddsiw mm0,[ebx+0x10] +\c 00000005 670F514320 paddsiw mm0,[ebx+0x20] +\c ndisasm -p intel aliased.bin +\c 00000000 670F514310 sqrtps xmm0,[ebx+0x10] +\c 00000005 670F514320 sqrtps xmm0,[ebx+0x20] + +\b Added a bunch of Cyrix-specific instructions. + + +\S{cl-0.98p3.4} Version 0.98p3.4 + +\b 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. + +\b DOS DJGPP+"Opus Make" Makefile from John S. Fine. + +\b changes.asm changes from John S. Fine. + + +\S{cl-0.98p3.3} Version 0.98p3.3 + +\b Patch from Conan Brink to allow nesting of %rep directives. + +\b 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. + +\b Updated changes.asm to include the latest changes. + +\b Tried to clean up the 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. + +\b We would silently generate broken tools if insns.dat wasn't sorted + properly. Change insns.pl so that the order doesn't matter. + +\b 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". + + +\S{cl-0.98p3.2} Version 0.98p3.2 + +\b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see + http://www.csoft.net/cz/johnfine/ + +\b 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. + +\b Removed BASIC programs from distribution. Get a Perl interpreter + instead (see below.) + +\b Calling this "pre-release 3.2" rather than "p3-hpa2" because of + John's contributions. + +\b 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". + + +\S{cl-0.98p3-hpa} Version 0.98p3-hpa + +\b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully + buildable version for Unix systems (Makefile.in updates, etc.) + +\b 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. + +\b 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.) + +\b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10 + characters long. Now MAX_SYMBOL is derived from insns.dat. + +\b 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 + \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}. + + +\S{cl-0.98p3} Version 0.98 pre-release 3 + +\b added response file support, improved command line handling, new layout +help screen + +\b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff +related bugs, updated Wishlist; 0.98 Prerelease 3. + + +\S{cl-0.98p2} Version 0.98 pre-release 2 + +\b 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 + + +\S{cl-0.98p1} Version 0.98 pre-release 1 + +\b Fixed a bug whereby STRUC didn't work at all in RDF. + +\b Fixed a problem with group specification in PUBDEFs in OBJ. + +\b Improved ease of adding new output formats. Contribution due to +Fox Cutter. + +\b 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. + +\b 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. + +\b 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. + +\b Fixed a stale-pointer bug in the handling of the NASM environment +variable. Thanks to Thomas McWilliams. + +\b ELF had a hard limit on the number of sections which caused +segfaults when transgressed. Fixed. + +\b Added ability for ndisasm to read from stdin by using `-' as the +filename. + +\b ndisasm wasn't outputting the TO keyword. Fixed. + +\b 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. + +\b 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. + +\b All messages now appear on stdout, as sending them to stderr serves +no useful purpose other than to make redirection difficult. + +\b Fixed the problem with EQUs pointing to an external symbol - this +now generates an error message. + +\b Allowed multiple size prefixes to an operand, of which only the first +is taken into account. + +\b 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. + +\b Reformatted a lot of the source code to be more readable. Included +'coding.txt' as a guideline for how to format code for contributors. + +\b Stopped nested %reps causing a panic - they now cause a slightly more +friendly error message instead. + +\b Fixed floating point constant problems (patch by Pedro Gimeno) + +\b Fixed the return value of insn_size() not being checked for -1, indicating +an error. + +\b Incorporated 3Dnow! instructions. + +\b Fixed the 'mov eax, eax + ebx' bug. + +\b Fixed the GLOBAL EQU bug in ELF. Released developers release 3. + +\b Incorporated John Fine's command line parsing changes + +\b Incorporated David Lindauer's OMF debug support + +\b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size +specification warning when sizes agree). + + +\H{cl-0.9x} NASM 0.9 Series + +Revisions before 0.98. + + +\S{cl-0.97} Version 0.97 released December 1997 + +\b This was entirely a bug-fix release to 0.96, which seems to have got +cursed. Silly me. + +\b Fixed stupid mistake in OBJ which caused `MOV EAX,' to +fail. Caused by an error in the `MOV EAX,' support. + +\b ndisasm hung at EOF when compiled with lcc on Linux because lcc on +Linux somehow breaks feof(). ndisasm now does not rely on feof(). + +\b A heading in the documentation was missing due to a markup error in +the indexing. Fixed. + +\b 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,...' + +\b 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. + +\b Added internal.doc back in to the distribution archives - it was +missing in 0.96 *blush* + +\b Fixed bug causing 0.96 to be unable to assemble its own test files, +specifically objtest.asm. *blush again* + +\b Fixed seg-faults and bogus error messages caused by mismatching +%rep and %endrep within multi-line macro definitions. + +\b Fixed a problem with buffer overrun in OBJ, which was causing +corruption at ends of long PUBDEF records. + +\b Separated DOS archives into main-program and documentation to reduce +download size. + + +\S{cl-0.96} Version 0.96 released November 1997 + +\b 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. + +\b 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. + +\b 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. + +\b 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. + +\b 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'. + +\b 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. + +\b 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. + +\b Fixed some buffer overrun problems with large OBJ output files. +Thanks to DJ Delorie for the bug report and fix. + +\b Made preprocess-only mode actually listen to the %line markers as it +prints them, so that it can report errors more sanely. + +\b Re-designed the evaluator to keep more sensible track of expressions +involving forward references: can now cope with previously-nightmare +situations such as: + +\c mov ax,foo | bar +\c foo equ 1 +\c bar equ 2 + +\b Added the ALIGN and ALIGNB standard macros. + +\b Added PIC support in ELF: use of WRT to obtain the four extra +relocation types needed. + +\b Added the ability for output file formats to define their own +extensions to the GLOBAL, COMMON and EXTERN directives. + +\b Implemented common-variable alignment, and global-symbol type and +size declarations, in ELF. + +\b Implemented NEAR and FAR keywords for common variables, plus +far-common element size specification, in OBJ. + +\b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a +default WRT specification (either a segment or a group). + +\b Transformed the Unix NASM archive into an auto-configuring package. + +\b 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. + +\b Added the ability, in OBJ format, to deal with `MOV EAX,' +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. + +\b Added the ability to specify sections' alignment requirements in +Win32 object files and pure binary files. + +\b 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 +||. + +\b Added a preprocessor repeat construct: %rep / %exitrep / %endrep. + +\b Added the __FILE__ and __LINE__ standard macros. + +\b Added a sanity check for number constants being greater than +0xFFFFFFFF. The warning can be disabled. + +\b Added the %0 token whereby a variadic multi-line macro can tell how +many parameters it's been given in a specific invocation. + +\b Added \c{%rotate}, allowing multi-line macro parameters to be cycled. + +\b Added the `*' option for the maximum parameter count on multi-line +macros, allowing them to take arbitrarily many parameters. + +\b Added the ability for the user-level forms of EXTERN, GLOBAL and +COMMON to take more than one argument. + +\b Added the IMPORT and EXPORT directives in OBJ format, to deal with +Windows DLLs. + +\b Added some more preprocessor %if constructs: %ifidn / %ifidni (exact +textual identity), and %ifid / %ifnum / %ifstr (token type testing). + +\b 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). + +\b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete +with PIC shared library features. + +\b 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. + +\b 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. + +\b Added the ability for a variable to be declared as EXTERN multiple +times, and the subsequent definitions are just ignored. + +\b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be +alone on a line (without a following instruction). + +\b Improved sanity checks on whether the arguments to EXTERN, GLOBAL +and COMMON are valid identifiers. + +\b 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. + +\b ndisasm forgot to check whether the input file had been successfully +opened. Now it does. Doh! + +\b Added the Cyrix extensions to the MMX instruction set. + +\b 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. + +\b Added support for the PharLap OMF extension for 4096-byte segment +alignment. + + +\S{cl-0.95 released July 1997} Version 0.95 released July 1997 + +\b 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. + +\b Added makefiles (for NASM and the RDF tools) to build Win32 console +apps under Symantec C++. Donated by Mark Junker. + +\b 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. + +\b 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. + +\b Added `@' to the list of valid characters to begin an identifier +with. + +\b Documentary changes, notably the addition of the `Common Problems' +section in nasm.doc. + +\b Fixed a bug relating to 32-bit PC-relative fixups in OBJ. + +\b Fixed a bug in perm_copy() in labels.c which was causing exceptions +in cleanup_labels() on some systems. + +\b Positivity sanity check in TIMES argument changed from a warning to +an error following a further complaint. + +\b Changed the acceptable limits on byte and word operands to allow +things like `~10111001b' to work. + +\b Fixed a major problem in the preprocessor which caused seg-faults if +macro definitions contained blank lines or comment-only lines. + +\b Fixed inadequate error checking on the commas separating the +arguments to `db', `dw' etc. + +\b Fixed a crippling bug in the handling of macros with operand counts +defined with a `+' modifier. + +\b 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. + +\b Removed [INC] and [INCLUDE] support for good, since they were +obsolete anyway. + +\b 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. + +\b Added, tentatively, OS/2 object file support (as a minor variant on +OBJ). + +\b Updates to Fox Cutter's Borland C makefile, Makefile.bc2. + +\b Removed a spurious second fclose() on the output file. + +\b Added the `-s' command line option to redirect all messages which +would go to stderr (errors, help text) to stdout instead. + +\b Added the `-w' command line option to selectively suppress some +classes of assembly warning messages. + +\b Added the `-p' pre-include and `-d' pre-define command-line options. + +\b Added an include file search path: the `-i' command line option. + +\b Fixed a silly little preprocessor bug whereby starting a line with a +`%!' environment-variable reference caused an `unknown directive' +error. + +\b Added the long-awaited listing file support: the `-l' command line +option. + +\b 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. + +\b Added the NASM environment variable. + +\b 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. + +\b Added `return 0;' to test/objlink.c to prevent compiler warnings. + +\b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines. + +\b 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. + +\b Errors in pass two now cause the program to return a non-zero error +code, which they didn't before. + +\b 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. + +\b 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. + + +\S{cl-0.94 released April 1997} Version 0.94 released April 1997 + + +\b Major item: added the macro processor. + +\b 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. + +\b Fixed two more stupid bugs in ELF, which were causing `ld' to +continue to seg-fault in a lot of non-trivial cases. + +\b Fixed a seg-fault in the label manager. + +\b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is +the only option for BCD loads/stores in any case. + +\b 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. + +\b 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... + +\b Another minor phase error (insofar as a phase error can _ever_ be +minor) fixed, this one occurring in code of the form + +\c rol ax,forward_reference +\c forward_reference equ 1 + +\b 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). + +\b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr. + +\b Added the INCBIN pseudo-opcode. + +\b 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. + +\b Fixed a bug in OBJ format, which caused incorrect object records to +be output when absolute labels were made global. + +\b Updates to RDOFF subdirectory, and changes to outrdf.c. + + +\S{cl-0.93 released January 1997} Version 0.93 released January 1997 + +This release went out in a great hurry after semi-crippling bugs +were found in 0.92. + +\b Really \e{did} fix the stack overflows this time. *blush* + +\b 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. + +\b 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. + +\b Included a new Borland C makefile, Makefile.bc2, donated by Fox +Cutter . + + +\S{cl-0.92 released January 1997} Version 0.92 released January 1997 + +\b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was +fixed. This also affected the LCC driver. + +\b Fixed a bug regarding 32-bit effective addresses of the form +\c{[other_register+ESP]}. + +\b Documentary changes, notably documentation of the fact that Borland +Win32 compilers use `obj' rather than `win32' object format. + +\b Fixed the COMENT record in OBJ files, which was formatted +incorrectly. + +\b Fixed a bug causing segfaults in large RDF files. + +\b OBJ format now strips initial periods from segment and group +definitions, in order to avoid complications with the local label +syntax. + +\b Fixed a bug in disassembling far calls and jumps in NDISASM. + +\b Added support for user-defined sections in COFF and ELF files. + +\b Compiled the DOS binaries with a sensible amount of stack, to +prevent stack overflows on any arithmetic expression containing +parentheses. + +\b Fixed a bug in handling of files that do not terminate in a newline. + + +\S{cl-0.91 released November 1996} Version 0.91 released November 1996 + +\b Loads of bug fixes. + +\b Support for RDF added. + +\b Support for DBG debugging format added. + +\b Support for 32-bit extensions to Microsoft OBJ format added. + +\b Revised for Borland C: some variable names changed, makefile added. + +\b LCC support revised to actually work. + +\b JMP/CALL NEAR/FAR notation added. + +\b `a16', `o16', `a32' and `o32' prefixes added. + +\b Range checking on short jumps implemented. + +\b MMX instruction support added. + +\b Negative floating point constant support added. + +\b Memory handling improved to bypass 64K barrier under DOS. + +\b \c{$} prefix to force treatment of reserved words as identifiers added. + +\b Default-size mechanism for object formats added. + +\b Compile-time configurability added. + +\b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels. + +\b \c{-e} and \c{-k} options in NDISASM added. + + +\S{cl-0.90 released October 1996} Version 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. diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src index bd1a4b9c..f75588db 100644 --- a/doc/nasmdoc.src +++ b/doc/nasmdoc.src @@ -7607,3 +7607,7 @@ column shows the processor type in which the instruction was introduced and, \& inslist.src +\A{changelog} \i{NASM Version History} + +\& changes.src + -- 2.11.4.GIT