blob: f336d93ee091c3e37195410a99a4f544de5562a9 [file] [log] [blame]
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001\#
2\# NASM revision history in nasmdoc format
3\#
4
5\H{cl-2.xx} NASM 2 Series
6
7The NASM 2 series support x86-64, and is the production version of NASM
8since 2007.
9
10
H. Peter Anvinb34fce72008-10-24 16:05:19 -070011\S{cl-2.06} Version 2.06
12
13\b Support for indirect macro expansion (\c{%[...]}). See \k{indmacro}.
14
H. Peter Anvin0b7d9032008-10-24 16:27:11 -070015\b \c{%pop} can now take an argument, see \k{pushpop}.
16
H. Peter Anvin264b7b92008-10-24 16:38:17 -070017\b The argument to \c{%use} is no longer macro-expanded. Use
18 \c{%[...]} if macro expansion is desired.
19
H. Peter Anvine263d042008-11-02 20:41:29 -080020\b Support for thread-local storage in ELF32 and ELF64. See \k{elftls}.
21
H. Peter Anvin67a405e2008-11-04 14:26:32 -080022\b Fix crash on \c{%ifmacro} without an argument.
23
H. Peter Anvin67478812008-11-06 09:42:11 -080024\b Correct the arguments to the \c{POPCNT} instruction.
25
H. Peter Anvinfd925d92008-12-22 16:37:59 -080026\b Fix section alignment in the Mach-O format.
27
H. Peter Anvine8a3e622009-02-18 14:13:25 -080028\b Update AVX support to version 5 of the Intel specification.
29
H. Peter Anvinb34fce72008-10-24 16:05:19 -070030
H. Peter Anvin7714ced2008-10-29 10:51:51 -070031\S{cl-2.05.01} Version 2.05.01
32
33\b Fix the \c{-w}/\c{-W} option parsing, which was broken in NASM 2.05.
34
35
H. Peter Anvindc0bf472008-09-30 16:24:47 -070036\S{cl-2.05} Version 2.05
37
H. Peter Anvin1abb9e52008-09-30 17:14:54 -070038\b Fix redundant REX.W prefix on \c{JMP reg64}.
39
H. Peter Anvindc0bf472008-09-30 16:24:47 -070040\b Make the behaviour of \c{-O0} match NASM 0.98 legacy behavior.
41 See \k{opt-O}.
42
H. Peter Anvin2f160432008-09-30 16:39:17 -070043\b \c{-w-user} can be used to suppress the output of \c{%warning} directives.
44 See \k{opt-w}.
45
H. Peter Anvina3a60e92008-10-01 10:02:44 -070046\b Fix bug where \c{ALIGN} would issue a full alignment datum instead of
47 zero bytes.
48
49\b Fix offsets in list files.
50
51\b Fix \c{%include} inside multi-line macros or loops.
52
H. Peter Anvin6c80ab62008-10-04 18:50:47 -070053\b Fix error where NASM would generate a spurious warning on valid
54 optimizations of immediate values.
55
H. Peter Anvin04c60522008-10-06 18:00:13 -070056\b Fix arguments to a number of the \c{CVT} SSE instructions.
57
H. Peter Anvin68b41d32008-10-06 19:15:42 -070058\b Fix RIP-relative offsets when the instruction carries an immediate.
59
H. Peter Anvin3ffd0fc2008-10-17 23:36:45 -070060\b Massive overhaul of the ELF64 backend for spec compliance.
H. Peter Anvin8cd1df82008-10-12 21:17:04 -070061
H. Peter Anvin7766ab02008-10-23 19:29:28 -070062\b Fix the Geode \c{PFRCPV} and \c{PFRSQRTV} instruction.
63
64\b Fix the SSE 4.2 \c{CRC32} instruction.
65
H. Peter Anvindc0bf472008-09-30 16:24:47 -070066
H. Peter Anvin04156cd2008-07-14 02:45:57 -040067\S{cl-2.04} Version 2.04
68
H. Peter Anvin6477f3d2008-07-14 02:49:52 -040069\b Sanitize macro handing in the \c{%error} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -040070
H. Peter Anvin6477f3d2008-07-14 02:49:52 -040071\b New \c{%warning} directive to issue user-controlled warnings.
H. Peter Anvin04156cd2008-07-14 02:45:57 -040072
H. Peter Anvin8e3f75e2008-09-24 00:21:58 -070073\b \c{%error} directives are now deferred to the final assembly phase.
74
75\b New \c{%fatal} directive to immediately terminate assembly.
76
H. Peter Anvindf73e0b2008-09-03 15:16:44 -070077\b New \c{%strcat} directive to join quoted strings together.
H. Peter Anvin04156cd2008-07-14 02:45:57 -040078
H. Peter Anvindf73e0b2008-09-03 15:16:44 -070079\b New \c{%use} macro directive to support standard macro directives. See
80 \k{use}.
81
82\b Excess default parameters to \c{%macro} now issues a warning by default.
83 See \k{mlmacro}.
84
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -070085\b Fix \c{%ifn} and \c{%elifn}.
86
87\b Fix nested \c{%else} clauses.
88
89\b Correct the handling of nested \c{%rep}s.
90
91\b New \c{%unmacro} directive to undeclare a multi-line macro.
92 See \k{unmacro}.
93
H. Peter Anvin010aee22008-09-24 17:34:37 -070094\b Builtin macro \c{__PASS__} which expands to the current assembly pass.
95 See \k{pass_macro}.
96
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -070097\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
98 strings. See \k{unicode}.
99
100\b Fix bug in case-insensitive matching when compiled on platforms that
101 don't use the \c{configure} script. Of the official release binaries,
102 that only affected the OS/2 binary.
103
104\b Support for x87 packed BCD constants. See \k{bcdconst}.
105
106\b Correct the \c{LTR} and \c{SLDT} instructions in 64-bit mode.
107
108\b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
109
110\b Add AVX versions of the AES instructions (\c{VAES}...).
111
112\b Fix the 256-bit FMA instructions.
113
114\b Add 256-bit AVX stores per the latest AVX spec.
115
116\b VIA XCRYPT instructions can now be written either with or without
117 \c{REP}, apparently different versions of the VIA spec wrote them
118 differently.
119
120\b Add missing 64-bit \c{MOVNTI} instruction.
121
122\b Fix the operand size of \c{VMREAD} and \c{VMWRITE}.
123
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700124\b Numerous bug fixes, especially to the AES, AVX and VTX instructions.
125
H. Peter Anvina2d542c2008-09-10 23:04:56 -0700126\b The optimizer now always runs until it converges. It also runs even
127 when disabled, but doesn't optimize. This allows most forward references
128 to be resolved properly.
129
H. Peter Anvinc83f9de2008-10-24 16:53:53 -0700130\b \c{%push} no longer needs a context identifier; omitting the context
131 identifier results in an anonymous context.
132
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400133
134\S{cl-2.03.01} Version 2.03.01
135
136\b Fix buffer overflow in the listing module.
137
138\b Fix the handling of hexadecimal escape codes in `...` strings.
139
140\b The Postscript/PDF documentation has been reformatted.
141
142\b The \c{-F} option now implies \c{-g}.
143
144
145\S{cl-2.03} Version 2.03
146
147\b Add support for Intel AVX, CLMUL and FMA instructions,
148including YMM registers.
149
150\b \c{dy}, \c{resy} and \c{yword} for 32-byte operands.
151
152\b Fix some SSE5 instructions.
153
154\b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions.
155
156\b Fix checking for critical expressions when the optimizer is enabled.
157
158\b Support the DWARF debugging format for ELF targets.
159
160\b Fix optimizations of signed bytes.
161
162\b Fix operation on bigendian machines.
163
164\b Fix buffer overflow in the preprocessor.
165
166\b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH).
167
168\b \c{%?} and \c{%??} to refer to the name of a macro itself. In particular,
169\c{%idefine keyword $%?} can be used to make a keyword "disappear".
170
171\b New options for dependency generation: \c{-MD}, \c{-MF},
172\c{-MP}, \c{-MT}, \c{-MQ}.
173
174\b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN
175reimplemented as a macro.
176
177\b \c{%include} now resolves macros in a sane manner.
178
179\b \c{%substr} can now be used to get other than one-character substrings.
180
181\b New type of character/string constants, using backquotes (\c{`...`}),
182which support C-style escape sequences.
183
184\b \c{%defstr} and \c{%idefstr} to stringize macro definitions before
185creation.
186
187\b Fix forward references used in \c{EQU} statements.
188
189\S{cl-2.02} Version 2.02
190
191
192\b Additional fixes for MMX operands with explicit \c{qword}, as well as
193 (hopefully) SSE operands with \c{oword}.
194
195\b Fix handling of truncated strings with \c{DO}.
196
197\b Fix segfaults due to memory overwrites when floating-point constants
198 were used.
199
200\b Fix segfaults due to missing include files.
201
202\b Fix OpenWatcom Makefiles for DOS and OS/2.
203
204\b Add autogenerated instruction list back into the documentation.
205
206\b ELF: Fix segfault when generating stabs, and no symbols have been
207 defined.
208
209\b ELF: Experimental support for DWARF debugging information.
210
211\b New compile date and time standard macros.
212
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400213\b \c{%ifnum} now returns true for negative numbers.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400214
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400215\b New \c{%iftoken} test for a single token.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400216
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400217\b New \c{%ifempty} test for empty expansion.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400218
219\b Add support for the \c{XSAVE} instruction group.
220
221\b Makefile for Netware/gcc.
222
223\b Fix issue with some warnings getting emitted way too many times.
224
225\b Autogenerated instruction list added to the documentation.
226
227\S{cl-2.01} Version 2.01
228
229
230\b Fix the handling of MMX registers with explicit \c{qword} tags on
231 memory (broken in 2.00 due to 64-bit changes.)
232
233\b Fix the PREFETCH instructions.
234
235\b Fix the documentation.
236
237\b Fix debugging info when using \c{-f elf}
238(backwards compatibility alias for \c{-f elf32}).
239
240\b Man pages for rdoff tools (from the Debian project.)
241
242\b ELF: handle large numbers of sections.
243
244\b Fix corrupt output when the optimizer runs out of passes.
245
246
247\S{cl-2.00} Version 2.00
248
249\b Added c99 data-type compliance.
250
251\b Added general x86-64 support.
252
253\b Added win64 (x86-64 COFF) output format.
254
255\b Added \c{__BITS__} standard macro.
256
257\b Renamed the \c{elf} output format to \c{elf32} for clarity.
258
259\b Added \c{elf64} and \c{macho} (MacOS X) output formats.
260
261\b Added Numeric constants in \c{dq} directive.
262
263\b Added \c{oword}, \c{do} and \c{reso} pseudo operands.
264
265\b Allow underscores in numbers.
266
267\b Added 8-, 16- and 128-bit floating-point formats.
268
269\b Added binary, octal and hexadecimal floating-point.
270
271\b Correct the generation of floating-point constants.
272
273\b Added floating-point option control.
274
275\b Added Infinity and NaN floating point support.
276
277\b Added ELF Symbol Visibility support.
278
279\b Added setting OSABI value in ELF header directive.
280
281\b Added Generate Makefile Dependencies option.
282
283\b Added Unlimited Optimization Passes option.
284
285\b Added \c{%IFN} and \c{%ELIFN} support.
286
287\b Added Logical Negation Operator.
288
289\b Enhanced Stack Relative Preprocessor Directives.
290
291\b Enhanced ELF Debug Formats.
292
293\b Enhanced Send Errors to a File option.
294
295\b Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
296
297\b Added a large number of additional instructions.
298
299\b Significant performance improvements.
300
H. Peter Anvin8a2f1452008-10-29 18:14:03 -0700301\b \c{-w+warning} and \c{-w-warning} can now be written as -Wwarning and
302 -Wno-warning, respectively. See \k{opt-w}.
303
304\b Add \c{-w+error} to treat warnings as errors. See \k{opt-w}.
305
306\b Add \c{-w+all} and \c{-w-all} to enable or disable all suppressible
307 warnings. See \k{opt-w}.
308
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400309
310\H{cl-0.98.xx} NASM 0.98 Series
311
312The 0.98 series was the production versions of NASM from 1999 to 2007.
313
314
315\S{cl-0.98.39} Version 0.98.39
316
317\b fix buffer overflow
318
319\b fix outas86's \c{.bss} handling
320
321\b "make spotless" no longer deletes config.h.in.
322
323\b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300).
324
325\b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol.
326
327\S{cl-0.98.38} Version 0.98.38
328
329
330\b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
331 \c{mkdep.pl} to be able to generate completely pathless dependencies, as
332 required by OpenWatcom wmake (it supports path searches, but not
333 explicit paths.)
334
335\b Fix the \c{STR} instruction.
336
337\b Fix the ELF output format, which was broken under certain
338 circumstances due to the addition of stabs support.
339
340\b Quick-fix Borland format debug-info for \c{-f obj}
341
342\b Fix for \c{%rep} with no arguments (#560568)
343
344\b Fix concatenation of preprocessor function call (#794686)
345
346\b Fix long label causes coredump (#677841)
347
348\b Use autoheader as well as autoconf to keep configure from generating
349 ridiculously long command lines.
350
351\b Make sure that all of the formats which support debugging output
352 actually will suppress debugging output when \c{-g} not specified.
353
354\S{cl-0.98.37} Version 0.98.37
355
356
357\b Paths given in \c{-I} switch searched for \c{incbin}-ed as
358 well as \c{%include}-ed files.
359
360\b Added stabs debugging for the ELF output format, patch from
361 Martin Wawro.
362
363\b Fix \c{output/outbin.c} to allow origin > 80000000h.
364
365\b Make \c{-U} switch work.
366
367\b Fix the use of relative offsets with explicit prefixes, e.g.
368\c{a32 loop foo}.
369
370\b Remove \c{backslash()}.
371
372\b Fix the \c{SMSW} and \c{SLDT} instructions.
373
374\b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}.
375If you mean the latter, please say so! :)
376
377\S{cl-0.98.36} Version 0.98.36
378
379
380\b Update rdoff - librarian/archiver - common rec - docs!
381
382\b Fix signed/unsigned problems.
383
384\b Fix \c{JMP FAR label} and \c{CALL FAR label}.
385
386\b Add new multisection support - map files - fix align bug
387
388\b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
389
390\b \c{Q} or \c{O} suffixes indicate octal
391
392\b Support Prescott new instructions (PNI).
393
394\b Cyrix \c{XSTORE} instruction.
395
396
397\S{cl-0.98.35} Version 0.98.35
398
399\b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
400
401\b Fix dependencies and compiler warnings.
402
403\b Add "const" in a number of places.
404
405\b Add -X option to specify error reporting format (use -Xvc to
406 integrate with Microsoft Visual Studio.)
407
408\b Minor changes for code legibility.
409
410\b Drop use of tmpnam() in rdoff (security fix.)
411
412
413\S{cl-0.98.34} Version 0.98.34
414
415\b Correct additional address-size vs. operand-size confusions.
416
417\b Generate dependencies for all Makefiles automatically.
418
419\b Add support for unimplemented (but theoretically available)
420 registers such as tr0 and cr5. Segment registers 6 and 7 are called
421 segr6 and segr7 for the operations which they can be represented.
422
423\b Correct some disassembler bugs related to redundant address-size prefixes.
424 Some work still remains in this area.
425
426\b Correctly generate an error for things like "SEG eax".
427
428\b Add the JMPE instruction, enabled by "CPU IA64".
429
430\b Correct compilation on newer gcc/glibc platforms.
431
432\b Issue an error on things like "jmp far eax".
433
434
435\S{cl-0.98.33} Version 0.98.33
436
437\b New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
438 round out the version-query macros. version.pl now understands
439 X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
440 X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
441
442\b New keyword "strict" to disable the optimization of specific
443 operands.
444
445\b Fix the handing of size overrides with JMP instructions
446 (instructions such as "jmp dword foo".)
447
448\b Fix the handling of "ABSOLUTE label", where "label" points into a
449 relocatable segment.
450
451\b Fix OBJ output format with lots of externs.
452
453\b More documentation updates.
454
455\b Add -Ov option to get verbose information about optimizations.
456
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400457\b Undo a braindead change which broke \c{%elif} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400458
459\b Makefile updates.
460
461
462\S{cl-0.98.32} Version 0.98.32
463
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400464\b Fix NASM crashing when \c{%macro} directives were left unterminated.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400465
466\b Lots of documentation updates.
467
468\b Complete rewrite of the PostScript/PDF documentation generator.
469
470\b The MS Visual C++ Makefile was updated and corrected.
471
472\b Recognize .rodata as a standard section name in ELF.
473
474\b Fix some obsolete Perl4-isms in Perl scripts.
475
476\b Fix configure.in to work with autoconf 2.5x.
477
478\b Fix a couple of "make cleaner" misses.
479
480\b Make the normal "./configure && make" work with Cygwin.
481
482
483\S{cl-0.98.31} Version 0.98.31
484
485\b Correctly build in a separate object directory again.
486
487\b Derive all references to the version number from the version file.
488
489\b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
490
491\b Lots of Makefile updates and bug fixes.
492
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400493\b New \c{%ifmacro} directive to test for multiline macros.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400494
495\b Documentation updates.
496
497\b Fixes for 16-bit OBJ format output.
498
499\b Changed the NASM environment variable to NASMENV.
500
501
502\S{cl-0.98.30} Version 0.98.30
503
504\b Changed doc files a lot: completely removed old READMExx and
505 Wishlist files, incorporating all information in CHANGES and TODO.
506
507\b I waited a long time to rename zoutieee.c to (original) outieee.c
508
509\b moved all output modules to output/ subdirectory.
510
511\b Added 'make strip' target to strip debug info from nasm & ndisasm.
512
513\b Added INSTALL file with installation instructions.
514
515\b Added -v option description to nasm man.
516
517\b Added dist makefile target to produce source distributions.
518
519\b 16-bit support for ELF output format (GNU extension, but useful.)
520
521
522\S{cl-0.98.28} Version 0.98.28
523
524\b Fastcooked this for Debian's Woody release:
525Frank applied the INCBIN bug patch to 0.98.25alt and called
526it 0.98.28 to not confuse poor little apt-get.
527
528
529\S{cl-0.98.26} Version 0.98.26
530
531\b Reorganised files even better from 0.98.25alt
532
533
534\S{cl-0.98.25alt} Version 0.98.25alt
535
536\b Prettified the source tree. Moved files to more reasonable places.
537
538\b Added findleak.pl script to misc/ directory.
539
540\b Attempted to fix doc.
541
542
543\S{cl-0.98.25} Version 0.98.25
544
545\b Line continuation character \c{\\}.
546
547\b Docs inadvertantly reverted - "dos packaging".
548
549
550\S{cl-0.98.24p1} Version 0.98.24p1
551
552\b FIXME: Someone, document this please.
553
554
555\S{cl-0.98.24} Version 0.98.24
556
557\b Documentation - Ndisasm doc added to Nasm.doc.
558
559
560\S{cl-0.98.23} Version 0.98.23
561
562\b Attempted to remove rdoff version1
563
564\b Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
565
566
567\S{cl-0.98.22} Version 0.98.22
568
569\b Update rdoff2 - attempt to remove v1.
570
571
572\S{cl-0.98.21} Version 0.98.21
573
574\b Optimization fixes.
575
576
577\S{cl-0.98.20} Version 0.98.20
578
579\b Optimization fixes.
580
581
582\S{cl-0.98.19} Version 0.98.19
583
584\b H. J. Lu's patch back out.
585
586
587\S{cl-0.98.18} Version 0.98.18
588
589\b Added ".rdata" to "-f win32".
590
591
592\S{cl-0.98.17} Version 0.98.17
593
594\b H. J. Lu's "bogus elf" patch. (Red Hat problem?)
595
596
597\S{cl-0.98.16} Version 0.98.16
598
599\b Fix whitespace before "[section ..." bug.
600
601
602\S{cl-0.98.15} Version 0.98.15
603
604\b Rdoff changes (?).
605
606\b Fix fixes to memory leaks.
607
608
609\S{cl-0.98.14} Version 0.98.14
610
611\b Fix memory leaks.
612
613
614\S{cl-0.98.13} Version 0.98.13
615
616\b There was no 0.98.13
617
618
619\S{cl-0.98.12} Version 0.98.12
620
621\b Update optimization (new function of "-O1")
622
623\b Changes to test/bintest.asm (?).
624
625
626\S{cl-0.98.11} Version 0.98.11
627
628\b Optimization changes.
629
630\b Ndisasm fixed.
631
632
633\S{cl-0.98.10} Version 0.98.10
634
635\b There was no 0.98.10
636
637
638\S{cl-0.98.09} Version 0.98.09
639
640\b Add multiple sections support to "-f bin".
641
642\b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
643
644\b Add "-v" as an alias to the "-r" switch.
645
646\b Remove "#ifdef" from Tasm compatibility options.
647
648\b Remove redundant size-overrides on "mov ds, ex", etc.
649
650\b Fixes to SSE2, other insns.dat (?).
651
652\b Enable uppercase "I" and "P" switches.
653
654\b Case insinsitive "seg" and "wrt".
655
656\b Update install.sh (?).
657
658\b Allocate tokens in blocks.
659
660\b Improve "invalid effective address" messages.
661
662
663\S{cl-0.98.08} Version 0.98.08
664
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400665\b Add "\c{%strlen}" and "\c{%substr}" macro operators
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400666
667\b Fixed broken c16.mac.
668
669\b Unterminated string error reported.
670
671\b Fixed bugs as per 0.98bf
672
673
674\S{cl-0.98.09b with John Coffman patches released 28-Oct-2001} Version 0.98.09b with John Coffman patches released 28-Oct-2001
675
676Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
677
678\b More closely compatible with 0.98 when -O0 is implied
679or specified. Not strictly identical, since backward
680branches in range of short offsets are recognized, and signed
681byte values with no explicit size specification will be
682assembled as a single byte.
683
684\b More forgiving with the PUSH instruction. 0.98 requires
685a size to be specified always. 0.98.09b will imply the size
686from the current BITS setting (16 or 32).
687
688\b Changed definition of the optimization flag:
689
690 -O0 strict two-pass assembly, JMP and Jcc are
691 handled more like 0.98, except that back-
692 ward JMPs are short, if possible.
693
694 -O1 strict two-pass assembly, but forward
695 branches are assembled with code guaranteed
696 to reach; may produce larger code than
697 -O0, but will produce successful assembly
698 more often if branch offset sizes are not
699 specified.
700
701 -O2 multi-pass optimization, minimize branch
702 offsets; also will minimize signed immed-
703 iate bytes, overriding size specification.
704
705 -O3 like -O2, but more passes taken, if needed
706
707
708\S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01
709
710\b Added Stepane Denis' SSE2 instructions to a *working*
711 version of the code - some earlier versions were based on
712 broken code - sorry 'bout that. version "0.98.07"
713
714
71501/28/01
716
717
718\b Cosmetic modifications to nasm.c, nasm.h,
719 AUTHORS, MODIFIED
720
721
722\S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01
723
724
725\b - Add "metalbrain"s jecxz bug fix in insns.dat
726 - alter nasmdoc.src to match - version "0.98.06f"
727
728
729\S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01
730
731
732\b Removed the "outforms.h" file - it appears to be
733 someone's old backup of "outform.h". version "0.98.06e"
734
73501/09/01
736
737\b fbk - finally added the fix for the "multiple %includes bug",
738 known since 7/27/99 - reported originally (?) and sent to
739 us by Austin Lunnen - he reports that John Fine had a fix
740 within the day. Here it is...
741
742\b Nelson Rush resigns from the group. Big thanks to Nelson for
743 his leadership and enthusiasm in getting these changes
744 incorporated into Nasm!
745
746\b fbk - [list +], [list -] directives - ineptly implemented, should
747 be re-written or removed, perhaps.
748
749\b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
750 as well - testing might be desirable...
751
75208/07/00
753
754\b James Seter - -postfix, -prefix command line switches.
755
756\b Yuri Zaporogets - rdoff utility changes.
757
758
759\S{cl-0.98p1} Version 0.98p1
760
761\b GAS-like palign (Panos Minos)
762
763\b FIXME: Someone, fill this in with details
764
765
766\S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed)
767
768\b Fixed - elf and aoutb bug - shared libraries
769 - multiple "%include" bug in "-f obj"
770 - jcxz, jecxz bug
771 - unrecognized option bug in ndisasm
772
773\S{cl-0.98.03 with John Coffman's changes released 27-Jul-2000} Version 0.98.03 with John Coffman's changes released 27-Jul-2000
774
775\b Added signed byte optimizations for the 0x81/0x83 class
776of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
777when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also
778optimization of signed byte form of 'PUSH imm' and 'IMUL
779reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.
780
781\b Added multi-pass JMP and Jcc offset optimization. Offsets
782on forward references will preferentially use the short form,
783without the need to code a specific size (short or near) for
784the branch. Added instructions for 'Jcc label' to use the
785form 'Jnotcc $+3/JMP label', in cases where a short offset
786is out of bounds. If compiling for a 386 or higher CPU, then
787the 386 form of Jcc will be used instead.
788
789This feature is controlled by a new command-line switch: "O",
790(upper case letter O). "-O0" reverts the assembler to no
791extra optimization passes, "-O1" allows up to 5 extra passes,
792and "-O2"(default), allows up to 10 extra optimization passes.
793
794\b Added a new directive: 'cpu XXX', where XXX is any of:
7958086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
796Katmai. All are case insensitive. All instructions will
797be selected only if they apply to the selected cpu or lower.
798Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
799
800\b Added to 'standard.mac', the "use16" and "use32" forms of
801the "bits 16/32" directive. This is nothing new, just conforms
802to a lot of other assemblers. (minor)
803
804\b Changed label allocation from 320/32 (10000 labels @ 200K+)
805to 32/37 (1000 labels); makes running under DOS much easier.
806Since additional label space is allocated dynamically, this
807should have no effect on large programs with lots of labels.
808The 37 is a prime, believed to be better for hashing. (minor)
809
810
811\S{cl-0.98.03} Version 0.98.03
812
813"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for
814historical reasons: 0.98.02 was trashed." --John Coffman
815<johninsd@san.rr.com>, 27-Jul-2000
816
817\b Kendall Bennett's SciTech MGL changes
818
819\b Note that you must define "TASM_COMPAT" at compile-time
820to get the Tasm Ideal Mode compatibility.
821
822\b All changes can be compiled in and out using the TASM_COMPAT macros,
823and when compiled without TASM_COMPAT defined we get the exact same
824binary as the unmodified 0.98 sources.
825
826\b standard.mac, macros.c: Added macros to ignore TASM directives before
827first include
828
829\b nasm.h: Added extern declaration for tasm_compatible_mode
830
831\b nasm.c: Added global variable tasm_compatible_mode
832
833\b Added command line switch for TASM compatible mode (-t)
834
835\b Changed version command line to reflect when compiled with TASM additions
836
837\b Added response file processing to allow all arguments on a single
838line (response file is @resp rather than -@resp for NASM format).
839
840\b labels.c: Changes islocal() macro to support TASM style @@local labels.
841
842\b Added islocalchar() macro to support TASM style @@local labels.
843
844\b parser.c: Added support for TASM style memory references (ie: mov
845[DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
846
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400847\b preproc.c: Added new directives, \c{%arg}, \c{%local}, \c{%stacksize} to directives
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400848table
849
850\b Added support for TASM style directives without a leading % symbol.
851
852\b Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
853
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400854\b A new keyword \c{%xdefine} and its case-insensitive counterpart \c{%ixdefine}.
855They work almost the same way as \c{%define} and \c{%idefine} but expand
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400856the definition immediately, not on the invocation. Something like a cross
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400857between \c{%define} and \c{%assign}. The "x" suffix stands for "eXpand", so
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400858"xdefine" can be deciphered as "expand-and-define". Thus you can do
859things like this:
860
861\c %assign ofs 0
862\c
863\c %macro arg 1
864\c %xdefine %1 dword [esp+ofs]
865\c %assign ofs ofs+4
866\c %endmacro
867
868\b Changed the place where the expansion of %$name macros are expanded.
869Now they are converted into ..@ctxnum.name form when detokenizing, so
870there are no quirks as before when using %$name arguments to macros,
871in macros etc. For example:
872
873\c %macro abc 1
874\c %define %1 hello
875\c %endm
876\c
877\c abc %$here
878\c %$here
879
880 Now last line will be expanded into "hello" as expected. This also allows
881 for lots of goodies, a good example are extended "proc" macros included
882 in this archive.
883
884\b Added a check for "cstk" in smacro_defined() before calling get_ctx() -
885 this allows for things like:
886
887\c %ifdef %$abc
888\c %endif
889
890 to work without warnings even in no context.
891
892\b Added a check for "cstk" in %if*ctx and %elif*ctx directives -
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400893 this allows to use \c{%ifctx} without excessive warnings. If there is
894 no active context, \c{%ifctx} goes through "false" branch.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400895
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400896\b Removed "user error: " prefix with \c{%error} directive: it just clobbers the
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400897 output and has absolutely no functionality. Besides, this allows to write
898 macros that does not differ from built-in functions in any way.
899
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400900\b Added expansion of string that is output by \c{%error} directive. Now you
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400901 can do things like:
902
903\c %define hello(x) Hello, x!
904\c
905\c %define %$name andy
906\c %error "hello(%$name)"
907
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400908 Same happened with \c{%include} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400909
910\b Now all directives that expect an identifier will try to expand and
911 concatenate everything without whitespaces in between before usage.
912 For example, with "unfixed" nasm the commands
913
914\c %define %$abc hello
915\c %define __%$abc goodbye
916\c __%$abc
917
918 would produce "incorrect" output: last line will expand to
919
920\c hello goodbyehello
921
922 Not quite what you expected, eh? :-) The answer is that preprocessor
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400923 treats the \c{%define} construct as if it would be
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400924
925\c %define __ %$abc goodbye
926
927 (note the white space between __ and %$abc). After my "fix" it
928 will "correctly" expand into
929
930\c goodbye
931
932 as expected. Note that I use quotes around words "correct", "incorrect"
933 etc because this is rather a feature not a bug; however current behaviour
934 is more logical (and allows more advanced macro usage :-).
935
936 Same change was applied to:
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400937 \c{%push},\c{%macro},\c{%imacro},\c{%define},\c{%idefine},\c{%xdefine},\c{%ixdefine},
938 \c{%assign},\c{%iassign},\c{%undef}
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400939
940\b A new directive [WARNING {+|-}warning-id] have been added. It works only
941 if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
942
943\b A new warning type: macro-selfref. By default this warning is disabled;
944 when enabled NASM warns when a macro self-references itself; for example
945 the following source:
946
947\c [WARNING macro-selfref]
948\c
949\c %macro push 1-*
950\c %rep %0
951\c push %1
952\c %rotate 1
953\c %endrep
954\c %endmacro
955\c
956\c push eax,ebx,ecx
957
958 will produce a warning, but if we remove the first line we won't see it
959 anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
960 eats such constructs without warnings at all).
961
962\b Added a "error" routine to preprocessor which always will set ERR_PASS1
963 bit in severity_code. This removes annoying repeated errors on first
964 and second passes from preprocessor.
965
966\b Added the %+ operator in single-line macros for concatenating two
967 identifiers. Usage example:
968
969\c %define _myfunc _otherfunc
970\c %define cextern(x) _ %+ x
971\c cextern (myfunc)
972
973 After first expansion, third line will become "_myfunc". After this
974 expansion is performed again so it becomes "_otherunc".
975
976\b Now if preprocessor is in a non-emitting state, no warning or error
977 will be emitted. Example:
978
979\c %if 1
980\c mov eax,ebx
981\c %else
982\c put anything you want between these two brackets,
983\c even macro-parameter references %1 or local
984\c labels %$zz or macro-local labels %%zz - no
985\c warning will be emitted.
986\c %endif
987
988\b Context-local variables on expansion as a last resort are looked up
989 in outer contexts. For example, the following piece:
990
991\c %push outer
992\c %define %$a [esp]
993\c
994\c %push inner
995\c %$a
996\c %pop
997\c %pop
998
999 will expand correctly the fourth line to [esp]; if we'll define another
1000 %$a inside the "inner" context, it will take precedence over outer
1001 definition. However, this modification has been applied only to
1002 expand_smacro and not to smacro_define: as a consequence expansion
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001003 looks in outer contexts, but \c{%ifdef} won't look in outer contexts.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001004
1005 This behaviour is needed because we don't want nested contexts to
1006 act on already defined local macros. Example:
1007
1008\c %define %$arg1 [esp+4]
1009\c test eax,eax
1010\c if nz
1011\c mov eax,%$arg1
1012\c endif
1013
1014 In this example the "if" mmacro enters into the "if" context, so %$arg1
1015 is not valid anymore inside "if". Of course it could be worked around
1016 by using explicitely %$$arg1 but this is ugly IMHO.
1017
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001018\b Fixed memory leak in \c{%undef}. The origline wasn't freed before
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001019 exiting on success.
1020
1021\b Fixed trap in preprocessor when line expanded to empty set of tokens.
1022 This happens, for example, in the following case:
1023
1024\c #define SOMETHING
1025\c SOMETHING
1026
1027
1028\S{cl-0.98} Version 0.98
1029
1030All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
1031
1032\b The documentation comment delimiter is \# not #.
1033
1034\b Allow EQU definitions to refer to external labels; reported by
1035 Pedro Gimeno.
1036
1037\b Re-enable support for RDOFF v1; reported by Pedro Gimeno.
1038
1039\b Updated License file per OK from Simon and Julian.
1040
1041
1042\S{cl-0.98p9} Version 0.98p9
1043
1044\b Update documentation (although the instruction set reference will
1045 have to wait; I don't want to hold up the 0.98 release for it.)
1046
1047\b Verified that the NASM implementation of the PEXTRW and PMOVMSKB
1048 instructions is correct. The encoding differs from what the Intel
1049 manuals document, but the Pentium III behaviour matches NASM, not
1050 the Intel manuals.
1051
1052\b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
1053 Stefan Hoffmeister.
1054
1055\b Resurrect the -s option, which was removed when changing the
1056 diagnostic output to stdout.
1057
1058
1059\S{cl-0.98p8} Version 0.98p8
1060
1061\b Fix for "DB" when NASM is running on a bigendian machine.
1062
1063\b Invoke insns.pl once for each output script, making Makefile.in
1064 legal for "make -j".
1065
1066\b Improve the Unix configure-based makefiles to make package
1067 creation easier.
1068
1069\b Included an RPM .spec file for building RPM (RedHat Package Manager)
1070 packages on Linux or Unix systems.
1071
1072\b Fix Makefile dependency problems.
1073
1074\b Change src/rdsrc.pl to include sectioning information in info
1075 output; required for install-info to work.
1076
1077\b Updated the RDOFF distribution to version 2 from Jules; minor
1078 massaging to make it compile in my environment.
1079
1080\b Split doc files that can be built by anyone with a Perl interpreter off
1081 into a separate archive.
1082
1083\b "Dress rehearsal" release!
1084
1085
1086\S{cl-0.98p7} Version 0.98p7
1087
1088\b Fixed opcodes with a third byte-sized immediate argument to not
1089 complain if given "byte" on the immediate.
1090
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001091\b Allow \c{%undef} to remove single-line macros with arguments. This
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001092 matches the behaviour of #undef in the C preprocessor.
1093
1094\b Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
1095 compatibility with most C compilers and preprocessors. This allows
1096 Makefile options to be shared between cc and nasm, for example.
1097
1098\b Minor cleanups.
1099
1100\b Went through the list of Katmai instructions and hopefully fixed the
1101 (rather few) mistakes in it.
1102
1103\b (Hopefully) fixed a number of disassembler bugs related to ambiguous
1104 instructions (disambiguated by -p) and SSE instructions with REP.
1105
1106\b Fix for bug reported by Mark Junger: "call dword 0x12345678" should
1107 work and may add an OSP (affected CALL, JMP, Jcc).
1108
1109\b Fix for environments when "stderr" isn't a compile-time constant.
1110
1111
1112\S{cl-0.98p6} Version 0.98p6
1113
1114
1115\b Took officially over coordination of the 0.98 release; so drop
1116 the p3.x notation. Skipped p4 and p5 to avoid confusion with John
1117 Fine's J4 and J5 releases.
1118
1119\b Update the documentation; however, it still doesn't include
1120 documentation for the various new instructions. I somehow wonder if
1121 it makes sense to have an instruction set reference in the assembler
1122 manual when Intel et al have PDF versions of their manuals online.
1123
1124\b Recognize "idt" or "centaur" for the -p option to ndisasm.
1125
1126\b Changed error messages back to stderr where they belong, but add an
1127 -E option to redirect them elsewhere (the DOS shell cannot redirect
1128 stderr.)
1129
1130\b -M option to generate Makefile dependencies (based on code from Alex
1131 Verstak.)
1132
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001133\b \c{%undef} preprocessor directive, and -u option, that undefines a
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001134 single-line macro.
1135
1136\b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
1137 Chuck Crayne.
1138
1139\b Various minor bugfixes (reported by):
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001140 - Dangling \c{%s} in preproc.c (Martin Junker)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001141
1142\b THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am
1143 on a trip and didn't bring the Katmai instruction reference, so I
1144 can't work on them right now.
1145
1146\b Updated the License file per agreement with Simon and Jules to
1147 include a GPL distribution clause.
1148
1149
1150\S{cl-0.98p3.7} Version 0.98p3.7
1151
1152\b (Hopefully) fixed the canned Makefiles to include the outrdf2 and
1153 zoutieee modules.
1154
1155\b Renamed changes.asm to changed.asm.
1156
1157
1158\S{cl-0.98p3.6} Version 0.98p3.6
1159
1160\b Fixed a bunch of instructions that were added in 0.98p3.5 which had
1161 memory operands, and the address-size prefix was missing from the
1162 instruction pattern.
1163
1164
1165\S{cl-0.98p3.5} Version 0.98p3.5
1166
1167\b Merged in changes from John S. Fine's 0.98-J5 release. John's based
1168 0.98-J5 on my 0.98p3.3 release; this merges the changes.
1169
1170\b Expanded the instructions flag field to a long so we can fit more
1171 flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
1172 such.
1173
1174\b Fix the "PRIV" flag on a bunch of instructions, and create new
1175 "PROT" flag for protected-mode-only instructions (orthogonal to if
1176 the instruction is privileged!) and new "SMM" flag for SMM-only
1177 instructions.
1178
1179\b Added AMD-only SYSCALL and SYSRET instructions.
1180
1181\b Make SSE actually work, and add new Katmai MMX instructions.
1182
1183\b Added a -p (preferred vendor) option to ndisasm so that it can
1184 distinguish e.g. Cyrix opcodes also used in SSE. For example:
1185
1186\c ndisasm -p cyrix aliased.bin
1187\c 00000000 670F514310 paddsiw mm0,[ebx+0x10]
1188\c 00000005 670F514320 paddsiw mm0,[ebx+0x20]
1189\c ndisasm -p intel aliased.bin
1190\c 00000000 670F514310 sqrtps xmm0,[ebx+0x10]
1191\c 00000005 670F514320 sqrtps xmm0,[ebx+0x20]
1192
1193\b Added a bunch of Cyrix-specific instructions.
1194
1195
1196\S{cl-0.98p3.4} Version 0.98p3.4
1197
1198\b Made at least an attempt to modify all the additional Makefiles (in
1199 the Mkfiles directory). I can't test it, but this was the best I
1200 could do.
1201
1202\b DOS DJGPP+"Opus Make" Makefile from John S. Fine.
1203
1204\b changes.asm changes from John S. Fine.
1205
1206
1207\S{cl-0.98p3.3} Version 0.98p3.3
1208
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001209\b Patch from Conan Brink to allow nesting of \c{%rep} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001210
1211\b If we're going to allow INT01 as an alias for INT1/ICEBP (one of
1212 Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
1213 as well.
1214
1215\b Updated changes.asm to include the latest changes.
1216
1217\b Tried to clean up the <CR>s that had snuck in from a DOS/Windows
1218 environment into my Unix environment, and try to make sure than
1219 DOS/Windows users get them back.
1220
1221\b We would silently generate broken tools if insns.dat wasn't sorted
1222 properly. Change insns.pl so that the order doesn't matter.
1223
1224\b Fix bug in insns.pl (introduced by me) which would cause conditional
1225 instructions to have an extra "cc" in disassembly, e.g. "jnz"
1226 disassembled as "jccnz".
1227
1228
1229\S{cl-0.98p3.2} Version 0.98p3.2
1230
1231\b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
1232 http://www.csoft.net/cz/johnfine/
1233
1234\b Changed previous "spotless" Makefile target (appropriate for distribution)
1235 to "distclean", and added "cleaner" target which is same as "clean"
1236 except deletes files generated by Perl scripts; "spotless" is union.
1237
1238\b Removed BASIC programs from distribution. Get a Perl interpreter
1239 instead (see below.)
1240
1241\b Calling this "pre-release 3.2" rather than "p3-hpa2" because of
1242 John's contributions.
1243
1244\b Actually link in the IEEE output format (zoutieee.c); fix a bunch of
1245 compiler warnings in that file. Note I don't know what IEEE output
1246 is supposed to look like, so these changes were made "blind".
1247
1248
1249\S{cl-0.98p3-hpa} Version 0.98p3-hpa
1250
1251\b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
1252 buildable version for Unix systems (Makefile.in updates, etc.)
1253
1254\b Changed insns.pl to create the instruction tables in nasm.h and
1255 names.c, so that a new instruction can be added by adding it *only*
1256 to insns.dat.
1257
1258\b Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
1259 FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
1260 guarantee will never be used; one of them is documented as UD2 in
1261 Intel documentation, the other one just as "Undefined Opcode" --
1262 calling it UD1 seemed to make sense.)
1263
1264\b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
1265 characters long. Now MAX_SYMBOL is derived from insns.dat.
1266
1267\b A note on the BASIC programs included: forget them. insns.bas is
1268 already out of date. Get yourself a Perl interpreter for your
1269 platform of choice at
1270 \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}.
1271
1272
1273\S{cl-0.98p3} Version 0.98 pre-release 3
1274
1275\b added response file support, improved command line handling, new layout
1276help screen
1277
1278\b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
1279related bugs, updated Wishlist; 0.98 Prerelease 3.
1280
1281
1282\S{cl-0.98p2} Version 0.98 pre-release 2
1283
1284\b fixed bug in outcoff.c to do with truncating section names longer
1285than 8 characters, referencing beyond end of string; 0.98 pre-release 2
1286
1287
1288\S{cl-0.98p1} Version 0.98 pre-release 1
1289
1290\b Fixed a bug whereby STRUC didn't work at all in RDF.
1291
1292\b Fixed a problem with group specification in PUBDEFs in OBJ.
1293
1294\b Improved ease of adding new output formats. Contribution due to
1295Fox Cutter.
1296
1297\b Fixed a bug in relocations in the `bin' format: was showing up when
1298a relocatable reference crossed an 8192-byte boundary in any output
1299section.
1300
1301\b Fixed a bug in local labels: local-label lookups were inconsistent
1302between passes one and two if an EQU occurred between the definition
1303of a global label and the subsequent use of a local label local to
1304that global.
1305
1306\b Fixed a seg-fault in the preprocessor (again) which happened when
1307you use a blank line as the first line of a multi-line macro
1308definition and then defined a label on the same line as a call to
1309that macro.
1310
1311\b Fixed a stale-pointer bug in the handling of the NASM environment
1312variable. Thanks to Thomas McWilliams.
1313
1314\b ELF had a hard limit on the number of sections which caused
1315segfaults when transgressed. Fixed.
1316
1317\b Added ability for ndisasm to read from stdin by using `-' as the
1318filename.
1319
1320\b ndisasm wasn't outputting the TO keyword. Fixed.
1321
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001322\b Fixed error cascade on bogus expression in \c{%if} - an error in
1323evaluation was causing the entire \c{%if} to be discarded, thus creating
1324trouble later when the \c{%else} or \c{%endif} was encountered.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001325
1326\b Forward reference tracking was instruction-granular not operand-
1327granular, which was causing 286-specific code to be generated
1328needlessly on code of the form `shr word [forwardref],1'. Thanks to
1329Jim Hague for sending a patch.
1330
1331\b All messages now appear on stdout, as sending them to stderr serves
1332no useful purpose other than to make redirection difficult.
1333
1334\b Fixed the problem with EQUs pointing to an external symbol - this
1335now generates an error message.
1336
1337\b Allowed multiple size prefixes to an operand, of which only the first
1338is taken into account.
1339
1340\b Incorporated John Fine's changes, including fixes of a large number
1341of preprocessor bugs, some small problems in OBJ, and a reworking of
1342label handling to define labels before their line is assembled, rather
1343than after.
1344
1345\b Reformatted a lot of the source code to be more readable. Included
1346'coding.txt' as a guideline for how to format code for contributors.
1347
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001348\b Stopped nested \c{%reps} causing a panic - they now cause a slightly more
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001349friendly error message instead.
1350
1351\b Fixed floating point constant problems (patch by Pedro Gimeno)
1352
1353\b Fixed the return value of insn_size() not being checked for -1, indicating
1354an error.
1355
1356\b Incorporated 3Dnow! instructions.
1357
1358\b Fixed the 'mov eax, eax + ebx' bug.
1359
1360\b Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
1361
1362\b Incorporated John Fine's command line parsing changes
1363
1364\b Incorporated David Lindauer's OMF debug support
1365
1366\b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size
1367specification warning when sizes agree).
1368
1369
1370\H{cl-0.9x} NASM 0.9 Series
1371
1372Revisions before 0.98.
1373
1374
1375\S{cl-0.97} Version 0.97 released December 1997
1376
1377\b This was entirely a bug-fix release to 0.96, which seems to have got
1378cursed. Silly me.
1379
1380\b Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
1381fail. Caused by an error in the `MOV EAX,<segment>' support.
1382
1383\b ndisasm hung at EOF when compiled with lcc on Linux because lcc on
1384Linux somehow breaks feof(). ndisasm now does not rely on feof().
1385
1386\b A heading in the documentation was missing due to a markup error in
1387the indexing. Fixed.
1388
1389\b Fixed failure to update all pointers on realloc() within extended-
1390operand code in parser.c. Was causing wrong behaviour and seg faults
1391on lines such as `dd 0.0,0.0,0.0,0.0,...'
1392
1393\b Fixed a subtle preprocessor bug whereby invoking one multi-line
1394macro on the first line of the expansion of another, when the second
1395had been invoked with a label defined before it, didn't expand the
1396inner macro.
1397
1398\b Added internal.doc back in to the distribution archives - it was
1399missing in 0.96 *blush*
1400
1401\b Fixed bug causing 0.96 to be unable to assemble its own test files,
1402specifically objtest.asm. *blush again*
1403
1404\b Fixed seg-faults and bogus error messages caused by mismatching
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001405\c{%rep} and \c{%endrep} within multi-line macro definitions.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001406
1407\b Fixed a problem with buffer overrun in OBJ, which was causing
1408corruption at ends of long PUBDEF records.
1409
1410\b Separated DOS archives into main-program and documentation to reduce
1411download size.
1412
1413
1414\S{cl-0.96} Version 0.96 released November 1997
1415
1416\b Fixed a bug whereby, if `nasm sourcefile' would cause a filename
1417collision warning and put output into `nasm.out', then `nasm
1418sourcefile -o outputfile' still gave the warning even though the
1419`-o' was honoured.
1420Fixed name pollution under Digital UNIX: one of its header files
1421defined R_SP, which broke the enum in nasm.h.
1422
1423\b Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
1424two-operand forms; NDISASM didn't recognise the longer register
1425forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
1426flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
1427size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
1428undocumented because the Intel Architecture reference documents
1429them.
1430
1431\b Fixed a problem with the local-label mechanism, whereby strange
1432types of symbol (EQUs, auto-defined OBJ segment base symbols)
1433interfered with the `previous global label' value and screwed up
1434local labels.
1435
1436\b Fixed a bug whereby the stub preprocessor didn't communicate with
1437the listing file generator, so that the -a and -l options in
1438conjunction would produce a useless listing file.
1439
1440\b Merged `os2' object file format back into `obj', after discovering
1441that `obj' _also_ shouldn't have a link pass separator in a module
1442containing a non-trivial MODEND. Flat segments are now declared
1443using the FLAT attribute. `os2' is no longer a valid object format
1444name: use `obj'.
1445
1446\b Removed the fixed-size temporary storage in the evaluator. Very very
1447long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
1448so) should now no longer crash NASM.
1449
1450\b Fixed a bug involving segfaults on disassembly of MMX instructions,
1451by changing the meaning of one of the operand-type flags in nasm.h.
1452This may cause other apparently unrelated MMX problems; it needs to
1453be tested thoroughly.
1454
1455\b Fixed some buffer overrun problems with large OBJ output files.
1456Thanks to DJ Delorie for the bug report and fix.
1457
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001458\b Made preprocess-only mode actually listen to the \c{%line} markers as it
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001459prints them, so that it can report errors more sanely.
1460
1461\b Re-designed the evaluator to keep more sensible track of expressions
1462involving forward references: can now cope with previously-nightmare
1463situations such as:
1464
1465\c mov ax,foo | bar
1466\c foo equ 1
1467\c bar equ 2
1468
1469\b Added the ALIGN and ALIGNB standard macros.
1470
1471\b Added PIC support in ELF: use of WRT to obtain the four extra
1472relocation types needed.
1473
1474\b Added the ability for output file formats to define their own
1475extensions to the GLOBAL, COMMON and EXTERN directives.
1476
1477\b Implemented common-variable alignment, and global-symbol type and
1478size declarations, in ELF.
1479
1480\b Implemented NEAR and FAR keywords for common variables, plus
1481far-common element size specification, in OBJ.
1482
1483\b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
1484default WRT specification (either a segment or a group).
1485
1486\b Transformed the Unix NASM archive into an auto-configuring package.
1487
1488\b Added a sanity-check for people applying SEG to things which are
1489already segment bases: this previously went unnoticed by the SEG
1490processing and caused OBJ-driver panics later.
1491
1492\b Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
1493type references: OBJ doesn't directly support dword-size segment
1494base fixups, but as long as the low two bytes of the constant term
1495are zero, a word-size fixup can be generated instead and it will
1496work.
1497
1498\b Added the ability to specify sections' alignment requirements in
1499Win32 object files and pure binary files.
1500
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001501\b Added preprocess-time expression evaluation: the \c{%assign} (and
1502\c{%iassign}) directive and the bare \c{%if} (and \c{%elif}) conditional. Added
1503relational operators to the evaluator, for use only in \c{%if}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001504constructs: the standard relationals = < > <= >= <> (and C-like
1505synonyms == and !=) plus low-precedence logical operators &&, ^^ and
1506||.
1507
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001508\b Added a preprocessor repeat construct: \c{%rep} / \c{%exitrep} / \c{%endrep}.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001509
1510\b Added the __FILE__ and __LINE__ standard macros.
1511
1512\b Added a sanity check for number constants being greater than
15130xFFFFFFFF. The warning can be disabled.
1514
1515\b Added the %0 token whereby a variadic multi-line macro can tell how
1516many parameters it's been given in a specific invocation.
1517
1518\b Added \c{%rotate}, allowing multi-line macro parameters to be cycled.
1519
1520\b Added the `*' option for the maximum parameter count on multi-line
1521macros, allowing them to take arbitrarily many parameters.
1522
1523\b Added the ability for the user-level forms of EXTERN, GLOBAL and
1524COMMON to take more than one argument.
1525
1526\b Added the IMPORT and EXPORT directives in OBJ format, to deal with
1527Windows DLLs.
1528
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001529\b Added some more preprocessor \c{%if} constructs: \c{%ifidn} / \c{%ifidni} (exact
1530textual identity), and \c{%ifid} / \c{%ifnum} / \c{%ifstr} (token type testing).
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001531
1532\b Added the ability to distinguish SHL AX,1 (the 8086 version) from
1533SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
1534be 1).
1535
1536\b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
1537with PIC shared library features.
1538
1539\b Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
1540FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
1541otherwise accepted standard. The previous behaviour, though it was a
1542deliberate feature, was a deliberate feature based on a
1543misunderstanding. Apologies for the inconvenience.
1544
1545\b Improved the flexibility of ABSOLUTE: you can now give it an
1546expression rather than being restricted to a constant, and it can
1547take relocatable arguments as well.
1548
1549\b Added the ability for a variable to be declared as EXTERN multiple
1550times, and the subsequent definitions are just ignored.
1551
1552\b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
1553alone on a line (without a following instruction).
1554
1555\b Improved sanity checks on whether the arguments to EXTERN, GLOBAL
1556and COMMON are valid identifiers.
1557
1558\b Added misc/exebin.mac to allow direct generation of .EXE files by
1559hacking up an EXE header using DB and DW; also added test/binexe.asm
1560to demonstrate the use of this. Thanks to Yann Guidon for
1561contributing the EXE header code.
1562
1563\b ndisasm forgot to check whether the input file had been successfully
1564opened. Now it does. Doh!
1565
1566\b Added the Cyrix extensions to the MMX instruction set.
1567
1568\b Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
1569assembled differently. This is important since [ESI+EBP] and
1570[EBP+ESI] have different default base segment registers.
1571
1572\b Added support for the PharLap OMF extension for 4096-byte segment
1573alignment.
1574
1575
1576\S{cl-0.95 released July 1997} Version 0.95 released July 1997
1577
1578\b Fixed yet another ELF bug. This one manifested if the user relied on
1579the default segment, and attempted to define global symbols without
1580first explicitly declaring the target segment.
1581
1582\b Added makefiles (for NASM and the RDF tools) to build Win32 console
1583apps under Symantec C++. Donated by Mark Junker.
1584
1585\b Added `macros.bas' and `insns.bas', QBasic versions of the Perl
1586scripts that convert `standard.mac' to `macros.c' and convert
1587`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
1588Junker.
1589
1590\b Changed the diassembled forms of the conditional instructions so
1591that JB is now emitted as JC, and other similar changes. Suggested
1592list by Ulrich Doewich.
1593
1594\b Added `@' to the list of valid characters to begin an identifier
1595with.
1596
1597\b Documentary changes, notably the addition of the `Common Problems'
1598section in nasm.doc.
1599
1600\b Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
1601
1602\b Fixed a bug in perm_copy() in labels.c which was causing exceptions
1603in cleanup_labels() on some systems.
1604
1605\b Positivity sanity check in TIMES argument changed from a warning to
1606an error following a further complaint.
1607
1608\b Changed the acceptable limits on byte and word operands to allow
1609things like `~10111001b' to work.
1610
1611\b Fixed a major problem in the preprocessor which caused seg-faults if
1612macro definitions contained blank lines or comment-only lines.
1613
1614\b Fixed inadequate error checking on the commas separating the
1615arguments to `db', `dw' etc.
1616
1617\b Fixed a crippling bug in the handling of macros with operand counts
1618defined with a `+' modifier.
1619
1620\b Fixed a bug whereby object file formats which stored the input file
1621name in the output file (such as OBJ and COFF) weren't doing so
1622correctly when the output file name was specified on the command
1623line.
1624
1625\b Removed [INC] and [INCLUDE] support for good, since they were
1626obsolete anyway.
1627
1628\b Fixed a bug in OBJ which caused all fixups to be output in 16-bit
1629(old-format) FIXUPP records, rather than putting the 32-bit ones in
1630FIXUPP32 (new-format) records.
1631
1632\b Added, tentatively, OS/2 object file support (as a minor variant on
1633OBJ).
1634
1635\b Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
1636
1637\b Removed a spurious second fclose() on the output file.
1638
1639\b Added the `-s' command line option to redirect all messages which
1640would go to stderr (errors, help text) to stdout instead.
1641
1642\b Added the `-w' command line option to selectively suppress some
1643classes of assembly warning messages.
1644
1645\b Added the `-p' pre-include and `-d' pre-define command-line options.
1646
1647\b Added an include file search path: the `-i' command line option.
1648
1649\b Fixed a silly little preprocessor bug whereby starting a line with a
1650`%!' environment-variable reference caused an `unknown directive'
1651error.
1652
1653\b Added the long-awaited listing file support: the `-l' command line
1654option.
1655
1656\b Fixed a problem with OBJ format whereby, in the absence of any
1657explicit segment definition, non-global symbols declared in the
1658implicit default segment generated spurious EXTDEF records in the
1659output.
1660
1661\b Added the NASM environment variable.
1662
1663\b From this version forward, Win32 console-mode binaries will be
1664included in the DOS distribution in addition to the 16-bit binaries.
1665Added Makefile.vc for this purpose.
1666
1667\b Added `return 0;' to test/objlink.c to prevent compiler warnings.
1668
1669\b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
1670
1671\b Added an alternative memory-reference syntax in which prefixing an
1672operand with `&' is equivalent to enclosing it in square brackets,
1673at the request of Fox Cutter.
1674
1675\b Errors in pass two now cause the program to return a non-zero error
1676code, which they didn't before.
1677
1678\b Fixed the single-line macro cycle detection, which didn't work at
1679all on macros with no parameters (caused an infinite loop). Also
1680changed the behaviour of single-line macro cycle detection to work
1681like cpp, so that macros like `extrn' as given in the documentation
1682can be implemented.
1683
1684\b Fixed the implementation of WRT, which was too restrictive in that
1685you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
1686a relocatable reference.
1687
1688
1689\S{cl-0.94 released April 1997} Version 0.94 released April 1997
1690
1691
1692\b Major item: added the macro processor.
1693
1694\b Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
1695reorganised CMPXCHG instruction into early-486 and Pentium forms.
1696Thanks to Thobias Jones for the information.
1697
1698\b Fixed two more stupid bugs in ELF, which were causing `ld' to
1699continue to seg-fault in a lot of non-trivial cases.
1700
1701\b Fixed a seg-fault in the label manager.
1702
1703\b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
1704the only option for BCD loads/stores in any case.
1705
1706\b Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
1707anyone bothers to provide it. Previously they complained unless no
1708keyword at all was present.
1709
1710\b Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
1711vestige of a bug that I thought had been fixed in 0.92. This was
1712fixed, hopefully for good this time...
1713
1714\b Another minor phase error (insofar as a phase error can _ever_ be
1715minor) fixed, this one occurring in code of the form
1716
1717\c rol ax,forward_reference
1718\c forward_reference equ 1
1719
1720\b The number supplied to TIMES is now sanity-checked for positivity,
1721and also may be greater than 64K (which previously didn't work on
172216-bit systems).
1723
1724\b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
1725
1726\b Added the INCBIN pseudo-opcode.
1727
1728\b Due to the advent of the preprocessor, the [INCLUDE] and [INC]
1729directives have become obsolete. They are still supported in this
1730version, with a warning, but won't be in the next.
1731
1732\b Fixed a bug in OBJ format, which caused incorrect object records to
1733be output when absolute labels were made global.
1734
1735\b Updates to RDOFF subdirectory, and changes to outrdf.c.
1736
1737
1738\S{cl-0.93 released January 1997} Version 0.93 released January 1997
1739
1740This release went out in a great hurry after semi-crippling bugs
1741were found in 0.92.
1742
1743\b Really \e{did} fix the stack overflows this time. *blush*
1744
1745\b Had problems with EA instruction sizes changing between passes, when
1746an offset contained a forward reference and so 4 bytes were
1747allocated for the offset in pass one; by pass two the symbol had
1748been defined and happened to be a small absolute value, so only 1
1749byte got allocated, causing instruction size mismatch between passes
1750and hence incorrect address calculations. Fixed.
1751
1752\b Stupid bug in the revised ELF section generation fixed (associated
1753string-table section for .symtab was hard-coded as 7, even when this
1754didn't fit with the real section table). Was causing `ld' to
1755seg-fault under Linux.
1756
1757\b Included a new Borland C makefile, Makefile.bc2, donated by Fox
1758Cutter <lmb@comtch.iea.com>.
1759
1760
1761\S{cl-0.92 released January 1997} Version 0.92 released January 1997
1762
1763\b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
1764fixed. This also affected the LCC driver.
1765
1766\b Fixed a bug regarding 32-bit effective addresses of the form
1767\c{[other_register+ESP]}.
1768
1769\b Documentary changes, notably documentation of the fact that Borland
1770Win32 compilers use `obj' rather than `win32' object format.
1771
1772\b Fixed the COMENT record in OBJ files, which was formatted
1773incorrectly.
1774
1775\b Fixed a bug causing segfaults in large RDF files.
1776
1777\b OBJ format now strips initial periods from segment and group
1778definitions, in order to avoid complications with the local label
1779syntax.
1780
1781\b Fixed a bug in disassembling far calls and jumps in NDISASM.
1782
1783\b Added support for user-defined sections in COFF and ELF files.
1784
1785\b Compiled the DOS binaries with a sensible amount of stack, to
1786prevent stack overflows on any arithmetic expression containing
1787parentheses.
1788
1789\b Fixed a bug in handling of files that do not terminate in a newline.
1790
1791
1792\S{cl-0.91 released November 1996} Version 0.91 released November 1996
1793
1794\b Loads of bug fixes.
1795
1796\b Support for RDF added.
1797
1798\b Support for DBG debugging format added.
1799
1800\b Support for 32-bit extensions to Microsoft OBJ format added.
1801
1802\b Revised for Borland C: some variable names changed, makefile added.
1803
1804\b LCC support revised to actually work.
1805
1806\b JMP/CALL NEAR/FAR notation added.
1807
1808\b `a16', `o16', `a32' and `o32' prefixes added.
1809
1810\b Range checking on short jumps implemented.
1811
1812\b MMX instruction support added.
1813
1814\b Negative floating point constant support added.
1815
1816\b Memory handling improved to bypass 64K barrier under DOS.
1817
1818\b \c{$} prefix to force treatment of reserved words as identifiers added.
1819
1820\b Default-size mechanism for object formats added.
1821
1822\b Compile-time configurability added.
1823
1824\b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels.
1825
1826\b \c{-e} and \c{-k} options in NDISASM added.
1827
1828
1829\S{cl-0.90 released October 1996} Version 0.90 released October 1996
1830
1831First release version. First support for object file output. Other
1832changes from previous version (0.3x) too numerous to document.