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