diff options
Diffstat (limited to 'doc/html/nasmdocc.html')
-rw-r--r-- | doc/html/nasmdocc.html | 1468 |
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 > +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 && 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 & 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 +<johninsd@san.rr.com>, 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 +<bit@eltech.ru>: +<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 +<hpa@zytor.com>. +<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 <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. +<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,<constant>' to +fail. Caused by an error in the `MOV EAX,<segment>' 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,<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. +<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 = < > <= >= <> (and C-like +synonyms == and !=) plus low-precedence logical operators &&, ^^ +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 `&' 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 +<lmb@comtch.iea.com>. +</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> |