diff options
Diffstat (limited to 'CHANGES')
-rw-r--r-- | CHANGES | 1237 |
1 files changed, 1237 insertions, 0 deletions
@@ -0,0 +1,1237 @@ +0.98.30 +------- + +* Changed doc files a lot: completely removed old READMExx and +Wishlist files, incorporating all information in CHANGES and TODO. +* I waited a long time to rename zoutieee.c to (original) outieee.c +* moved all output modules to output/ subdirectory. +* Added 'make strip' target to strip debug info from nasm & ndisasm. +* Added INSTALL file with installation instructions. +* Added -v option description to nasm man. +* Added dist makefile target to produce source distributions. + + +0.98.28 +------- + +* Fastcooked this for Debian's Woody release: +Frank applied the INCBIN bug patch to 0.98.25alt and called +it 0.98.28 to not confuse poor little apt-get. + + +0.98.26 +------- + +* Reorganised files even better from 0.98.25alt + + +0.98.25alt +---------- + +* Prettified the source tree. Moved files to more +reasonable places. +* Added findleak.pl script to misc/ directory. +* FIXME: Frank, document this please. + + +0.98.25 +------- + +* FIXME: Frank, document this please. + + +0.98.24p1 +--------- + +* FIXME: Frank, document this please. + + +0.98.24 +------- + +* FIXME: Frank, document this please. + + +0.98.23 +------- + +* FIXME: Frank, document this please. + + +0.98.22 +------- + +* FIXME: Frank, document this please. + + +0.98.21 +------- + +* FIXME: Frank, document this please. + + +0.98.20 +------- + +* FIXME: Frank, document this please. + + +0.98.19 +------- + +* FIXME: Frank, document this please. + + +0.98.18 +------- + +* FIXME: Frank, document this please. + + +0.98.17 +------- + +* FIXME: Frank, document this please. + + +0.98.16 +------- + +* FIXME: Frank, document this please. + + +0.98.14 +------- + +* FIXME: Frank, document this please. + + +0.98.12 +------- + +* FIXME: Frank, document this please. + + +0.98.09 +------- + +* FIXME: Frank, document this please. + + +0.98.08 +------- + +* FIXME: Frank, document this please. + + +0.98.09b with John Coffman patches released 28-Oct-2001 +------------------------------------------------------- + +Changes from 0.98.07 release to 98.09b as of 28-Oct-2001 + +* More closely compatible with 0.98 when -O0 is implied +or specified. Not strictly identical, since backward +branches in range of short offsets are recognized, and signed +byte values with no explicit size specification will be +assembled as a single byte. + +* More forgiving with the PUSH instruction. 0.98 requires +a size to be specified always. 0.98.09b will imply the size +from the current BITS setting (16 or 32). + +* Changed definition of the optimization flag: + + -O0 strict two-pass assembly, JMP and Jcc are + handled more like 0.98, except that back- + ward JMPs are short, if possible. + + -O1 strict two-pass assembly, but forward + branches are assembled with code guaranteed + to reach; may produce larger code than + -O0, but will produce successful assembly + more often if branch offset sizes are not + specified. + + -O2 multi-pass optimization, minimize branch + offsets; also will minimize signed immed- + iate bytes, overriding size specification. + + -O3 like -O2, but more passes taken, if needed + + +0.98.07 released 01/28/01 +------------------------- + +* fbk - added Stepane Denis' SSE2 instructions to a *working* + version of the code - some earlier versions were based on + broken code - sorry 'bout that. version "0.98.07" + + +01/28/01 +-------- + +* fbk - cosmetic modifications to nasm.c, nasm.h, + AUTHORS, MODIFIED + + +0.98.06f released 01/18/01 +-------------------------- + +* fbk - "metalbrain"s jecxz bug fix in insns.dat + - alter nasmdoc.src to match - version "0.98.06f" + + +0.98.06e released 01/09/01 +-------------------------- + +* fbk - removed the "outforms.h" file - it appears to be + someone's old backup of "outform.h". version "0.98.06e" + + +01/09/01 +-------- + +* fbk - finally added the fix for the "multiple %includes bug", + known since 7/27/99 - reported originally (?) and sent to + us by Austin Lunnen - he reports that John Fine had a fix + within the day. Here it is... + +* Nelson Rush resigns from the group. Big thanks to Nelson for + his leadership and enthusiasm in getting these changes + incorporated into Nasm! + +* fbk - [list +], [list -] directives - ineptly implemented, should + be re-written or removed, perhaps. + +* Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format + as well - testing might be desirable... + + +08/07/00 +-------- + +* James Seter - -postfix, -prefix command line switches. +* Yuri Zaporogets - rdoff utility changes. + + +0.98p1 +------ + +* GAS-like palign (Panos Minos) +* FIXME: Frank, fill this in with details + + +0.98bf (bug-fixed, aka brain-fuck) +---------------------------------- + +* FIXME: Frank, fill this in + + +0.98.03 with John Coffman's changes released 27-Jul-2000 +-------------------------------------------------------- + +* Added signed byte optimizations for the 0x81/0x83 class +of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR: +when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also +optimization of signed byte form of 'PUSH imm' and 'IMUL +reg,imm'/'IMUL reg,reg,imm.' No size specification is needed. + +* Added multi-pass JMP and Jcc offset optimization. Offsets +on forward references will preferentially use the short form, +without the need to code a specific size (short or near) for +the branch. Added instructions for 'Jcc label' to use the +form 'Jnotcc $+3/JMP label', in cases where a short offset +is out of bounds. If compiling for a 386 or higher CPU, then +the 386 form of Jcc will be used instead. + +This feature is controlled by a new command-line switch: "O", +(upper case letter O). "-O0" reverts the assembler to no +extra optimization passes, "-O1" allows up to 5 extra passes, +and "-O2"(default), allows up to 10 extra optimization passes. + +* Added a new directive: 'cpu XXX', where XXX is any of: +8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or +Katmai. All are case insensitive. All instructions will +be selected only if they apply to the selected cpu or lower. +Corrected a couple of bugs in cpu-dependence in 'insns.dat'. + +* Added to 'standard.mac', the "use16" and "use32" forms of +the "bits 16/32" directive. This is nothing new, just conforms +to a lot of other assemblers. (minor) + +* Changed label allocation from 320/32 (10000 labels @ 200K+) +to 32/37 (1000 labels); makes running under DOS much easier. +Since additional label space is allocated dynamically, this +should have no effect on large programs with lots of labels. +The 37 is a prime, believed to be better for hashing. (minor) + +* Integrated patchfile 0.98-0.98.01. I call this version +0.98.03, for historical reasons: 0.98.02 was trashed. + +--John Coffman <johninsd@san.rr.com> 27-Jul-2000 + + +Kendall Bennett's SciTech MGL changes +------------------------------------- +Note that you must define "TASM_COMPAT" at compile-time +to get the Tasm Ideal Mode compatibility. + +All changes can be compiled in and out using the TASM_COMPAT macros, +and when compiled without TASM_COMPAT defined we get the exact same +binary as the unmodified 0.98 sources. + +standard.mac, macros.c: + . Added macros to ignore TASM directives before first include + +nasm.h: + . Added extern declaration for tasm_compatible_mode + +nasm.c: + . Added global variable tasm_compatible_mode + . Added command line switch for TASM compatible mode (-t) + . Changed version command line to reflect when compiled with TASM additions + . Added response file processing to allow all arguments on a single + line (response file is @resp rather than -@resp for NASM format). + +labels.c: + . Changes islocal() macro to support TASM style @@local labels. + . Added islocalchar() macro to support TASM style @@local labels. + +parser.c: + . Added support for TASM style memory references (ie: mov [DWORD eax],10 + rather than the NASM style mov DWORD [eax],10). + +preproc.c: + . Added new directives, %arg, %local, %stacksize to directives table + . Added support for TASM style directives without a leading % symbol. + +Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>: + +* A new keyword %xdefine and its case-insensitive counterpart %ixdefine. + They work almost the same way as %define and %idefine but expand + the definition immediately, not on the invocation. Something like a cross + between %define and %assign. The "x" suffix stands for "eXpand", so + "xdefine" can be deciphered as "expand-and-define". Thus you can do + things like this: + + %assign ofs 0 + + %macro arg 1 + %xdefine %1 dword [esp+ofs] + %assign ofs ofs+4 + %endmacro + +* Changed the place where the expansion of %$name macros are expanded. + Now they are converted into ..@ctxnum.name form when detokenizing, so + there are no quirks as before when using %$name arguments to macros, + in macros etc. For example: + + %macro abc 1 + %define %1 hello + %endm + + abc %$here + %$here + + Now last line will be expanded into "hello" as expected. This also allows + for lots of goodies, a good example are extended "proc" macros included + in this archive. + +* Added a check for "cstk" in smacro_defined() before calling get_ctx() - + this allows for things like: + + %ifdef %$abc + %endif + + to work without warnings even in no context. + +* Added a check for "cstk" in %if*ctx and %elif*ctx directives - + this allows to use %ifctx without excessive warnings. If there is + no active context, %ifctx goes through "false" branch. + +* Removed "user error: " prefix with %error directive: it just clobbers the + output and has absolutely no functionality. Besides, this allows to write + macros that does not differ from built-in functions in any way. + +* Added expansion of string that is output by %error directive. Now you + can do things like: + + %define hello(x) Hello, x! + + %define %$name andy + %error "hello(%$name)" + + Same happened with %include directive. + +* Now all directives that expect an identifier will try to expand and + concatenate everything without whitespaces in between before usage. + For example, with "unfixed" nasm the commands + + %define %$abc hello + %define __%$abc goodbye + __%$abc + + would produce "incorrect" output: last line will expand to + + hello goodbyehello + + Not quite what you expected, eh? :-) The answer is that preprocessor + treats the %define construct as if it would be + + %define __ %$abc goodbye + + (note the white space between __ and %$abc). After my "fix" it + will "correctly" expand into + + goodbye + + as expected. Note that I use quotes around words "correct", "incorrect" + etc because this is rather a feature not a bug; however current behaviour + is more logical (and allows more advanced macro usage :-). + + Same change was applied to: + %push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine, + %assign,%iassign,%undef + +* A new directive [WARNING {+|-}warning-id] have been added. It works only + if the assembly phase is enabled (i.e. it doesn't work with nasm -e). + +* A new warning type: macro-selfref. By default this warning is disabled; + when enabled NASM warns when a macro self-references itself; for example + the following source: + + [WARNING macro-selfref] + + %macro push 1-* + %rep %0 + push %1 + %rotate 1 + %endrep + %endmacro + + push eax,ebx,ecx + + will produce a warning, but if we remove the first line we won't see it + anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor + eats such constructs without warnings at all). + +* Added a "error" routine to preprocessor which always will set ERR_PASS1 + bit in severity_code. This removes annoying repeated errors on first + and second passes from preprocessor. + +* Added the %+ operator in single-line macros for concatenating two + identifiers. Usage example: + + %define _myfunc _otherfunc + %define cextern(x) _ %+ x + cextern (myfunc) + + After first expansion, third line will become "_myfunc". After this + expansion is performed again so it becomes "_otherunc". + +* Now if preprocessor is in a non-emmitting state, no warning or error + will be emmitted. Example: + + %if 1 + mov eax,ebx + %else + put anything you want between these two brackets, + even macro-parameter references %1 or local labels %$zz + or macro-local labels %%zz - no warning will be emmitted. + %endif + +* Context-local variables on expansion as a last resort are looked up + in outer contexts. For example, the following piece: + + %push outer + %define %$a [esp] + + %push inner + %$a + %pop + %pop + + will expand correctly the fourth line to [esp]; if we'll define another + %$a inside the "inner" context, it will take precedence over outer + definition. However, this modification has been applied only to + expand_smacro and not to smacro_define: as a consequence expansion + looks in outer contexts, but %ifdef won't look in outer contexts. + + This behaviour is needed because we don't want nested contexts to + act on already defined local macros. Example: + + %define %$arg1 [esp+4] + test eax,eax + if nz + mov eax,%$arg1 + endif + + In this example the "if" mmacro enters into the "if" context, so %$arg1 + is not valid anymore inside "if". Of course it could be worked around + by using explicitely %$$arg1 but this is ugly IMHO. + +* Fixed memory leak in %undef. The origline wasn't freed before + exiting on success. + +* Fixed trap in preprocessor when line expanded to empty set of tokens. + This happens, for example, in the following case: + + #define SOMETHING + SOMETHING + + +0.98 +---- + +All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>. + +* The documentation comment delimiter is \# not #. +* Allow EQU definitions to refer to external labels; reported by + Pedro Gimeno. +* Re-enable support for RDOFF v1; reported by Pedro Gimeno. +* Updated License file per OK from Simon and Julian. + + +0.98p9 +------ + +* Update documentation (although the instruction set reference will + have to wait; I don't want to hold up the 0.98 release for it.) +* Verified that the NASM implementation of the PEXTRW and PMOVMSKB + instructions is correct. The encoding differs from what the Intel + manuals document, but the Pentium III behaviour matches NASM, not + the Intel manuals. +* Fix handling of implicit sizes in PSHUFW and PINSRW, reported by + Stefan Hoffmeister. +* Resurrect the -s option, which was removed when changing the + diagnostic output to stdout. + + +0.98p8 +------ + +* Fix for "DB" when NASM is running on a bigendian machine. +* Invoke insns.pl once for each output script, making Makefile.in + legal for "make -j". +* Improve the Unix configure-based makefiles to make package + creation easier. +* Included an RPM .spec file for building RPM (RedHat Package Manager) + packages on Linux or Unix systems. +* Fix Makefile dependency problems. +* Change src/rdsrc.pl to include sectioning information in info + output; required for install-info to work. +* Updated the RDOFF distribution to version 2 from Jules; minor + massaging to make it compile in my environment. +* Split doc files that can be built by anyone with a Perl interpreter off + into a separate archive. +* "Dress rehearsal" release! + + +0.98p7 +------ + +* Fixed opcodes with a third byte-sized immediate argument to not + complain if given "byte" on the immediate. +* Allow %undef to remove single-line macros with arguments. This + matches the behaviour of #undef in the C preprocessor. +* Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for + compatibility with most C compilers and preprocessors. This allows + Makefile options to be shared between cc and nasm, for example. +* Minor cleanups. +* Went through the list of Katmai instructions and hopefully fixed the + (rather few) mistakes in it. +* (Hopefully) fixed a number of disassembler bugs related to ambiguous + instructions (disambiguated by -p) and SSE instructions with REP. +* Fix for bug reported by Mark Junger: "call dword 0x12345678" should + work and may add an OSP (affected CALL, JMP, Jcc). +* Fix for environments when "stderr" isn't a compile-time constant. + + +0.98p6 +------ + +* Took officially over coordination of the 0.98 release; so drop + the p3.x notation. Skipped p4 and p5 to avoid confusion with John + Fine's J4 and J5 releases. +* Update the documentation; however, it still doesn't include + documentation for the various new instructions. I somehow wonder if + it makes sense to have an instruction set reference in the assembler + manual when Intel et al have PDF versions of their manuals online. +* Recognize "idt" or "centaur" for the -p option to ndisasm. +* Changed error messages back to stderr where they belong, but add an + -E option to redirect them elsewhere (the DOS shell cannot redirect + stderr.) +* -M option to generate Makefile dependencies (based on code from Alex + Verstak.) +* %undef preprocessor directive, and -u option, that undefines a + single-line macro. +* OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from + Chuck Crayne. +* Various minor bugfixes (reported by): + - Dangling %s in preproc.c (Martin Junker) +* THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am + on a trip and didn't bring the Katmai instruction reference, so I + can't work on them right now. +* Updated the License file per agreement with Simon and Jules to + include a GPL distribution clause. + + +0.98p3.7 +-------- + +* (Hopefully) fixed the canned Makefiles to include the outrdf2 and + zoutieee modules. +* Renamed changes.asm to changed.asm. + + +0.98p3.6 +-------- + +* Fixed a bunch of instructions that were added in 0.98p3.5 which had + memory operands, and the address-size prefix was missing from the + instruction pattern. + + +0.98p3.5 +-------- + +* Merged in changes from John S. Fine's 0.98-J5 release. John's based + 0.98-J5 on my 0.98p3.3 release; this merges the changes. +* Expanded the instructions flag field to a long so we can fit more + flags; mark SSE (KNI) and AMD or Katmai-specific instructions as + such. +* Fix the "PRIV" flag on a bunch of instructions, and create new + "PROT" flag for protected-mode-only instructions (orthogonal to if + the instruction is privileged!) and new "SMM" flag for SMM-only + instructions. +* Added AMD-only SYSCALL and SYSRET instructions. +* Make SSE actually work, and add new Katmai MMX instructions. +* Added a -p (preferred vendor) option to ndisasm so that it can + distinguish e.g. Cyrix opcodes also used in SSE. For example: + + ndisasm -p cyrix aliased.bin + 00000000 670F514310 paddsiw mm0,[ebx+0x10] + 00000005 670F514320 paddsiw mm0,[ebx+0x20] + ndisasm -p intel aliased.bin + 00000000 670F514310 sqrtps xmm0,[ebx+0x10] + 00000005 670F514320 sqrtps xmm0,[ebx+0x20] +* Added a bunch of Cyrix-specific instructions. + + +0.98p3.4 +-------- + +* Made at least an attempt to modify all the additional Makefiles (in + the Mkfiles directory). I can't test it, but this was the best I + could do. +* DOS DJGPP+"Opus Make" Makefile from John S. Fine. +* changes.asm changes from John S. Fine. + + +0.98p3.3 +-------- + +* Patch from Conan Brink to allow nesting of %rep directives. +* If we're going to allow INT01 as an alias for INT1/ICEBP (one of + Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3 + as well. +* Updated changes.asm to include the latest changes. +* Tried to clean up the <CR>s that had snuck in from a DOS/Windows + environment into my Unix environment, and try to make sure than + DOS/Windows users get them back. +* We would silently generate broken tools if insns.dat wasn't sorted + properly. Change insns.pl so that the order doesn't matter. +* Fix bug in insns.pl (introduced by me) which would cause conditional + instructions to have an extra "cc" in disassembly, e.g. "jnz" + disassembled as "jccnz". + + +0.98p3.2 +-------- + +* Merged in John S. Fine's changes from his 0.98-J4 prerelease; see + http://www.csoft.net/cz/johnfine/ +* Changed previous "spotless" Makefile target (appropriate for distribution) + to "distclean", and added "cleaner" target which is same as "clean" + except deletes files generated by Perl scripts; "spotless" is union. +* Removed BASIC programs from distribution. Get a Perl interpreter + instead (see below.) +* Calling this "pre-release 3.2" rather than "p3-hpa2" because of + John's contributions. +* Actually link in the IEEE output format (zoutieee.c); fix a bunch of + compiler warnings in that file. Note I don't know what IEEE output + is supposed to look like, so these changes were made "blind". + + +0.98p3-hpa +---------- + +* Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully + buildable version for Unix systems (Makefile.in updates, etc.) +* Changed insns.pl to create the instruction tables in nasm.h and + names.c, so that a new instruction can be added by adding it *only* + to insns.dat. +* Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE, + FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel + guarantee will never be used; one of them is documented as UD2 in + Intel documentation, the other one just as "Undefined Opcode" -- + calling it UD1 seemed to make sense.) +* MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10 + characters long. Now MAX_SYMBOL is derived from insns.dat. +* A note on the BASIC programs included: forget them. insns.bas is + already out of date. Get yourself a Perl interpreter for your + platform of choice at: + + http://www.cpan.org/ports/index.html + + +0.98 pre-release 3 +------------------- + +added response file support, improved command line handling, new layout +help screen + +fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff +related bugs, updated Wishlist; 0.98 Prerelease 3. + + +0.98 pre-release 2 +------------------- + +fixed bug in outcoff.c to do with truncating section names longer +than 8 characters, referencing beyond end of string; 0.98 pre-release 2 + + +0.98 pre-released May 1999 +-------------------------- + +Fixed a bug whereby STRUC didn't work at all in RDF. + +Fixed a problem with group specification in PUBDEFs in OBJ. + +Improved ease of adding new output formats. Contribution due to +Fox Cutter. + +Fixed a bug in relocations in the `bin' format: was showing up when +a relocatable reference crossed an 8192-byte boundary in any output +section. + +Fixed a bug in local labels: local-label lookups were inconsistent +between passes one and two if an EQU occurred between the definition +of a global label and the subsequent use of a local label local to +that global. + +Fixed a seg-fault in the preprocessor (again) which happened when +you use a blank line as the first line of a multi-line macro +definition and then defined a label on the same line as a call to +that macro. + +Fixed a stale-pointer bug in the handling of the NASM environment +variable. Thanks to Thomas McWilliams. + +ELF had a hard limit on the number of sections which caused +segfaults when transgressed. Fixed. + +Added ability for ndisasm to read from stdin by using `-' as the +filename. + +ndisasm wasn't outputting the TO keyword. Fixed. + +Fixed error cascade on bogus expression in %if - an error in +evaluation was causing the entire %if to be discarded, thus creating +trouble later when the %else or %endif was encountered. + +Forward reference tracking was instruction-granular not operand- +granular, which was causing 286-specific code to be generated +needlessly on code of the form `shr word [forwardref],1'. Thanks to +Jim Hague for sending a patch. + +All messages now appear on stdout, as sending them to stderr serves +no useful purpose other than to make redirection difficult. + +Fixed the problem with EQUs pointing to an external symbol - this +now generates an error message. + +Allowed multiple size prefixes to an operand, of which only the first +is taken into account. + +Incorporated John Fine's changes, including fixes of a large number +of preprocessor bugs, some small problems in OBJ, and a reworking of +label handling to define labels before their line is assembled, rather +than after. + +Reformatted a lot of the source code to be more readable. Included +'coding.txt' as a guideline for how to format code for contributors. + +Stopped nested %reps causing a panic - they now cause a slightly more +friendly error message instead. + +Fixed floating point constant problems (patch by Pedro Gimeno) + +Fixed the return value of insn_size() not being checked for -1, indicating +an error. + +Incorporated 3D now instructions. + +Fixed the 'mov eax, eax + ebx' bug. + +Fixed the GLOBAL EQU bug in ELF. Released developers release 3. + +Incorporated John Fine's command line parsing changes + +Incorporated David Lindauer's OMF debug support + +Made changes for LCC 4.0 support (__NASM_CDecl__, removed register size +specification warning when sizes agree). + +Released NASM 0.98 Pre-release 1 + + +0.97 released December 1997 +--------------------------- + +This was entirely a bug-fix release to 0.96, which seems to have got +cursed. Silly me. + +Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to +fail. Caused by an error in the `MOV EAX,<segment>' support. + +ndisasm hung at EOF when compiled with lcc on Linux because lcc on +Linux somehow breaks feof(). ndisasm now does not rely on feof(). + +A heading in the documentation was missing due to a markup error in +the indexing. Fixed. + +Fixed failure to update all pointers on realloc() within extended- +operand code in parser.c. Was causing wrong behaviour and seg faults +on lines such as `dd 0.0,0.0,0.0,0.0,...' + +Fixed a subtle preprocessor bug whereby invoking one multi-line +macro on the first line of the expansion of another, when the second +had been invoked with a label defined before it, didn't expand the +inner macro. + +Added internal.doc back in to the distribution archives - it was +missing in 0.96 *blush* + +Fixed bug causing 0.96 to be unable to assemble its own test files, +specifically objtest.asm. *blush again* + +Fixed seg-faults and bogus error messages caused by mismatching +%rep and %endrep within multi-line macro definitions. + +Fixed a problem with buffer overrun in OBJ, which was causing +corruption at ends of long PUBDEF records. + +Separated DOS archives into main-program and documentation to reduce +download size. + + +0.96 released November 1997 +--------------------------- + +Fixed a bug whereby, if `nasm sourcefile' would cause a filename +collision warning and put output into `nasm.out', then `nasm +sourcefile -o outputfile' still gave the warning even though the +`-o' was honoured. + +Fixed name pollution under Digital UNIX: one of its header files +defined R_SP, which broke the enum in nasm.h. + +Fixed minor instruction table problems: FUCOM and FUCOMP didn't have +two-operand forms; NDISASM didn't recognise the longer register +forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was +flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand +size prefixes; `AAD imm' and `AAM imm' are no longer flagged as +undocumented because the Intel Architecture reference documents +them. + +Fixed a problem with the local-label mechanism, whereby strange +types of symbol (EQUs, auto-defined OBJ segment base symbols) +interfered with the `previous global label' value and screwed up +local labels. + +Fixed a bug whereby the stub preprocessor didn't communicate with +the listing file generator, so that the -a and -l options in +conjunction would produce a useless listing file. + +Merged `os2' object file format back into `obj', after discovering +that `obj' _also_ shouldn't have a link pass separator in a module +containing a non-trivial MODEND. Flat segments are now declared +using the FLAT attribute. `os2' is no longer a valid object format +name: use `obj'. + +Removed the fixed-size temporary storage in the evaluator. Very very +long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or +so) should now no longer crash NASM. + +Fixed a bug involving segfaults on disassembly of MMX instructions, +by changing the meaning of one of the operand-type flags in nasm.h. +This may cause other apparently unrelated MMX problems; it needs to +be tested thoroughly. + +Fixed some buffer overrun problems with large OBJ output files. +Thanks to DJ Delorie for the bug report and fix. + +Made preprocess-only mode actually listen to the %line markers as it +prints them, so that it can report errors more sanely. + +Re-designed the evaluator to keep more sensible track of expressions +involving forward references: can now cope with previously-nightmare +situations such as + mov ax,foo | bar + foo equ 1 + bar equ 2 + +Added the ALIGN and ALIGNB standard macros. + +Added PIC support in ELF: use of WRT to obtain the four extra +relocation types needed. + +Added the ability for output file formats to define their own +extensions to the GLOBAL, COMMON and EXTERN directives. + +Implemented common-variable alignment, and global-symbol type and +size declarations, in ELF. + +Implemented NEAR and FAR keywords for common variables, plus +far-common element size specification, in OBJ. + +Added a feature whereby EXTERNs and COMMONs in OBJ can be given a +default WRT specification (either a segment or a group). + +Transformed the Unix NASM archive into an auto-configuring package. + +Added a sanity-check for people applying SEG to things which are +already segment bases: this previously went unnoticed by the SEG +processing and caused OBJ-driver panics later. + +Added the ability, in OBJ format, to deal with `MOV EAX,<segment>' +type references: OBJ doesn't directly support dword-size segment +base fixups, but as long as the low two bytes of the constant term +are zero, a word-size fixup can be generated instead and it will +work. + +Added the ability to specify sections' alignment requirements in +Win32 object files and pure binary files. + +Added preprocess-time expression evaluation: the %assign (and +%iassign) directive and the bare %if (and %elif) conditional. Added +relational operators to the evaluator, for use only in %if +constructs: the standard relationals = < > <= >= <> (and C-like +synonyms == and !=) plus low-precedence logical operators &&, ^^ and +||. + +Added a preprocessor repeat construct: %rep / %exitrep / %endrep. + +Added the __FILE__ and __LINE__ standard macros. + +Added a sanity check for number constants being greater than +0xFFFFFFFF. The warning can be disabled. + +Added the %0 token whereby a variadic multi-line macro can tell how +many parameters it's been given in a specific invocation. + +Added %rotate, allowing multi-line macro parameters to be cycled. + +Added the `*' option for the maximum parameter count on multi-line +macros, allowing them to take arbitrarily many parameters. + +Added the ability for the user-level forms of EXTERN, GLOBAL and +COMMON to take more than one argument. + +Added the IMPORT and EXPORT directives in OBJ format, to deal with +Windows DLLs. + +Added some more preprocessor %if constructs: %ifidn / %ifidni (exact +textual identity), and %ifid / %ifnum / %ifstr (token type testing). + +Added the ability to distinguish SHL AX,1 (the 8086 version) from +SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to +be 1). + +Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete +with PIC shared library features. + +Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT, +FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the +otherwise accepted standard. The previous behaviour, though it was a +deliberate feature, was a deliberate feature based on a +misunderstanding. Apologies for the inconvenience. + +Improved the flexibility of ABSOLUTE: you can now give it an +expression rather than being restricted to a constant, and it can +take relocatable arguments as well. + +Added the ability for a variable to be declared as EXTERN multiple +times, and the subsequent definitions are just ignored. + +We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be +alone on a line (without a following instruction). + +Improved sanity checks on whether the arguments to EXTERN, GLOBAL +and COMMON are valid identifiers. + +Added misc/exebin.mac to allow direct generation of .EXE files by +hacking up an EXE header using DB and DW; also added test/binexe.asm +to demonstrate the use of this. Thanks to Yann Guidon for +contributing the EXE header code. + +ndisasm forgot to check whether the input file had been successfully +opened. Now it does. Doh! + +Added the Cyrix extensions to the MMX instruction set. + +Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be +assembled differently. This is important since [ESI+EBP] and +[EBP+ESI] have different default base segment registers. + +Added support for the PharLap OMF extension for 4096-byte segment +alignment. + + +0.95 released July 1997 +----------------------- + +Fixed yet another ELF bug. This one manifested if the user relied on +the default segment, and attempted to define global symbols without +first explicitly declaring the target segment. + +Added makefiles (for NASM and the RDF tools) to build Win32 console +apps under Symantec C++. Donated by Mark Junker. + +Added `macros.bas' and `insns.bas', QBasic versions of the Perl +scripts that convert `standard.mac' to `macros.c' and convert +`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark +Junker. + +Changed the diassembled forms of the conditional instructions so +that JB is now emitted as JC, and other similar changes. Suggested +list by Ulrich Doewich. + +Added `@' to the list of valid characters to begin an identifier +with. + +Documentary changes, notably the addition of the `Common Problems' +section in nasm.doc. + +Fixed a bug relating to 32-bit PC-relative fixups in OBJ. + +Fixed a bug in perm_copy() in labels.c which was causing exceptions +in cleanup_labels() on some systems. + +Positivity sanity check in TIMES argument changed from a warning to +an error following a further complaint. + +Changed the acceptable limits on byte and word operands to allow +things like `~10111001b' to work. + +Fixed a major problem in the preprocessor which caused seg-faults if +macro definitions contained blank lines or comment-only lines. + +Fixed inadequate error checking on the commas separating the +arguments to `db', `dw' etc. + +Fixed a crippling bug in the handling of macros with operand counts +defined with a `+' modifier. + +Fixed a bug whereby object file formats which stored the input file +name in the output file (such as OBJ and COFF) weren't doing so +correctly when the output file name was specified on the command +line. + +Removed [INC] and [INCLUDE] support for good, since they were +obsolete anyway. + +Fixed a bug in OBJ which caused all fixups to be output in 16-bit +(old-format) FIXUPP records, rather than putting the 32-bit ones in +FIXUPP32 (new-format) records. + +Added, tentatively, OS/2 object file support (as a minor variant on +OBJ). + +Updates to Fox Cutter's Borland C makefile, Makefile.bc2. + +Removed a spurious second fclose() on the output file. + +Added the `-s' command line option to redirect all messages which +would go to stderr (errors, help text) to stdout instead. + +Added the `-w' command line option to selectively suppress some +classes of assembly warning messages. + +Added the `-p' pre-include and `-d' pre-define command-line options. + +Added an include file search path: the `-i' command line option. + +Fixed a silly little preprocessor bug whereby starting a line with a +`%!' environment-variable reference caused an `unknown directive' +error. + +Added the long-awaited listing file support: the `-l' command line +option. + +Fixed a problem with OBJ format whereby, in the absence of any +explicit segment definition, non-global symbols declared in the +implicit default segment generated spurious EXTDEF records in the +output. + +Added the NASM environment variable. + +From this version forward, Win32 console-mode binaries will be +included in the DOS distribution in addition to the 16-bit binaries. +Added Makefile.vc for this purpose. + +Added `return 0;' to test/objlink.c to prevent compiler warnings. + +Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines. + +Added an alternative memory-reference syntax in which prefixing an +operand with `&' is equivalent to enclosing it in square brackets, +at the request of Fox Cutter. + +Errors in pass two now cause the program to return a non-zero error +code, which they didn't before. + +Fixed the single-line macro cycle detection, which didn't work at +all on macros with no parameters (caused an infinite loop). Also +changed the behaviour of single-line macro cycle detection to work +like cpp, so that macros like `extrn' as given in the documentation +can be implemented. + +Fixed the implementation of WRT, which was too restrictive in that +you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't +a relocatable reference. + + +0.94 released April 1997 +------------------------ + +Major item: added the macro processor. + +Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also +reorganised CMPXCHG instruction into early-486 and Pentium forms. +Thanks to Thobias Jones for the information. + +Fixed two more stupid bugs in ELF, which were causing `ld' to +continue to seg-fault in a lot of non-trivial cases. + +Fixed a seg-fault in the label manager. + +Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is +the only option for BCD loads/stores in any case. + +Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if +anyone bothers to provide it. Previously they complained unless no +keyword at all was present. + +Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a +vestige of a bug that I thought had been fixed in 0.92. This was +fixed, hopefully for good this time... + +Another minor phase error (insofar as a phase error can _ever_ be +minor) fixed, this one occurring in code of the form + rol ax,forward_reference + forward_reference equ 1 + +The number supplied to TIMES is now sanity-checked for positivity, +and also may be greater than 64K (which previously didn't work on +16-bit systems). + +Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr. + +Added the INCBIN pseudo-opcode. + +Due to the advent of the preprocessor, the [INCLUDE] and [INC] +directives have become obsolete. They are still supported in this +version, with a warning, but won't be in the next. + +Fixed a bug in OBJ format, which caused incorrect object records to +be output when absolute labels were made global. + +Updates to RDOFF subdirectory, and changes to outrdf.c. + + +0.93 released January 1997 +-------------------------- + +This release went out in a great hurry after semi-crippling bugs +were found in 0.92. + +Really _did_ fix the stack overflows this time. *blush* + +Had problems with EA instruction sizes changing between passes, when +an offset contained a forward reference and so 4 bytes were +allocated for the offset in pass one; by pass two the symbol had +been defined and happened to be a small absolute value, so only 1 +byte got allocated, causing instruction size mismatch between passes +and hence incorrect address calculations. Fixed. + +Stupid bug in the revised ELF section generation fixed (associated +string-table section for .symtab was hard-coded as 7, even when this +didn't fit with the real section table). Was causing `ld' to +seg-fault under Linux. + +Included a new Borland C makefile, Makefile.bc2, donated by Fox +Cutter <lmb@comtch.iea.com>. + + +0.92 released January 1997 +-------------------------- + +The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was +fixed. This also affected the LCC driver. + +Fixed a bug regarding 32-bit effective addresses of the form +[other_register+ESP]. + +Documentary changes, notably documentation of the fact that Borland +Win32 compilers use `obj' rather than `win32' object format. + +Fixed the COMENT record in OBJ files, which was formatted +incorrectly. + +Fixed a bug causing segfaults in large RDF files. + +OBJ format now strips initial periods from segment and group +definitions, in order to avoid complications with the local label +syntax. + +Fixed a bug in disassembling far calls and jumps in NDISASM. + +Added support for user-defined sections in COFF and ELF files. + +Compiled the DOS binaries with a sensible amount of stack, to +prevent stack overflows on any arithmetic expression containing +parentheses. + +Fixed a bug in handling of files that do not terminate in a newline. + + +0.91 released November 1996 +--------------------------- + +Loads of bug fixes. +Support for RDF added. +Support for DBG debugging format added. +Support for 32-bit extensions to Microsoft OBJ format added. +Revised for Borland C: some variable names changed, makefile added. +LCC support revised to actually work. +JMP/CALL NEAR/FAR notation added. +`a16', `o16', `a32' and `o32' prefixes added. +Range checking on short jumps implemented. +MMX instruction support added. +Negative floating point constant support added. +Memory handling improved to bypass 64K barrier under DOS. +$ prefix to force treatment of reserved words as identifiers added. +Default-size mechanism for object formats added. +Compile-time configurability added. +`#', `@', `~' and `?' are now valid characters in labels. +`-e' and `-k' options in NDISASM added. + + +0.90 released October 1996 +-------------------------- + +First release version. First support for object file output. Other +changes from previous version (0.3x) too numerous to document. |