summaryrefslogtreecommitdiff
path: root/doc/html/nasmdocc.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/html/nasmdocc.html')
-rw-r--r--doc/html/nasmdocc.html1468
1 files changed, 1468 insertions, 0 deletions
diff --git a/doc/html/nasmdocc.html b/doc/html/nasmdocc.html
new file mode 100644
index 0000000..b7ec3b2
--- /dev/null
+++ b/doc/html/nasmdocc.html
@@ -0,0 +1,1468 @@
+<html><head><title>NASM Manual</title></head>
+<body><h1 align=center>The Netwide Assembler: NASM</h1>
+
+<p align=center><a href="nasmdocb.html">Previous Chapter</a> |
+<a href="nasmdoc0.html">Contents</a> |
+<a href="nasmdoci.html">Index</a>
+<h2><a name="appendix-C">Appendix C: NASM Version History</a></h2>
+<h3><a name="section-C.1">C.1 NASM 2 Series</a></h3>
+<p>The NASM 2 series support x86-64, and is the production version of NASM
+since 2007.
+<h4><a name="section-C.1.1">C.1.1 Version 2.08</a></h4>
+<ul>
+<li>A number of enhancements/fixes in macros area.
+<li>Support for arbitrarily terminating macro expansions
+<code><nobr>%exitmacro</nobr></code>. See
+<a href="nasmdoc4.html#section-4.3.12">section 4.3.12</a>.
+<li>Support for recursive macro expansion
+<code><nobr>%rmacro/irmacro</nobr></code>. See
+<a href="nasmdoc4.html#section-4.3.1">section 4.3.1</a>.
+<li>Support for converting strings to tokens. See
+<a href="nasmdoc4.html#section-4.1.9">section 4.1.9</a>.
+<li>Fuzzy operand size logic introduced.
+<li>Fix COFF stack overrun on too long export identifiers.
+<li>Fix Macho-O alignment bug.
+<li>Fix crashes with -fwin32 on file with many exports.
+<li>Fix stack overrun for too long [DEBUG id].
+<li>Fix incorrect sbyte usage in IMUL (hit only if optimization flag
+passed).
+<li>Append ending token for <code><nobr>.stabs</nobr></code> records in the
+ELF output format.
+<li>New NSIS script which uses ModernUI and MultiUser approach.
+<li>Visual Studio 2008 NASM integration (rules file).
+<li>Warn a user if a constant is too long (and as result will be stripped).
+<li>The obsoleted pre-XOP AMD SSE5 instruction set which was never
+actualized was removed.
+<li>Fix stack overrun on too long error file name passed from the command
+line.
+<li>Bind symbols to the .text section by default (ie in case if SECTION
+directive was omitted) in the ELF output format.
+<li>Fix sync points array index wrapping.
+<li>A few fixes for FMA4 and XOP instruction templates.
+<li>Add AMD Lightweight Profiling (LWP) instructions.
+</ul>
+<h4><a name="section-C.1.2">C.1.2 Version 2.07</a></h4>
+<ul>
+<li>NASM is now under the 2-clause BSD license. See
+<a href="nasmdoc1.html#section-1.1.2">section 1.1.2</a>.
+<li>Fix the section type for the <code><nobr>.strtab</nobr></code> section
+in the <code><nobr>elf64</nobr></code> output format.
+<li>Fix the handling of <code><nobr>COMMON</nobr></code> directives in the
+<code><nobr>obj</nobr></code> output format.
+<li>New <code><nobr>ith</nobr></code> and <code><nobr>srec</nobr></code>
+output formats; these are variants of the <code><nobr>bin</nobr></code>
+output format which output Intel hex and Motorola S-records, respectively.
+See <a href="nasmdoc7.html#section-7.2">section 7.2</a> and
+<a href="nasmdoc7.html#section-7.3">section 7.3</a>.
+<li><code><nobr>rdf2ihx</nobr></code> replaced with an enhanced
+<code><nobr>rdf2bin</nobr></code>, which can output binary, COM, Intel hex
+or Motorola S-records.
+<li>The Windows installer now puts the NASM directory first in the
+<code><nobr>PATH</nobr></code> of the "NASM Shell".
+<li>Revert the early expansion behavior of <code><nobr>%+</nobr></code> to
+pre-2.06 behavior: <code><nobr>%+</nobr></code> is only expanded late.
+<li>Yet another Mach-O alignment fix.
+<li>Don't delete the list file on errors. Also, include error and warning
+information in the list file.
+<li>Support for 64-bit Mach-O output, see
+<a href="nasmdoc7.html#section-7.8">section 7.8</a>.
+<li>Fix assert failure on certain operations that involve strings with
+high-bit bytes.
+</ul>
+<h4><a name="section-C.1.3">C.1.3 Version 2.06</a></h4>
+<ul>
+<li>This release is dedicated to the memory of Charles A. Crayne, long time
+NASM developer as well as moderator of
+<code><nobr>comp.lang.asm.x86</nobr></code> and author of the book
+<em>Serious Assembler</em>. We miss you, Chuck.
+<li>Support for indirect macro expansion
+(<code><nobr>%[...]</nobr></code>). See
+<a href="nasmdoc4.html#section-4.1.3">section 4.1.3</a>.
+<li><code><nobr>%pop</nobr></code> can now take an argument, see
+<a href="nasmdoc4.html#section-4.7.1">section 4.7.1</a>.
+<li>The argument to <code><nobr>%use</nobr></code> is no longer
+macro-expanded. Use <code><nobr>%[...]</nobr></code> if macro expansion is
+desired.
+<li>Support for thread-local storage in ELF32 and ELF64. See
+<a href="nasmdoc7.html#section-7.9.4">section 7.9.4</a>.
+<li>Fix crash on <code><nobr>%ifmacro</nobr></code> without an argument.
+<li>Correct the arguments to the <code><nobr>POPCNT</nobr></code>
+instruction.
+<li>Fix section alignment in the Mach-O format.
+<li>Update AVX support to version 5 of the Intel specification.
+<li>Fix the handling of accesses to context-local macros from higher levels
+in the context stack.
+<li>Treat <code><nobr>WAIT</nobr></code> as a prefix rather than as an
+instruction, thereby allowing constructs like
+<code><nobr>O16 FSAVE</nobr></code> to work correctly.
+<li>Support for structures with a non-zero base offset. See
+<a href="nasmdoc4.html#section-4.11.10">section 4.11.10</a>.
+<li>Correctly handle preprocessor token concatenation (see
+<a href="nasmdoc4.html#section-4.3.8">section 4.3.8</a>) involving
+floating-point numbers.
+<li>The <code><nobr>PINSR</nobr></code> series of instructions have been
+corrected and rationalized.
+<li>Removed AMD SSE5, replaced with the new XOP/FMA4/CVT16 (rev 3.03) spec.
+<li>The ELF backends no longer automatically generate a
+<code><nobr>.comment</nobr></code> section.
+<li>Add additional "well-known" ELF sections with default attributes. See
+<a href="nasmdoc7.html#section-7.9.2">section 7.9.2</a>.
+</ul>
+<h4><a name="section-C.1.4">C.1.4 Version 2.05.01</a></h4>
+<ul>
+<li>Fix the <code><nobr>-w</nobr></code>/<code><nobr>-W</nobr></code>
+option parsing, which was broken in NASM 2.05.
+</ul>
+<h4><a name="section-C.1.5">C.1.5 Version 2.05</a></h4>
+<ul>
+<li>Fix redundant REX.W prefix on <code><nobr>JMP reg64</nobr></code>.
+<li>Make the behaviour of <code><nobr>-O0</nobr></code> match NASM 0.98
+legacy behavior. See <a href="nasmdoc2.html#section-2.1.22">section
+2.1.22</a>.
+<li><code><nobr>-w-user</nobr></code> can be used to suppress the output of
+<code><nobr>%warning</nobr></code> directives. See
+<a href="nasmdoc2.html#section-2.1.24">section 2.1.24</a>.
+<li>Fix bug where <code><nobr>ALIGN</nobr></code> would issue a full
+alignment datum instead of zero bytes.
+<li>Fix offsets in list files.
+<li>Fix <code><nobr>%include</nobr></code> inside multi-line macros or
+loops.
+<li>Fix error where NASM would generate a spurious warning on valid
+optimizations of immediate values.
+<li>Fix arguments to a number of the <code><nobr>CVT</nobr></code> SSE
+instructions.
+<li>Fix RIP-relative offsets when the instruction carries an immediate.
+<li>Massive overhaul of the ELF64 backend for spec compliance.
+<li>Fix the Geode <code><nobr>PFRCPV</nobr></code> and
+<code><nobr>PFRSQRTV</nobr></code> instruction.
+<li>Fix the SSE 4.2 <code><nobr>CRC32</nobr></code> instruction.
+</ul>
+<h4><a name="section-C.1.6">C.1.6 Version 2.04</a></h4>
+<ul>
+<li>Sanitize macro handing in the <code><nobr>%error</nobr></code>
+directive.
+<li>New <code><nobr>%warning</nobr></code> directive to issue
+user-controlled warnings.
+<li><code><nobr>%error</nobr></code> directives are now deferred to the
+final assembly phase.
+<li>New <code><nobr>%fatal</nobr></code> directive to immediately terminate
+assembly.
+<li>New <code><nobr>%strcat</nobr></code> directive to join quoted strings
+together.
+<li>New <code><nobr>%use</nobr></code> macro directive to support standard
+macro directives. See <a href="nasmdoc4.html#section-4.6.4">section
+4.6.4</a>.
+<li>Excess default parameters to <code><nobr>%macro</nobr></code> now
+issues a warning by default. See
+<a href="nasmdoc4.html#section-4.3">section 4.3</a>.
+<li>Fix <code><nobr>%ifn</nobr></code> and
+<code><nobr>%elifn</nobr></code>.
+<li>Fix nested <code><nobr>%else</nobr></code> clauses.
+<li>Correct the handling of nested <code><nobr>%rep</nobr></code>s.
+<li>New <code><nobr>%unmacro</nobr></code> directive to undeclare a
+multi-line macro. See <a href="nasmdoc4.html#section-4.3.11">section
+4.3.11</a>.
+<li>Builtin macro <code><nobr>__PASS__</nobr></code> which expands to the
+current assembly pass. See <a href="nasmdoc4.html#section-4.11.9">section
+4.11.9</a>.
+<li><code><nobr>__utf16__</nobr></code> and
+<code><nobr>__utf32__</nobr></code> operators to generate UTF-16 and UTF-32
+strings. See <a href="nasmdoc3.html#section-3.4.5">section 3.4.5</a>.
+<li>Fix bug in case-insensitive matching when compiled on platforms that
+don't use the <code><nobr>configure</nobr></code> script. Of the official
+release binaries, that only affected the OS/2 binary.
+<li>Support for x87 packed BCD constants. See
+<a href="nasmdoc3.html#section-3.4.7">section 3.4.7</a>.
+<li>Correct the <code><nobr>LTR</nobr></code> and
+<code><nobr>SLDT</nobr></code> instructions in 64-bit mode.
+<li>Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
+<li>Add AVX versions of the AES instructions
+(<code><nobr>VAES</nobr></code>...).
+<li>Fix the 256-bit FMA instructions.
+<li>Add 256-bit AVX stores per the latest AVX spec.
+<li>VIA XCRYPT instructions can now be written either with or without
+<code><nobr>REP</nobr></code>, apparently different versions of the VIA
+spec wrote them differently.
+<li>Add missing 64-bit <code><nobr>MOVNTI</nobr></code> instruction.
+<li>Fix the operand size of <code><nobr>VMREAD</nobr></code> and
+<code><nobr>VMWRITE</nobr></code>.
+<li>Numerous bug fixes, especially to the AES, AVX and VTX instructions.
+<li>The optimizer now always runs until it converges. It also runs even
+when disabled, but doesn't optimize. This allows most forward references to
+be resolved properly.
+<li><code><nobr>%push</nobr></code> no longer needs a context identifier;
+omitting the context identifier results in an anonymous context.
+</ul>
+<h4><a name="section-C.1.7">C.1.7 Version 2.03.01</a></h4>
+<ul>
+<li>Fix buffer overflow in the listing module.
+<li>Fix the handling of hexadecimal escape codes in `...` strings.
+<li>The Postscript/PDF documentation has been reformatted.
+<li>The <code><nobr>-F</nobr></code> option now implies
+<code><nobr>-g</nobr></code>.
+</ul>
+<h4><a name="section-C.1.8">C.1.8 Version 2.03</a></h4>
+<ul>
+<li>Add support for Intel AVX, CLMUL and FMA instructions, including YMM
+registers.
+<li><code><nobr>dy</nobr></code>, <code><nobr>resy</nobr></code> and
+<code><nobr>yword</nobr></code> for 32-byte operands.
+<li>Fix some SSE5 instructions.
+<li>Intel <code><nobr>INVEPT</nobr></code>,
+<code><nobr>INVVPID</nobr></code> and <code><nobr>MOVBE</nobr></code>
+instructions.
+<li>Fix checking for critical expressions when the optimizer is enabled.
+<li>Support the DWARF debugging format for ELF targets.
+<li>Fix optimizations of signed bytes.
+<li>Fix operation on bigendian machines.
+<li>Fix buffer overflow in the preprocessor.
+<li><code><nobr>SAFESEH</nobr></code> support for Win32,
+<code><nobr>IMAGEREL</nobr></code> for Win64 (SEH).
+<li><code><nobr>%?</nobr></code> and <code><nobr>%??</nobr></code> to refer
+to the name of a macro itself. In particular,
+<code><nobr>%idefine keyword $%?</nobr></code> can be used to make a
+keyword "disappear".
+<li>New options for dependency generation: <code><nobr>-MD</nobr></code>,
+<code><nobr>-MF</nobr></code>, <code><nobr>-MP</nobr></code>,
+<code><nobr>-MT</nobr></code>, <code><nobr>-MQ</nobr></code>.
+<li>New preprocessor directives <code><nobr>%pathsearch</nobr></code> and
+<code><nobr>%depend</nobr></code>; INCBIN reimplemented as a macro.
+<li><code><nobr>%include</nobr></code> now resolves macros in a sane
+manner.
+<li><code><nobr>%substr</nobr></code> can now be used to get other than
+one-character substrings.
+<li>New type of character/string constants, using backquotes
+(<code><nobr>`...`</nobr></code>), which support C-style escape sequences.
+<li><code><nobr>%defstr</nobr></code> and
+<code><nobr>%idefstr</nobr></code> to stringize macro definitions before
+creation.
+<li>Fix forward references used in <code><nobr>EQU</nobr></code>
+statements.
+</ul>
+<h4><a name="section-C.1.9">C.1.9 Version 2.02</a></h4>
+<ul>
+<li>Additional fixes for MMX operands with explicit
+<code><nobr>qword</nobr></code>, as well as (hopefully) SSE operands with
+<code><nobr>oword</nobr></code>.
+<li>Fix handling of truncated strings with <code><nobr>DO</nobr></code>.
+<li>Fix segfaults due to memory overwrites when floating-point constants
+were used.
+<li>Fix segfaults due to missing include files.
+<li>Fix OpenWatcom Makefiles for DOS and OS/2.
+<li>Add autogenerated instruction list back into the documentation.
+<li>ELF: Fix segfault when generating stabs, and no symbols have been
+defined.
+<li>ELF: Experimental support for DWARF debugging information.
+<li>New compile date and time standard macros.
+<li><code><nobr>%ifnum</nobr></code> now returns true for negative numbers.
+<li>New <code><nobr>%iftoken</nobr></code> test for a single token.
+<li>New <code><nobr>%ifempty</nobr></code> test for empty expansion.
+<li>Add support for the <code><nobr>XSAVE</nobr></code> instruction group.
+<li>Makefile for Netware/gcc.
+<li>Fix issue with some warnings getting emitted way too many times.
+<li>Autogenerated instruction list added to the documentation.
+</ul>
+<h4><a name="section-C.1.10">C.1.10 Version 2.01</a></h4>
+<ul>
+<li>Fix the handling of MMX registers with explicit
+<code><nobr>qword</nobr></code> tags on memory (broken in 2.00 due to
+64-bit changes.)
+<li>Fix the PREFETCH instructions.
+<li>Fix the documentation.
+<li>Fix debugging info when using <code><nobr>-f elf</nobr></code>
+(backwards compatibility alias for <code><nobr>-f elf32</nobr></code>).
+<li>Man pages for rdoff tools (from the Debian project.)
+<li>ELF: handle large numbers of sections.
+<li>Fix corrupt output when the optimizer runs out of passes.
+</ul>
+<h4><a name="section-C.1.11">C.1.11 Version 2.00</a></h4>
+<ul>
+<li>Added c99 data-type compliance.
+<li>Added general x86-64 support.
+<li>Added win64 (x86-64 COFF) output format.
+<li>Added <code><nobr>__BITS__</nobr></code> standard macro.
+<li>Renamed the <code><nobr>elf</nobr></code> output format to
+<code><nobr>elf32</nobr></code> for clarity.
+<li>Added <code><nobr>elf64</nobr></code> and
+<code><nobr>macho</nobr></code> (MacOS X) output formats.
+<li>Added Numeric constants in <code><nobr>dq</nobr></code> directive.
+<li>Added <code><nobr>oword</nobr></code>, <code><nobr>do</nobr></code> and
+<code><nobr>reso</nobr></code> pseudo operands.
+<li>Allow underscores in numbers.
+<li>Added 8-, 16- and 128-bit floating-point formats.
+<li>Added binary, octal and hexadecimal floating-point.
+<li>Correct the generation of floating-point constants.
+<li>Added floating-point option control.
+<li>Added Infinity and NaN floating point support.
+<li>Added ELF Symbol Visibility support.
+<li>Added setting OSABI value in ELF header directive.
+<li>Added Generate Makefile Dependencies option.
+<li>Added Unlimited Optimization Passes option.
+<li>Added <code><nobr>%IFN</nobr></code> and
+<code><nobr>%ELIFN</nobr></code> support.
+<li>Added Logical Negation Operator.
+<li>Enhanced Stack Relative Preprocessor Directives.
+<li>Enhanced ELF Debug Formats.
+<li>Enhanced Send Errors to a File option.
+<li>Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
+<li>Added a large number of additional instructions.
+<li>Significant performance improvements.
+<li><code><nobr>-w+warning</nobr></code> and
+<code><nobr>-w-warning</nobr></code> can now be written as -Wwarning and
+-Wno-warning, respectively. See
+<a href="nasmdoc2.html#section-2.1.24">section 2.1.24</a>.
+<li>Add <code><nobr>-w+error</nobr></code> to treat warnings as errors. See
+<a href="nasmdoc2.html#section-2.1.24">section 2.1.24</a>.
+<li>Add <code><nobr>-w+all</nobr></code> and
+<code><nobr>-w-all</nobr></code> to enable or disable all suppressible
+warnings. See <a href="nasmdoc2.html#section-2.1.24">section 2.1.24</a>.
+</ul>
+<h3><a name="section-C.2">C.2 NASM 0.98 Series</a></h3>
+<p>The 0.98 series was the production versions of NASM from 1999 to 2007.
+<h4><a name="section-C.2.1">C.2.1 Version 0.98.39</a></h4>
+<ul>
+<li>fix buffer overflow
+<li>fix outas86's <code><nobr>.bss</nobr></code> handling
+<li>"make spotless" no longer deletes config.h.in.
+<li><code><nobr>%(el)if(n)idn</nobr></code> insensitivity to string quotes
+difference (#809300).
+<li>(nasm.c)<code><nobr>__OUTPUT_FORMAT__</nobr></code> changed to string
+value instead of symbol.
+</ul>
+<h4><a name="section-C.2.2">C.2.2 Version 0.98.38</a></h4>
+<ul>
+<li>Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
+<code><nobr>mkdep.pl</nobr></code> to be able to generate completely
+pathless dependencies, as required by OpenWatcom wmake (it supports path
+searches, but not explicit paths.)
+<li>Fix the <code><nobr>STR</nobr></code> instruction.
+<li>Fix the ELF output format, which was broken under certain circumstances
+due to the addition of stabs support.
+<li>Quick-fix Borland format debug-info for
+<code><nobr>-f obj</nobr></code>
+<li>Fix for <code><nobr>%rep</nobr></code> with no arguments (#560568)
+<li>Fix concatenation of preprocessor function call (#794686)
+<li>Fix long label causes coredump (#677841)
+<li>Use autoheader as well as autoconf to keep configure from generating
+ridiculously long command lines.
+<li>Make sure that all of the formats which support debugging output
+actually will suppress debugging output when <code><nobr>-g</nobr></code>
+not specified.
+</ul>
+<h4><a name="section-C.2.3">C.2.3 Version 0.98.37</a></h4>
+<ul>
+<li>Paths given in <code><nobr>-I</nobr></code> switch searched for
+<code><nobr>incbin</nobr></code>-ed as well as
+<code><nobr>%include</nobr></code>-ed files.
+<li>Added stabs debugging for the ELF output format, patch from Martin
+Wawro.
+<li>Fix <code><nobr>output/outbin.c</nobr></code> to allow origin &gt;
+80000000h.
+<li>Make <code><nobr>-U</nobr></code> switch work.
+<li>Fix the use of relative offsets with explicit prefixes, e.g.
+<code><nobr>a32 loop foo</nobr></code>.
+<li>Remove <code><nobr>backslash()</nobr></code>.
+<li>Fix the <code><nobr>SMSW</nobr></code> and
+<code><nobr>SLDT</nobr></code> instructions.
+<li><code><nobr>-O2</nobr></code> and <code><nobr>-O3</nobr></code> are no
+longer aliases for <code><nobr>-O10</nobr></code> and
+<code><nobr>-O15</nobr></code>. If you mean the latter, please say so! :)
+</ul>
+<h4><a name="section-C.2.4">C.2.4 Version 0.98.36</a></h4>
+<ul>
+<li>Update rdoff - librarian/archiver - common rec - docs!
+<li>Fix signed/unsigned problems.
+<li>Fix <code><nobr>JMP FAR label</nobr></code> and
+<code><nobr>CALL FAR label</nobr></code>.
+<li>Add new multisection support - map files - fix align bug
+<li>Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
+<li><code><nobr>Q</nobr></code> or <code><nobr>O</nobr></code> suffixes
+indicate octal
+<li>Support Prescott new instructions (PNI).
+<li>Cyrix <code><nobr>XSTORE</nobr></code> instruction.
+</ul>
+<h4><a name="section-C.2.5">C.2.5 Version 0.98.35</a></h4>
+<ul>
+<li>Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler
+bug.)
+<li>Fix dependencies and compiler warnings.
+<li>Add "const" in a number of places.
+<li>Add -X option to specify error reporting format (use -Xvc to integrate
+with Microsoft Visual Studio.)
+<li>Minor changes for code legibility.
+<li>Drop use of tmpnam() in rdoff (security fix.)
+</ul>
+<h4><a name="section-C.2.6">C.2.6 Version 0.98.34</a></h4>
+<ul>
+<li>Correct additional address-size vs. operand-size confusions.
+<li>Generate dependencies for all Makefiles automatically.
+<li>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.
+<li>Correct some disassembler bugs related to redundant address-size
+prefixes. Some work still remains in this area.
+<li>Correctly generate an error for things like "SEG eax".
+<li>Add the JMPE instruction, enabled by "CPU IA64".
+<li>Correct compilation on newer gcc/glibc platforms.
+<li>Issue an error on things like "jmp far eax".
+</ul>
+<h4><a name="section-C.2.7">C.2.7 Version 0.98.33</a></h4>
+<ul>
+<li>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).
+<li>New keyword "strict" to disable the optimization of specific operands.
+<li>Fix the handing of size overrides with JMP instructions (instructions
+such as "jmp dword foo".)
+<li>Fix the handling of "ABSOLUTE label", where "label" points into a
+relocatable segment.
+<li>Fix OBJ output format with lots of externs.
+<li>More documentation updates.
+<li>Add -Ov option to get verbose information about optimizations.
+<li>Undo a braindead change which broke <code><nobr>%elif</nobr></code>
+directives.
+<li>Makefile updates.
+</ul>
+<h4><a name="section-C.2.8">C.2.8 Version 0.98.32</a></h4>
+<ul>
+<li>Fix NASM crashing when <code><nobr>%macro</nobr></code> directives were
+left unterminated.
+<li>Lots of documentation updates.
+<li>Complete rewrite of the PostScript/PDF documentation generator.
+<li>The MS Visual C++ Makefile was updated and corrected.
+<li>Recognize .rodata as a standard section name in ELF.
+<li>Fix some obsolete Perl4-isms in Perl scripts.
+<li>Fix configure.in to work with autoconf 2.5x.
+<li>Fix a couple of "make cleaner" misses.
+<li>Make the normal "./configure &amp;&amp; make" work with Cygwin.
+</ul>
+<h4><a name="section-C.2.9">C.2.9 Version 0.98.31</a></h4>
+<ul>
+<li>Correctly build in a separate object directory again.
+<li>Derive all references to the version number from the version file.
+<li>New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
+<li>Lots of Makefile updates and bug fixes.
+<li>New <code><nobr>%ifmacro</nobr></code> directive to test for multiline
+macros.
+<li>Documentation updates.
+<li>Fixes for 16-bit OBJ format output.
+<li>Changed the NASM environment variable to NASMENV.
+</ul>
+<h4><a name="section-C.2.10">C.2.10 Version 0.98.30</a></h4>
+<ul>
+<li>Changed doc files a lot: completely removed old READMExx and Wishlist
+files, incorporating all information in CHANGES and TODO.
+<li>I waited a long time to rename zoutieee.c to (original) outieee.c
+<li>moved all output modules to output/ subdirectory.
+<li>Added 'make strip' target to strip debug info from nasm &amp; ndisasm.
+<li>Added INSTALL file with installation instructions.
+<li>Added -v option description to nasm man.
+<li>Added dist makefile target to produce source distributions.
+<li>16-bit support for ELF output format (GNU extension, but useful.)
+</ul>
+<h4><a name="section-C.2.11">C.2.11 Version 0.98.28</a></h4>
+<ul>
+<li>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.
+</ul>
+<h4><a name="section-C.2.12">C.2.12 Version 0.98.26</a></h4>
+<ul>
+<li>Reorganised files even better from 0.98.25alt
+</ul>
+<h4><a name="section-C.2.13">C.2.13 Version 0.98.25alt</a></h4>
+<ul>
+<li>Prettified the source tree. Moved files to more reasonable places.
+<li>Added findleak.pl script to misc/ directory.
+<li>Attempted to fix doc.
+</ul>
+<h4><a name="section-C.2.14">C.2.14 Version 0.98.25</a></h4>
+<ul>
+<li>Line continuation character <code><nobr>\</nobr></code>.
+<li>Docs inadvertantly reverted - "dos packaging".
+</ul>
+<h4><a name="section-C.2.15">C.2.15 Version 0.98.24p1</a></h4>
+<ul>
+<li>FIXME: Someone, document this please.
+</ul>
+<h4><a name="section-C.2.16">C.2.16 Version 0.98.24</a></h4>
+<ul>
+<li>Documentation - Ndisasm doc added to Nasm.doc.
+</ul>
+<h4><a name="section-C.2.17">C.2.17 Version 0.98.23</a></h4>
+<ul>
+<li>Attempted to remove rdoff version1
+<li>Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
+</ul>
+<h4><a name="section-C.2.18">C.2.18 Version 0.98.22</a></h4>
+<ul>
+<li>Update rdoff2 - attempt to remove v1.
+</ul>
+<h4><a name="section-C.2.19">C.2.19 Version 0.98.21</a></h4>
+<ul>
+<li>Optimization fixes.
+</ul>
+<h4><a name="section-C.2.20">C.2.20 Version 0.98.20</a></h4>
+<ul>
+<li>Optimization fixes.
+</ul>
+<h4><a name="section-C.2.21">C.2.21 Version 0.98.19</a></h4>
+<ul>
+<li>H. J. Lu's patch back out.
+</ul>
+<h4><a name="section-C.2.22">C.2.22 Version 0.98.18</a></h4>
+<ul>
+<li>Added ".rdata" to "-f win32".
+</ul>
+<h4><a name="section-C.2.23">C.2.23 Version 0.98.17</a></h4>
+<ul>
+<li>H. J. Lu's "bogus elf" patch. (Red Hat problem?)
+</ul>
+<h4><a name="section-C.2.24">C.2.24 Version 0.98.16</a></h4>
+<ul>
+<li>Fix whitespace before "[section ..." bug.
+</ul>
+<h4><a name="section-C.2.25">C.2.25 Version 0.98.15</a></h4>
+<ul>
+<li>Rdoff changes (?).
+<li>Fix fixes to memory leaks.
+</ul>
+<h4><a name="section-C.2.26">C.2.26 Version 0.98.14</a></h4>
+<ul>
+<li>Fix memory leaks.
+</ul>
+<h4><a name="section-C.2.27">C.2.27 Version 0.98.13</a></h4>
+<ul>
+<li>There was no 0.98.13
+</ul>
+<h4><a name="section-C.2.28">C.2.28 Version 0.98.12</a></h4>
+<ul>
+<li>Update optimization (new function of "-O1")
+<li>Changes to test/bintest.asm (?).
+</ul>
+<h4><a name="section-C.2.29">C.2.29 Version 0.98.11</a></h4>
+<ul>
+<li>Optimization changes.
+<li>Ndisasm fixed.
+</ul>
+<h4><a name="section-C.2.30">C.2.30 Version 0.98.10</a></h4>
+<ul>
+<li>There was no 0.98.10
+</ul>
+<h4><a name="section-C.2.31">C.2.31 Version 0.98.09</a></h4>
+<ul>
+<li>Add multiple sections support to "-f bin".
+<li>Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
+<li>Add "-v" as an alias to the "-r" switch.
+<li>Remove "#ifdef" from Tasm compatibility options.
+<li>Remove redundant size-overrides on "mov ds, ex", etc.
+<li>Fixes to SSE2, other insns.dat (?).
+<li>Enable uppercase "I" and "P" switches.
+<li>Case insinsitive "seg" and "wrt".
+<li>Update install.sh (?).
+<li>Allocate tokens in blocks.
+<li>Improve "invalid effective address" messages.
+</ul>
+<h4><a name="section-C.2.32">C.2.32 Version 0.98.08</a></h4>
+<ul>
+<li>Add "<code><nobr>%strlen</nobr></code>" and
+"<code><nobr>%substr</nobr></code>" macro operators
+<li>Fixed broken c16.mac.
+<li>Unterminated string error reported.
+<li>Fixed bugs as per 0.98bf
+</ul>
+<h4><a name="section-C.2.33">C.2.33 Version 0.98.09b with John Coffman patches released 28-Oct-2001</a></h4>
+<p>Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
+<ul>
+<li>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.
+<li>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).
+<li>Changed definition of the optimization flag:
+</ul>
+<p>-O0 strict two-pass assembly, JMP and Jcc are handled more like 0.98,
+except that back- ward JMPs are short, if possible.
+<p>-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.
+<p>-O2 multi-pass optimization, minimize branch offsets; also will minimize
+signed immed- iate bytes, overriding size specification.
+<p>-O3 like -O2, but more passes taken, if needed
+<h4><a name="section-C.2.34">C.2.34 Version 0.98.07 released 01/28/01</a></h4>
+<ul>
+<li>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"
+</ul>
+<p>01/28/01
+<ul>
+<li>Cosmetic modifications to nasm.c, nasm.h, AUTHORS, MODIFIED
+</ul>
+<h4><a name="section-C.2.35">C.2.35 Version 0.98.06f released 01/18/01</a></h4>
+<ul>
+<li>- Add "metalbrain"s jecxz bug fix in insns.dat - alter nasmdoc.src to
+match - version "0.98.06f"
+</ul>
+<h4><a name="section-C.2.36">C.2.36 Version 0.98.06e released 01/09/01</a></h4>
+<ul>
+<li>Removed the "outforms.h" file - it appears to be someone's old backup
+of "outform.h". version "0.98.06e"
+</ul>
+<p>01/09/01
+<ul>
+<li>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...
+<li>Nelson Rush resigns from the group. Big thanks to Nelson for his
+leadership and enthusiasm in getting these changes incorporated into Nasm!
+<li>fbk - [list +], [list -] directives - ineptly implemented, should be
+re-written or removed, perhaps.
+<li>Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format as well
+- testing might be desirable...
+</ul>
+<p>08/07/00
+<ul>
+<li>James Seter - -postfix, -prefix command line switches.
+<li>Yuri Zaporogets - rdoff utility changes.
+</ul>
+<h4><a name="section-C.2.37">C.2.37 Version 0.98p1</a></h4>
+<ul>
+<li>GAS-like palign (Panos Minos)
+<li>FIXME: Someone, fill this in with details
+</ul>
+<h4><a name="section-C.2.38">C.2.38 Version 0.98bf (bug-fixed)</a></h4>
+<ul>
+<li>Fixed - elf and aoutb bug - shared libraries - multiple "%include" bug
+in "-f obj" - jcxz, jecxz bug - unrecognized option bug in ndisasm
+</ul>
+<h4><a name="section-C.2.39">C.2.39 Version 0.98.03 with John Coffman's changes released 27-Jul-2000</a></h4>
+<ul>
+<li>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.
+<li>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.
+</ul>
+<p>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.
+<ul>
+<li>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'.
+<li>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)
+<li>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)
+</ul>
+<h4><a name="section-C.2.40">C.2.40 Version 0.98.03</a></h4>
+<p>"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for
+historical reasons: 0.98.02 was trashed." --John Coffman
+&lt;johninsd@san.rr.com&gt;, 27-Jul-2000
+<ul>
+<li>Kendall Bennett's SciTech MGL changes
+<li>Note that you must define "TASM_COMPAT" at compile-time to get the Tasm
+Ideal Mode compatibility.
+<li>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.
+<li>standard.mac, macros.c: Added macros to ignore TASM directives before
+first include
+<li>nasm.h: Added extern declaration for tasm_compatible_mode
+<li>nasm.c: Added global variable tasm_compatible_mode
+<li>Added command line switch for TASM compatible mode (-t)
+<li>Changed version command line to reflect when compiled with TASM
+additions
+<li>Added response file processing to allow all arguments on a single line
+(response file is @resp rather than -@resp for NASM format).
+<li>labels.c: Changes islocal() macro to support TASM style @@local labels.
+<li>Added islocalchar() macro to support TASM style @@local labels.
+<li>parser.c: Added support for TASM style memory references (ie: mov
+[DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
+<li>preproc.c: Added new directives, <code><nobr>%arg</nobr></code>,
+<code><nobr>%local</nobr></code>, <code><nobr>%stacksize</nobr></code> to
+directives table
+<li>Added support for TASM style directives without a leading % symbol.
+<li>Integrated a block of changes from Andrew Zabolotny
+&lt;bit@eltech.ru&gt;:
+<li>A new keyword <code><nobr>%xdefine</nobr></code> and its
+case-insensitive counterpart <code><nobr>%ixdefine</nobr></code>. They work
+almost the same way as <code><nobr>%define</nobr></code> and
+<code><nobr>%idefine</nobr></code> but expand the definition immediately,
+not on the invocation. Something like a cross between
+<code><nobr>%define</nobr></code> and <code><nobr>%assign</nobr></code>.
+The "x" suffix stands for "eXpand", so "xdefine" can be deciphered as
+"expand-and-define". Thus you can do things like this:
+</ul>
+<p><pre>
+ %assign ofs 0
+
+ %macro arg 1
+ %xdefine %1 dword [esp+ofs]
+ %assign ofs ofs+4
+ %endmacro
+</pre>
+<ul>
+<li>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:
+</ul>
+<p><pre>
+ %macro abc 1
+ %define %1 hello
+ %endm
+
+ abc %$here
+ %$here
+</pre>
+<p>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.
+<ul>
+<li>Added a check for "cstk" in smacro_defined() before calling get_ctx() -
+this allows for things like:
+</ul>
+<p><pre>
+ %ifdef %$abc
+ %endif
+</pre>
+<p>to work without warnings even in no context.
+<ul>
+<li>Added a check for "cstk" in %if*ctx and %elif*ctx directives - this
+allows to use <code><nobr>%ifctx</nobr></code> without excessive warnings.
+If there is no active context, <code><nobr>%ifctx</nobr></code> goes
+through "false" branch.
+<li>Removed "user error: " prefix with <code><nobr>%error</nobr></code>
+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.
+<li>Added expansion of string that is output by
+<code><nobr>%error</nobr></code> directive. Now you can do things like:
+</ul>
+<p><pre>
+ %define hello(x) Hello, x!
+
+ %define %$name andy
+ %error "hello(%$name)"
+</pre>
+<p>Same happened with <code><nobr>%include</nobr></code> directive.
+<ul>
+<li>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
+</ul>
+<p><pre>
+ %define %$abc hello
+ %define __%$abc goodbye
+ __%$abc
+</pre>
+<p>would produce "incorrect" output: last line will expand to
+<p><pre>
+ hello goodbyehello
+</pre>
+<p>Not quite what you expected, eh? :-) The answer is that preprocessor
+treats the <code><nobr>%define</nobr></code> construct as if it would be
+<p><pre>
+ %define __ %$abc goodbye
+</pre>
+<p>(note the white space between __ and %$abc). After my "fix" it will
+"correctly" expand into
+<p><pre>
+ goodbye
+</pre>
+<p>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 :-).
+<p>Same change was applied to:
+<code><nobr>%push</nobr></code>,<code><nobr>%macro</nobr></code>,<code><nobr>%imacro</nobr></code>,<code><nobr>%define</nobr></code>,<code><nobr>%idefine</nobr></code>,<code><nobr>%xdefine</nobr></code>,<code><nobr>%ixdefine</nobr></code>,
+<code><nobr>%assign</nobr></code>,<code><nobr>%iassign</nobr></code>,<code><nobr>%undef</nobr></code>
+<ul>
+<li>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).
+<li>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:
+</ul>
+<p><pre>
+ [WARNING macro-selfref]
+
+ %macro push 1-*
+ %rep %0
+ push %1
+ %rotate 1
+ %endrep
+ %endmacro
+
+ push eax,ebx,ecx
+</pre>
+<p>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).
+<ul>
+<li>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.
+<li>Added the %+ operator in single-line macros for concatenating two
+identifiers. Usage example:
+</ul>
+<p><pre>
+ %define _myfunc _otherfunc
+ %define cextern(x) _ %+ x
+ cextern (myfunc)
+</pre>
+<p>After first expansion, third line will become "_myfunc". After this
+expansion is performed again so it becomes "_otherunc".
+<ul>
+<li>Now if preprocessor is in a non-emitting state, no warning or error
+will be emitted. Example:
+</ul>
+<p><pre>
+ %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 emitted.
+ %endif
+</pre>
+<ul>
+<li>Context-local variables on expansion as a last resort are looked up in
+outer contexts. For example, the following piece:
+</ul>
+<p><pre>
+ %push outer
+ %define %$a [esp]
+
+ %push inner
+ %$a
+ %pop
+ %pop
+</pre>
+<p>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 <code><nobr>%ifdef</nobr></code> won't look in outer
+contexts.
+<p>This behaviour is needed because we don't want nested contexts to act on
+already defined local macros. Example:
+<p><pre>
+ %define %$arg1 [esp+4]
+ test eax,eax
+ if nz
+ mov eax,%$arg1
+ endif
+</pre>
+<p>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.
+<ul>
+<li>Fixed memory leak in <code><nobr>%undef</nobr></code>. The origline
+wasn't freed before exiting on success.
+<li>Fixed trap in preprocessor when line expanded to empty set of tokens.
+This happens, for example, in the following case:
+</ul>
+<p><pre>
+ #define SOMETHING
+ SOMETHING
+</pre>
+<h4><a name="section-C.2.41">C.2.41 Version 0.98</a></h4>
+<p>All changes since NASM 0.98p3 have been produced by H. Peter Anvin
+&lt;hpa@zytor.com&gt;.
+<ul>
+<li>The documentation comment delimiter is
+<li>Allow EQU definitions to refer to external labels; reported by Pedro
+Gimeno.
+<li>Re-enable support for RDOFF v1; reported by Pedro Gimeno.
+<li>Updated License file per OK from Simon and Julian.
+</ul>
+<h4><a name="section-C.2.42">C.2.42 Version 0.98p9</a></h4>
+<ul>
+<li>Update documentation (although the instruction set reference will have
+to wait; I don't want to hold up the 0.98 release for it.)
+<li>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.
+<li>Fix handling of implicit sizes in PSHUFW and PINSRW, reported by Stefan
+Hoffmeister.
+<li>Resurrect the -s option, which was removed when changing the diagnostic
+output to stdout.
+</ul>
+<h4><a name="section-C.2.43">C.2.43 Version 0.98p8</a></h4>
+<ul>
+<li>Fix for "DB" when NASM is running on a bigendian machine.
+<li>Invoke insns.pl once for each output script, making Makefile.in legal
+for "make -j".
+<li>Improve the Unix configure-based makefiles to make package creation
+easier.
+<li>Included an RPM .spec file for building RPM (RedHat Package Manager)
+packages on Linux or Unix systems.
+<li>Fix Makefile dependency problems.
+<li>Change src/rdsrc.pl to include sectioning information in info output;
+required for install-info to work.
+<li>Updated the RDOFF distribution to version 2 from Jules; minor massaging
+to make it compile in my environment.
+<li>Split doc files that can be built by anyone with a Perl interpreter off
+into a separate archive.
+<li>"Dress rehearsal" release!
+</ul>
+<h4><a name="section-C.2.44">C.2.44 Version 0.98p7</a></h4>
+<ul>
+<li>Fixed opcodes with a third byte-sized immediate argument to not
+complain if given "byte" on the immediate.
+<li>Allow <code><nobr>%undef</nobr></code> to remove single-line macros
+with arguments. This matches the behaviour of #undef in the C preprocessor.
+<li>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.
+<li>Minor cleanups.
+<li>Went through the list of Katmai instructions and hopefully fixed the
+(rather few) mistakes in it.
+<li>(Hopefully) fixed a number of disassembler bugs related to ambiguous
+instructions (disambiguated by -p) and SSE instructions with REP.
+<li>Fix for bug reported by Mark Junger: "call dword 0x12345678" should
+work and may add an OSP (affected CALL, JMP, Jcc).
+<li>Fix for environments when "stderr" isn't a compile-time constant.
+</ul>
+<h4><a name="section-C.2.45">C.2.45 Version 0.98p6</a></h4>
+<ul>
+<li>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.
+<li>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.
+<li>Recognize "idt" or "centaur" for the -p option to ndisasm.
+<li>Changed error messages back to stderr where they belong, but add an -E
+option to redirect them elsewhere (the DOS shell cannot redirect stderr.)
+<li>-M option to generate Makefile dependencies (based on code from Alex
+Verstak.)
+<li><code><nobr>%undef</nobr></code> preprocessor directive, and -u option,
+that undefines a single-line macro.
+<li>OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from Chuck
+Crayne.
+<li>Various minor bugfixes (reported by): - Dangling
+<code><nobr>%s</nobr></code> in preproc.c (Martin Junker)
+<li>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.
+<li>Updated the License file per agreement with Simon and Jules to include
+a GPL distribution clause.
+</ul>
+<h4><a name="section-C.2.46">C.2.46 Version 0.98p3.7</a></h4>
+<ul>
+<li>(Hopefully) fixed the canned Makefiles to include the outrdf2 and
+zoutieee modules.
+<li>Renamed changes.asm to changed.asm.
+</ul>
+<h4><a name="section-C.2.47">C.2.47 Version 0.98p3.6</a></h4>
+<ul>
+<li>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.
+</ul>
+<h4><a name="section-C.2.48">C.2.48 Version 0.98p3.5</a></h4>
+<ul>
+<li>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.
+<li>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.
+<li>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.
+<li>Added AMD-only SYSCALL and SYSRET instructions.
+<li>Make SSE actually work, and add new Katmai MMX instructions.
+<li>Added a -p (preferred vendor) option to ndisasm so that it can
+distinguish e.g. Cyrix opcodes also used in SSE. For example:
+</ul>
+<p><pre>
+ 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]
+</pre>
+<ul>
+<li>Added a bunch of Cyrix-specific instructions.
+</ul>
+<h4><a name="section-C.2.49">C.2.49 Version 0.98p3.4</a></h4>
+<ul>
+<li>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.
+<li>DOS DJGPP+"Opus Make" Makefile from John S. Fine.
+<li>changes.asm changes from John S. Fine.
+</ul>
+<h4><a name="section-C.2.50">C.2.50 Version 0.98p3.3</a></h4>
+<ul>
+<li>Patch from Conan Brink to allow nesting of
+<code><nobr>%rep</nobr></code> directives.
+<li>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.
+<li>Updated changes.asm to include the latest changes.
+<li>Tried to clean up the &lt;CR&gt;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.
+<li>We would silently generate broken tools if insns.dat wasn't sorted
+properly. Change insns.pl so that the order doesn't matter.
+<li>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".
+</ul>
+<h4><a name="section-C.2.51">C.2.51 Version 0.98p3.2</a></h4>
+<ul>
+<li>Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
+http://www.csoft.net/cz/johnfine/
+<li>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.
+<li>Removed BASIC programs from distribution. Get a Perl interpreter
+instead (see below.)
+<li>Calling this "pre-release 3.2" rather than "p3-hpa2" because of John's
+contributions.
+<li>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".
+</ul>
+<h4><a name="section-C.2.52">C.2.52 Version 0.98p3-hpa</a></h4>
+<ul>
+<li>Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully buildable
+version for Unix systems (Makefile.in updates, etc.)
+<li>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.
+<li>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.)
+<li>MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
+characters long. Now MAX_SYMBOL is derived from insns.dat.
+<li>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
+<a href="http://www.cpan.org/ports/index.html">http://www.cpan.org/ports/index.html</a>.
+</ul>
+<h4><a name="section-C.2.53">C.2.53 Version 0.98 pre-release 3</a></h4>
+<ul>
+<li>added response file support, improved command line handling, new layout
+help screen
+<li>fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
+related bugs, updated Wishlist; 0.98 Prerelease 3.
+</ul>
+<h4><a name="section-C.2.54">C.2.54 Version 0.98 pre-release 2</a></h4>
+<ul>
+<li>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
+</ul>
+<h4><a name="section-C.2.55">C.2.55 Version 0.98 pre-release 1</a></h4>
+<ul>
+<li>Fixed a bug whereby STRUC didn't work at all in RDF.
+<li>Fixed a problem with group specification in PUBDEFs in OBJ.
+<li>Improved ease of adding new output formats. Contribution due to Fox
+Cutter.
+<li>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.
+<li>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.
+<li>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.
+<li>Fixed a stale-pointer bug in the handling of the NASM environment
+variable. Thanks to Thomas McWilliams.
+<li>ELF had a hard limit on the number of sections which caused segfaults
+when transgressed. Fixed.
+<li>Added ability for ndisasm to read from stdin by using `-' as the
+filename.
+<li>ndisasm wasn't outputting the TO keyword. Fixed.
+<li>Fixed error cascade on bogus expression in
+<code><nobr>%if</nobr></code> - an error in evaluation was causing the
+entire <code><nobr>%if</nobr></code> to be discarded, thus creating trouble
+later when the <code><nobr>%else</nobr></code> or
+<code><nobr>%endif</nobr></code> was encountered.
+<li>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.
+<li>All messages now appear on stdout, as sending them to stderr serves no
+useful purpose other than to make redirection difficult.
+<li>Fixed the problem with EQUs pointing to an external symbol - this now
+generates an error message.
+<li>Allowed multiple size prefixes to an operand, of which only the first
+is taken into account.
+<li>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.
+<li>Reformatted a lot of the source code to be more readable. Included
+'coding.txt' as a guideline for how to format code for contributors.
+<li>Stopped nested <code><nobr>%reps</nobr></code> causing a panic - they
+now cause a slightly more friendly error message instead.
+<li>Fixed floating point constant problems (patch by Pedro Gimeno)
+<li>Fixed the return value of insn_size() not being checked for -1,
+indicating an error.
+<li>Incorporated 3Dnow! instructions.
+<li>Fixed the 'mov eax, eax + ebx' bug.
+<li>Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
+<li>Incorporated John Fine's command line parsing changes
+<li>Incorporated David Lindauer's OMF debug support
+<li>Made changes for LCC 4.0 support
+(<code><nobr>__NASM_CDecl__</nobr></code>, removed register size
+specification warning when sizes agree).
+</ul>
+<h3><a name="section-C.3">C.3 NASM 0.9 Series</a></h3>
+<p>Revisions before 0.98.
+<h4><a name="section-C.3.1">C.3.1 Version 0.97 released December 1997</a></h4>
+<ul>
+<li>This was entirely a bug-fix release to 0.96, which seems to have got
+cursed. Silly me.
+<li>Fixed stupid mistake in OBJ which caused `MOV EAX,&lt;constant&gt;' to
+fail. Caused by an error in the `MOV EAX,&lt;segment&gt;' support.
+<li>ndisasm hung at EOF when compiled with lcc on Linux because lcc on
+Linux somehow breaks feof(). ndisasm now does not rely on feof().
+<li>A heading in the documentation was missing due to a markup error in the
+indexing. Fixed.
+<li>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,...'
+<li>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.
+<li>Added internal.doc back in to the distribution archives - it was
+missing in 0.96 *blush*
+<li>Fixed bug causing 0.96 to be unable to assemble its own test files,
+specifically objtest.asm. *blush again*
+<li>Fixed seg-faults and bogus error messages caused by mismatching
+<code><nobr>%rep</nobr></code> and <code><nobr>%endrep</nobr></code> within
+multi-line macro definitions.
+<li>Fixed a problem with buffer overrun in OBJ, which was causing
+corruption at ends of long PUBDEF records.
+<li>Separated DOS archives into main-program and documentation to reduce
+download size.
+</ul>
+<h4><a name="section-C.3.2">C.3.2 Version 0.96 released November 1997</a></h4>
+<ul>
+<li>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.
+<li>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.
+<li>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.
+<li>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.
+<li>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'.
+<li>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.
+<li>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.
+<li>Fixed some buffer overrun problems with large OBJ output files. Thanks
+to DJ Delorie for the bug report and fix.
+<li>Made preprocess-only mode actually listen to the
+<code><nobr>%line</nobr></code> markers as it prints them, so that it can
+report errors more sanely.
+<li>Re-designed the evaluator to keep more sensible track of expressions
+involving forward references: can now cope with previously-nightmare
+situations such as:
+</ul>
+<p><pre>
+ mov ax,foo | bar
+ foo equ 1
+ bar equ 2
+</pre>
+<ul>
+<li>Added the ALIGN and ALIGNB standard macros.
+<li>Added PIC support in ELF: use of WRT to obtain the four extra
+relocation types needed.
+<li>Added the ability for output file formats to define their own
+extensions to the GLOBAL, COMMON and EXTERN directives.
+<li>Implemented common-variable alignment, and global-symbol type and size
+declarations, in ELF.
+<li>Implemented NEAR and FAR keywords for common variables, plus far-common
+element size specification, in OBJ.
+<li>Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
+default WRT specification (either a segment or a group).
+<li>Transformed the Unix NASM archive into an auto-configuring package.
+<li>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.
+<li>Added the ability, in OBJ format, to deal with `MOV
+EAX,&lt;segment&gt;' 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.
+<li>Added the ability to specify sections' alignment requirements in Win32
+object files and pure binary files.
+<li>Added preprocess-time expression evaluation: the
+<code><nobr>%assign</nobr></code> (and <code><nobr>%iassign</nobr></code>)
+directive and the bare <code><nobr>%if</nobr></code> (and
+<code><nobr>%elif</nobr></code>) conditional. Added relational operators to
+the evaluator, for use only in <code><nobr>%if</nobr></code> constructs:
+the standard relationals = &lt; &gt; &lt;= &gt;= &lt;&gt; (and C-like
+synonyms == and !=) plus low-precedence logical operators &amp;&amp;, ^^
+and ||.
+<li>Added a preprocessor repeat construct: <code><nobr>%rep</nobr></code> /
+<code><nobr>%exitrep</nobr></code> / <code><nobr>%endrep</nobr></code>.
+<li>Added the __FILE__ and __LINE__ standard macros.
+<li>Added a sanity check for number constants being greater than
+0xFFFFFFFF. The warning can be disabled.
+<li>Added the %0 token whereby a variadic multi-line macro can tell how
+many parameters it's been given in a specific invocation.
+<li>Added <code><nobr>%rotate</nobr></code>, allowing multi-line macro
+parameters to be cycled.
+<li>Added the `*' option for the maximum parameter count on multi-line
+macros, allowing them to take arbitrarily many parameters.
+<li>Added the ability for the user-level forms of EXTERN, GLOBAL and COMMON
+to take more than one argument.
+<li>Added the IMPORT and EXPORT directives in OBJ format, to deal with
+Windows DLLs.
+<li>Added some more preprocessor <code><nobr>%if</nobr></code> constructs:
+<code><nobr>%ifidn</nobr></code> / <code><nobr>%ifidni</nobr></code> (exact
+textual identity), and <code><nobr>%ifid</nobr></code> /
+<code><nobr>%ifnum</nobr></code> / <code><nobr>%ifstr</nobr></code> (token
+type testing).
+<li>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).
+<li>Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete with
+PIC shared library features.
+<li>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.
+<li>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.
+<li>Added the ability for a variable to be declared as EXTERN multiple
+times, and the subsequent definitions are just ignored.
+<li>We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be alone
+on a line (without a following instruction).
+<li>Improved sanity checks on whether the arguments to EXTERN, GLOBAL and
+COMMON are valid identifiers.
+<li>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.
+<li>ndisasm forgot to check whether the input file had been successfully
+opened. Now it does. Doh!
+<li>Added the Cyrix extensions to the MMX instruction set.
+<li>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.
+<li>Added support for the PharLap OMF extension for 4096-byte segment
+alignment.
+</ul>
+<h4><a name="section-C.3.3">C.3.3 Version 0.95 released July 1997</a></h4>
+<ul>
+<li>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.
+<li>Added makefiles (for NASM and the RDF tools) to build Win32 console
+apps under Symantec C++. Donated by Mark Junker.
+<li>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.
+<li>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.
+<li>Added `@' to the list of valid characters to begin an identifier with.
+<li>Documentary changes, notably the addition of the `Common Problems'
+section in nasm.doc.
+<li>Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
+<li>Fixed a bug in perm_copy() in labels.c which was causing exceptions in
+cleanup_labels() on some systems.
+<li>Positivity sanity check in TIMES argument changed from a warning to an
+error following a further complaint.
+<li>Changed the acceptable limits on byte and word operands to allow things
+like `~10111001b' to work.
+<li>Fixed a major problem in the preprocessor which caused seg-faults if
+macro definitions contained blank lines or comment-only lines.
+<li>Fixed inadequate error checking on the commas separating the arguments
+to `db', `dw' etc.
+<li>Fixed a crippling bug in the handling of macros with operand counts
+defined with a `+' modifier.
+<li>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.
+<li>Removed [INC] and [INCLUDE] support for good, since they were obsolete
+anyway.
+<li>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.
+<li>Added, tentatively, OS/2 object file support (as a minor variant on
+OBJ).
+<li>Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
+<li>Removed a spurious second fclose() on the output file.
+<li>Added the `-s' command line option to redirect all messages which would
+go to stderr (errors, help text) to stdout instead.
+<li>Added the `-w' command line option to selectively suppress some classes
+of assembly warning messages.
+<li>Added the `-p' pre-include and `-d' pre-define command-line options.
+<li>Added an include file search path: the `-i' command line option.
+<li>Fixed a silly little preprocessor bug whereby starting a line with a
+`%!' environment-variable reference caused an `unknown directive' error.
+<li>Added the long-awaited listing file support: the `-l' command line
+option.
+<li>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.
+<li>Added the NASM environment variable.
+<li>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.
+<li>Added `return 0;' to test/objlink.c to prevent compiler warnings.
+<li>Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
+<li>Added an alternative memory-reference syntax in which prefixing an
+operand with `&amp;' is equivalent to enclosing it in square brackets, at
+the request of Fox Cutter.
+<li>Errors in pass two now cause the program to return a non-zero error
+code, which they didn't before.
+<li>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.
+<li>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.
+</ul>
+<h4><a name="section-C.3.4">C.3.4 Version 0.94 released April 1997</a></h4>
+<ul>
+<li>Major item: added the macro processor.
+<li>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.
+<li>Fixed two more stupid bugs in ELF, which were causing `ld' to continue
+to seg-fault in a lot of non-trivial cases.
+<li>Fixed a seg-fault in the label manager.
+<li>Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is the
+only option for BCD loads/stores in any case.
+<li>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.
+<li>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...
+<li>Another minor phase error (insofar as a phase error can _ever_ be
+minor) fixed, this one occurring in code of the form
+</ul>
+<p><pre>
+ rol ax,forward_reference
+ forward_reference equ 1
+</pre>
+<ul>
+<li>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).
+<li>Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
+<li>Added the INCBIN pseudo-opcode.
+<li>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.
+<li>Fixed a bug in OBJ format, which caused incorrect object records to be
+output when absolute labels were made global.
+<li>Updates to RDOFF subdirectory, and changes to outrdf.c.
+</ul>
+<h4><a name="section-C.3.5">C.3.5 Version 0.93 released January 1997</a></h4>
+<p>This release went out in a great hurry after semi-crippling bugs were
+found in 0.92.
+<ul>
+<li>Really <em>did</em> fix the stack overflows this time. *blush*
+<li>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.
+<li>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.
+<li>Included a new Borland C makefile, Makefile.bc2, donated by Fox Cutter
+&lt;lmb@comtch.iea.com&gt;.
+</ul>
+<h4><a name="section-C.3.6">C.3.6 Version 0.92 released January 1997</a></h4>
+<ul>
+<li>The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
+fixed. This also affected the LCC driver.
+<li>Fixed a bug regarding 32-bit effective addresses of the form
+<code><nobr>[other_register+ESP]</nobr></code>.
+<li>Documentary changes, notably documentation of the fact that Borland
+Win32 compilers use `obj' rather than `win32' object format.
+<li>Fixed the COMENT record in OBJ files, which was formatted incorrectly.
+<li>Fixed a bug causing segfaults in large RDF files.
+<li>OBJ format now strips initial periods from segment and group
+definitions, in order to avoid complications with the local label syntax.
+<li>Fixed a bug in disassembling far calls and jumps in NDISASM.
+<li>Added support for user-defined sections in COFF and ELF files.
+<li>Compiled the DOS binaries with a sensible amount of stack, to prevent
+stack overflows on any arithmetic expression containing parentheses.
+<li>Fixed a bug in handling of files that do not terminate in a newline.
+</ul>
+<h4><a name="section-C.3.7">C.3.7 Version 0.91 released November 1996</a></h4>
+<ul>
+<li>Loads of bug fixes.
+<li>Support for RDF added.
+<li>Support for DBG debugging format added.
+<li>Support for 32-bit extensions to Microsoft OBJ format added.
+<li>Revised for Borland C: some variable names changed, makefile added.
+<li>LCC support revised to actually work.
+<li>JMP/CALL NEAR/FAR notation added.
+<li>`a16', `o16', `a32' and `o32' prefixes added.
+<li>Range checking on short jumps implemented.
+<li>MMX instruction support added.
+<li>Negative floating point constant support added.
+<li>Memory handling improved to bypass 64K barrier under DOS.
+<li><code><nobr>$</nobr></code> prefix to force treatment of reserved words
+as identifiers added.
+<li>Default-size mechanism for object formats added.
+<li>Compile-time configurability added.
+<li><code><nobr>#</nobr></code>, <code><nobr>@</nobr></code>,
+<code><nobr>~</nobr></code> and c{?} are now valid characters in labels.
+<li><code><nobr>-e</nobr></code> and <code><nobr>-k</nobr></code> options
+in NDISASM added.
+</ul>
+<h4><a name="section-C.3.8">C.3.8 Version 0.90 released October 1996</a></h4>
+<p>First release version. First support for object file output. Other
+changes from previous version (0.3x) too numerous to document.
+<p align=center><a href="nasmdocb.html">Previous Chapter</a> |
+<a href="nasmdoc0.html">Contents</a> |
+<a href="nasmdoci.html">Index</a>
+</body></html>