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