diff options
author | H. Peter Anvin <hpa@zytor.com> | 2008-07-14 02:45:57 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-07-14 02:45:57 -0400 |
commit | 04156cd099ca15a9aa89d405b0ad967d3de564e6 (patch) | |
tree | 993ddc22472f975bdeaac56dc99b9a2b545b3170 /doc | |
parent | cf6b43476e182672b04598da33f084b6e1ac2de0 (diff) | |
download | nasm-04156cd099ca15a9aa89d405b0ad967d3de564e6.tar.gz nasm-04156cd099ca15a9aa89d405b0ad967d3de564e6.tar.bz2 nasm-04156cd099ca15a9aa89d405b0ad967d3de564e6.zip |
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.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/Makefile.in | 10 | ||||
-rw-r--r-- | doc/changes.src | 1727 | ||||
-rw-r--r-- | doc/nasmdoc.src | 4 |
3 files changed, 1736 insertions, 5 deletions
diff --git a/doc/Makefile.in b/doc/Makefile.in index a7d24d9..f704f03 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 0000000..029ae93 --- /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 +<johninsd@san.rr.com>, 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 <bit@eltech.ru>: + +\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 <hpa@zytor.com>. + +\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 <CR>s that had snuck in from a DOS/Windows + environment into my Unix environment, and try to make sure than + DOS/Windows users get them back. + +\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,<constant>' to +fail. Caused by an error in the `MOV EAX,<segment>' 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,<segment>' +type references: OBJ doesn't directly support dword-size segment +base fixups, but as long as the low two bytes of the constant term +are zero, a word-size fixup can be generated instead and it will +work. + +\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 <lmb@comtch.iea.com>. + + +\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 bd1a4b9..f75588d 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 + |