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