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