blob: 81852e2729dfb48a6f24c338e94e65b72c6f0e2c [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
H. Peter Anvine55e53d2012-09-09 16:30:07 -07007The NASM 2 series supports x86-64, and is the production version of NASM
H. Peter Anvin04156cd2008-07-14 02:45:57 -04008since 2007.
9
H. Peter Anvin55340992012-09-09 17:09:00 -070010\S{cl-2.10.06} Version 2.10.06
11
12\b Always quote the dependency source names when using the automatic
13dependency generation options.
14
15\b If no dependency target name is specified via the \c{-MT} or
16\c{-MQ} options, quote the default output name.
17
H. Peter Anvin4dab7a02012-10-08 12:05:59 +080018\b Fix assembly of shift operations in \c{CPU 8086} mode.
19
20\b Fix incorrect generation of explicit immediate byte for shift by 1
21under certain circumstances.
22
23\b Fix assembly of the \c{VPCMPGTQ} instruction.
24
H. Peter Anvinf2ded502012-12-04 13:36:42 -080025\b Fix RIP-relative relocations in the \c{macho64} backend.
26
H. Peter Anvin55f3cb82012-09-09 11:05:35 -070027\S{cl-2.10.05} Version 2.10.05
28
29\b Add the \c{CLAC} and \c{STAC} instructions.
30
H. Peter Anvin480435c2012-08-17 15:42:24 -070031\S{cl-2.10.04} Version 2.10.04
32
33\b Add back the inadvertently deleted 256-bit version of the \c{VORPD}
34instruction.
35
36\b Correct disassembly of instructions starting with byte \c{82} hex.
37
38\b Fix corner cases in token pasting, for example:
39
40\c %define N 1e%++%+ 5
41\c dd N, 1e+5
42
H. Peter Anvin7f9a43a2012-07-22 21:08:30 -070043\S{cl-2.10.03} Version 2.10.03
44
45\b Correct the assembly of the instruction:
46
47\c XRELEASE MOV [absolute],AL
48
49Previous versions would incorrectly generate \c{F3 A2} for this
50instruction and issue a warning; correct behavior is to emit \c{F3 88
5105}.
52
H. Peter Anvin5c4c5062012-07-20 17:53:55 -070053\S{cl-2.10.02} Version 2.10.02
54
55\b Add the \c{ifunc} macro package with integer functions, currently
56only integer logarithms. See \k{pkg_ifunc}.
57
58\b Add the \c{RDSEED}, \c{ADCX} and \c{ADOX} instructions.
59
Cyrill Gorcunov45bf92b2012-05-25 00:58:43 +040060\S{cl-2.10.01} Version 2.10.01
61
62\b Add missing VPMOVMSKB instruction with reg32, ymmreg operands.
63
H. Peter Anvinaf5cb1b2010-08-24 14:13:32 -070064\S{cl-2.10} Version 2.10
65
66\b When optimization is enabled, \c{mov r64,imm} now optimizes to the
67 shortest form possible between:
68
H. Peter Anvin96e8d962010-08-24 14:20:40 -070069\c mov r32,imm32 ; 5 bytes
70\c mov r64,imm32 ; 7 bytes
71\c mov r64,imm64 ; 10 bytes
H. Peter Anvinaf5cb1b2010-08-24 14:13:32 -070072
H. Peter Anvind68466a2010-08-24 14:14:48 -070073To force a specific form, use the \c{STRICT} keyword, see \k{strict}.
74
H. Peter Anvin8a44aa42012-02-25 13:30:41 -080075\b Add support for the Intel AVX2 instruction set.
76
77\b Add support for Bit Manipulation Instructions 1 and 2.
78
79\b Add support for Intel Transactional Synchronization Extensions (TSX).
H. Peter Anvin2d3dce22010-08-24 09:55:27 -070080
H. Peter Anvinc92aaa12012-02-25 15:05:45 -080081\b Add support for x32 ELF (32-bit ELF with the CPU in 64-bit mode.)
82 See \k{elffmt}.
83
H. Peter Anvin6b8cc122012-02-25 15:34:14 -080084\b Add support for bigendian UTF-16 and UTF-32. See \k{unicode}.
85
Cyrill Gorcunoved48ab82011-07-16 01:33:00 +040086\S{cl-2.09.10} Version 2.09.10
87
88\b Fix up NSIS script to protect uninstaller against registry keys
89 absence or corruption. It brings in a few additional questions
90 to a user during deinstallation procedure but still it is better
91 than unpredictable file removal.
92
Cyrill Gorcunov68868b02011-07-04 00:47:08 +040093\S{cl-2.09.09} Version 2.09.09
94
95\b Fix initialization of section attributes of \c{bin} output format.
96
97\b Fix \c{mach64} output format bug that crashes NASM due to NULL symbols.
98
99
Cyrill Gorcunov47e7ecd2011-04-06 19:08:34 +0400100\S{cl-2.09.08} Version 2.09.08
101
102\b Fix \c{__OUTPUT_FORMAT__} assignment when output driver alias
103 is used. For example when \c{-f elf} is used \c{__OUTPUT_FORMAT__}
104 must be set to \c{elf}, if \c{-f elf32} is used \c{__OUTPUT_FORMAT__}
105 must be assigned accordingly, i.e. to \c{elf32}. The rule applies to
106 all output driver aliases. See \k{ofmtm}.
107
108
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300109\S{cl-2.09.07} Version 2.09.07
110
111\b Fix attempts to close same file several times
112 when \c{-a} option is used.
113
Cyrill Gorcunoveb9b2942011-03-07 12:44:43 +0300114\b Fixes for VEXTRACTF128, VMASKMOVPS encoding.
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300115
Cyrill Gorcunova09fe1e2011-03-12 22:35:42 +0300116
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300117\S{cl-2.09.06} Version 2.09.06
Cyrill Gorcunov37dacf02011-02-28 09:58:52 +0300118
119\b Fix missed section attribute initialization in \c{bin} output target.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400120
Cyrill Gorcunov1616b9d2011-02-28 10:03:53 +0300121
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300122\S{cl-2.09.05} Version 2.09.05
123
Cyrill Gorcunov8fc44e92011-02-20 22:12:32 +0300124\b Fix arguments encoding for VPEXTRW instruction.
125
126\b Remove invalid form of VPEXTRW instruction.
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300127
Cyrill Gorcunovb6c1dca2011-02-23 00:49:13 +0300128\b Add \c{VLDDQU} as alias for \c{VLDQQU} to
129 match specification.
130
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300131
Cyrill Gorcunov9348b902010-11-21 19:51:49 +0300132\S{cl-2.09.04} Version 2.09.04
133
134\b Fix incorrect labels offset for VEX intructions.
135
136\b Eliminate bogus warning on implicit operand size override.
137
138\b \c{%if} term could not handle 64 bit numbers.
139
140\b The COFF backend was limiting relocations number to 16 bits even if
141 in real there were a way more relocations.
142
143
Cyrill Gorcunovfdbe8ba2010-10-27 21:50:20 +0400144\S{cl-2.09.03} Version 2.09.03
145
146\b Print \c{%macro} name inside \c{%rep} blocks on error.
147
148\b Fix preprocessor expansion behaviour. It happened sometime
149 too early and sometime simply wrong. Move behaviour back to
150 the origins (down to NASM 2.05.01).
151
152\b Fix unitialized data dereference on OMF output format.
153
154\b Issue warning on unterminated \c{%{} construct.
155
156\b Fix for documentation typo.
157
158
H. Peter Anvin2c11f972010-09-15 08:59:12 -0700159\S{cl-2.09.02} Version 2.09.02
160
161\b Fix reversed tokens when \c{%deftok} produces more than one output token.
162
Cyrill Gorcunov831222f2010-09-15 21:13:48 +0400163\b Fix segmentation fault on disassembling some VEX instructions.
164
165\b Missing \c{%endif} did not always cause error.
166
167\b Fix typo in documentation.
168
Cyrill Gorcunova28db5f2010-09-18 02:55:46 +0400169\b Compound context local preprocessor single line macro identifiers
170 were not expanded early enough and as result lead to unresolved
171 symbols.
172
H. Peter Anvin2c11f972010-09-15 08:59:12 -0700173
Cyrill Gorcunov234e4ed2010-09-07 20:57:36 +0400174\S{cl-2.09.01} Version 2.09.01
175
176\b Fix NULL dereference on missed %deftok second parameter.
177
178\b Fix NULL dereference on invalid %substr parameters.
179
180
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400181\S{cl-2.09} Version 2.09
182
Cyrill Gorcunove091d6e2010-08-09 13:58:22 +0400183\b Fixed assignment the magnitude of \c{%rep} counter. It is limited
184 to 62 bits now.
185
Cyrill Gorcunov088d1512010-07-23 18:57:40 +0400186\b Fixed NULL dereference if argument of \c{%strlen} resolves
187 to whitespace. For example if nonexistent macro parameter is used.
188
H. Peter Anvin077fb932010-07-20 14:56:30 -0700189\b \c{%ifenv}, \c{%elifenv}, \c{%ifnenv}, and \c{%elifnenv} directives
190 introduced. See \k{ifenv}.
Bryant Kellera537d492010-07-13 23:49:39 +0400191
Cyrill Gorcunov702df6d2010-07-13 20:59:46 +0400192\b Fixed NULL dereference if environment variable is missed.
193
Cyrill Gorcunovaed4eaa2010-07-17 18:24:13 +0400194\b Updates of new AVX v7 Intel instructions.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400195
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400196\b \c{PUSH imm32} is now officially documented.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400197
198\b Fix for encoding the LFS, LGS and LSS in 64-bit mode.
199
H. Peter Anvin077fb932010-07-20 14:56:30 -0700200\b Fixes for compatibility with OpenWatcom compiler and DOS 8.3 file
201 format limitation.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400202
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400203\b Macros parameters range expansion introduced. See \k{mlmacrange}.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400204
H. Peter Anvinab5bd052010-07-25 12:43:30 -0700205\b Backward compatibility on expanging of local sigle macros restored.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400206
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400207\b 8 bit relocations for \c{elf} and \c{bin} output formats are introduced.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400208
209\b Short intersegment jumps are permitted now.
210
Cyrill Gorcunov327edcf2010-08-16 13:47:24 +0400211\b An alignment more than 64 bytes are allowed for \c{win32},
H. Peter Anvin077fb932010-07-20 14:56:30 -0700212 \c{win64} output formats.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400213
Cyrill Gorcunov407e6c72010-07-28 17:59:49 +0400214\b \c{SECTALIGN} directive introduced. See \k{sectalign}.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400215
H. Peter Anvin077fb932010-07-20 14:56:30 -0700216\b \c{nojmp} option introduced in \c{smartalign} package. See
217 \k{pkg_smartalign}.
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400218
H. Peter Anvin077fb932010-07-20 14:56:30 -0700219\b Short aliases \c{win}, \c{elf} and \c{macho} for output formats are
220 introduced. Each stands for \c{win32}, \c{elf32} and \c{macho32}
221 accordingly.
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400222
223\b Faster handling of missing directives implemented.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400224
225\b Various small improvements in documentation.
226
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400227\b No hang anymore if unable to open malloc.log file.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400228
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400229\b The environments without vsnprintf function are able to build nasm again.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400230
231\b AMD LWP instructions updated.
232
233\b Tighten EA checks. We warn a user if there overflow in EA addressing.
234
H. Peter Anvin31387b22010-07-15 18:28:52 -0700235\b Make \c{-Ox} the default optimization level. For the legacy
H. Peter Anvinab5bd052010-07-25 12:43:30 -0700236 behavior, specify \c{-O0} explicitly. See \k{opt-O}.
H. Peter Anvin31387b22010-07-15 18:28:52 -0700237
H. Peter Anvin077fb932010-07-20 14:56:30 -0700238\b Environment variables read with \c{%!} or tested with \c{%ifenv}
239 can now contain non-identifier characters if surrounded by quotes.
240 See \k{getenv}.
241
H. Peter Anvin2d3dce22010-08-24 09:55:27 -0700242\b Add a new standard macro package \c{%use fp} for floating-point
243 convenience macros. See \k{pkg_fp}.
244
Cyrill Gorcunovb9771902009-11-06 11:24:54 +0300245
H. Peter Anvin5bc03272010-07-15 22:44:03 -0700246\S{cl-2.08.02} Version 2.08.02
247
248\b Fix crash under certain circumstances when using the \c{%+} operator.
249
250
251\S{cl-2.08.01} Version 2.08.01
252
253\b Fix the \c{%use} statement, which was broken in 2.08.
254
255
H. Peter Anvin57924832009-11-09 14:58:45 -0800256\S{cl-2.08} Version 2.08
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400257
258\b A number of enhancements/fixes in macros area.
259
Keith Kanios4ea84662009-10-25 14:06:24 -0500260\b Support for converting strings to tokens. See \k{deftok}.
261
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400262\b Fuzzy operand size logic introduced.
263
Cyrill Gorcunov78debd02009-12-13 14:13:35 +0300264\b Fix COFF stack overrun on too long export identifiers.
265
Keith Kanios4ea84662009-10-25 14:06:24 -0500266\b Fix Macho-O alignment bug.
267
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400268\b Fix crashes with -fwin32 on file with many exports.
269
270\b Fix stack overrun for too long [DEBUG id].
271
Cyrill Gorcunovb9771902009-11-06 11:24:54 +0300272\b Fix incorrect sbyte usage in IMUL (hit only if optimization
273 flag passed).
274
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400275\b Append ending token for \c{.stabs} records in the ELF output format.
276
277\b New NSIS script which uses ModernUI and MultiUser approach.
278
279\b Visual Studio 2008 NASM integration (rules file).
280
Cyrill Gorcunov7a8098c2010-01-03 15:41:22 +0300281\b Warn a user if a constant is too long (and as result will be stripped).
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400282
H. Peter Anvin57924832009-11-09 14:58:45 -0800283\b The obsoleted pre-XOP AMD SSE5 instruction set which was never actualized
284 was removed.
285
Cyrill Gorcunov78debd02009-12-13 14:13:35 +0300286\b Fix stack overrun on too long error file name passed from the command line.
Keith Kanios4ea84662009-10-25 14:06:24 -0500287
Cyrill Gorcunov7a8098c2010-01-03 15:41:22 +0300288\b Bind symbols to the .text section by default (ie in case if SECTION
289 directive was omitted) in the ELF output format.
290
291\b Fix sync points array index wrapping.
292
293\b A few fixes for FMA4 and XOP instruction templates.
294
295\b Add AMD Lightweight Profiling (LWP) instructions.
296
H. Peter Anvin3af37792010-02-15 10:15:53 -0800297\b Fix the offset for \c{%arg} in 64-bit mode.
298
299\b An undefined local macro (\c{%$}) no longer matches a global macro
300 with the same name.
301
Cyrill Gorcunov3dce1e12010-03-03 23:13:48 +0300302\b Fix NULL dereference on too long local labels.
H. Peter Anvin3af37792010-02-15 10:15:53 -0800303
Cyrill Gorcunov90bb2852010-03-03 23:15:25 +0300304
H. Peter Anvinfba06d22009-07-06 11:28:12 -0700305\S{cl-2.07} Version 2.07
306
307\b NASM is now under the 2-clause BSD license. See \k{legal}.
308
309\b Fix the section type for the \c{.strtab} section in the \c{elf64}
310 output format.
311
312\b Fix the handling of \c{COMMON} directives in the \c{obj} output format.
313
314\b New \c{ith} and \c{srec} output formats; these are variants of the
315 \c{bin} output format which output Intel hex and Motorola S-records,
316 respectively. See \k{ithfmt} and \k{srecfmt}.
317
318\b \c{rdf2ihx} replaced with an enhanced \c{rdf2bin}, which can output
319 binary, COM, Intel hex or Motorola S-records.
320
321\b The Windows installer now puts the NASM directory first in the
322 \c{PATH} of the "NASM Shell".
323
H. Peter Anvin83b942d2009-07-06 19:00:08 -0700324\b Revert the early expansion behavior of \c{%+} to pre-2.06 behavior:
325 \c{%+} is only expanded late.
326
H. Peter Anvine227fe62009-07-06 19:27:33 -0700327\b Yet another Mach-O alignment fix.
328
H. Peter Anvina7a14b22009-07-07 16:08:56 -0700329\b Don't delete the list file on errors. Also, include error and
330 warning information in the list file.
331
H. Peter Anvina6e25b52009-07-08 21:32:28 -0700332\b Support for 64-bit Mach-O output, see \k{machofmt}.
333
H. Peter Anvina99c9842009-07-15 17:43:32 -0400334\b Fix assert failure on certain operations that involve strings with
335 high-bit bytes.
H. Peter Anvincc6ee1a2009-07-15 16:31:55 -0400336
H. Peter Anvinfba06d22009-07-06 11:28:12 -0700337
H. Peter Anvinb34fce72008-10-24 16:05:19 -0700338\S{cl-2.06} Version 2.06
339
H. Peter Anvinc940afc2009-06-28 17:12:37 -0700340\b This release is dedicated to the memory of Charles A. Crayne, long
341 time NASM developer as well as moderator of \c{comp.lang.asm.x86} and
342 author of the book \e{Serious Assembler}. We miss you, Chuck.
343
H. Peter Anvinb34fce72008-10-24 16:05:19 -0700344\b Support for indirect macro expansion (\c{%[...]}). See \k{indmacro}.
345
H. Peter Anvin0b7d9032008-10-24 16:27:11 -0700346\b \c{%pop} can now take an argument, see \k{pushpop}.
347
H. Peter Anvin264b7b92008-10-24 16:38:17 -0700348\b The argument to \c{%use} is no longer macro-expanded. Use
349 \c{%[...]} if macro expansion is desired.
350
H. Peter Anvine263d042008-11-02 20:41:29 -0800351\b Support for thread-local storage in ELF32 and ELF64. See \k{elftls}.
352
H. Peter Anvin67a405e2008-11-04 14:26:32 -0800353\b Fix crash on \c{%ifmacro} without an argument.
354
H. Peter Anvin67478812008-11-06 09:42:11 -0800355\b Correct the arguments to the \c{POPCNT} instruction.
356
H. Peter Anvinfd925d92008-12-22 16:37:59 -0800357\b Fix section alignment in the Mach-O format.
358
H. Peter Anvine8a3e622009-02-18 14:13:25 -0800359\b Update AVX support to version 5 of the Intel specification.
360
H. Peter Anvin87513882009-02-21 18:26:20 -0800361\b Fix the handling of accesses to context-local macros from higher
362 levels in the context stack.
363
364\b Treat \c{WAIT} as a prefix rather than as an instruction, thereby
365 allowing constructs like \c{O16 FSAVE} to work correctly.
366
Victor van den Elzenb32536c2009-03-29 03:09:13 +0200367\b Support for structures with a non-zero base offset. See \k{struc}.
368
H. Peter Anvin9c7f3f52009-04-07 22:09:05 -0700369\b Correctly handle preprocessor token concatenation (see \k{concat})
370 involving floating-point numbers.
371
H. Peter Anvin883735f2009-06-25 11:23:37 -0700372\b The \c{PINSR} series of instructions have been corrected and
373 rationalized.
374
375\b Removed AMD SSE5, replaced with the new XOP/FMA4/CVT16 (rev 3.03)
376 spec.
377
H. Peter Anvind219a3e2009-06-25 12:30:50 -0700378\b The ELF backends no longer automatically generate a \c{.comment} section.
379
H. Peter Anvinc4471462009-06-25 14:54:44 -0700380\b Add additional "well-known" ELF sections with default attributes. See
381 \k{elfsect}.
382
H. Peter Anvinb34fce72008-10-24 16:05:19 -0700383
H. Peter Anvin7714ced2008-10-29 10:51:51 -0700384\S{cl-2.05.01} Version 2.05.01
385
386\b Fix the \c{-w}/\c{-W} option parsing, which was broken in NASM 2.05.
387
388
H. Peter Anvindc0bf472008-09-30 16:24:47 -0700389\S{cl-2.05} Version 2.05
390
H. Peter Anvin1abb9e52008-09-30 17:14:54 -0700391\b Fix redundant REX.W prefix on \c{JMP reg64}.
392
H. Peter Anvindc0bf472008-09-30 16:24:47 -0700393\b Make the behaviour of \c{-O0} match NASM 0.98 legacy behavior.
394 See \k{opt-O}.
395
H. Peter Anvin2f160432008-09-30 16:39:17 -0700396\b \c{-w-user} can be used to suppress the output of \c{%warning} directives.
397 See \k{opt-w}.
398
H. Peter Anvina3a60e92008-10-01 10:02:44 -0700399\b Fix bug where \c{ALIGN} would issue a full alignment datum instead of
400 zero bytes.
401
402\b Fix offsets in list files.
403
404\b Fix \c{%include} inside multi-line macros or loops.
405
H. Peter Anvin6c80ab62008-10-04 18:50:47 -0700406\b Fix error where NASM would generate a spurious warning on valid
407 optimizations of immediate values.
408
H. Peter Anvin04c60522008-10-06 18:00:13 -0700409\b Fix arguments to a number of the \c{CVT} SSE instructions.
410
H. Peter Anvin68b41d32008-10-06 19:15:42 -0700411\b Fix RIP-relative offsets when the instruction carries an immediate.
412
H. Peter Anvin3ffd0fc2008-10-17 23:36:45 -0700413\b Massive overhaul of the ELF64 backend for spec compliance.
H. Peter Anvin8cd1df82008-10-12 21:17:04 -0700414
H. Peter Anvin7766ab02008-10-23 19:29:28 -0700415\b Fix the Geode \c{PFRCPV} and \c{PFRSQRTV} instruction.
416
417\b Fix the SSE 4.2 \c{CRC32} instruction.
418
H. Peter Anvindc0bf472008-09-30 16:24:47 -0700419
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400420\S{cl-2.04} Version 2.04
421
H. Peter Anvin6477f3d2008-07-14 02:49:52 -0400422\b Sanitize macro handing in the \c{%error} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400423
H. Peter Anvin6477f3d2008-07-14 02:49:52 -0400424\b New \c{%warning} directive to issue user-controlled warnings.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400425
H. Peter Anvin8e3f75e2008-09-24 00:21:58 -0700426\b \c{%error} directives are now deferred to the final assembly phase.
427
428\b New \c{%fatal} directive to immediately terminate assembly.
429
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700430\b New \c{%strcat} directive to join quoted strings together.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400431
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700432\b New \c{%use} macro directive to support standard macro directives. See
433 \k{use}.
434
435\b Excess default parameters to \c{%macro} now issues a warning by default.
436 See \k{mlmacro}.
437
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -0700438\b Fix \c{%ifn} and \c{%elifn}.
439
440\b Fix nested \c{%else} clauses.
441
442\b Correct the handling of nested \c{%rep}s.
443
444\b New \c{%unmacro} directive to undeclare a multi-line macro.
445 See \k{unmacro}.
446
H. Peter Anvin010aee22008-09-24 17:34:37 -0700447\b Builtin macro \c{__PASS__} which expands to the current assembly pass.
448 See \k{pass_macro}.
449
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -0700450\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
451 strings. See \k{unicode}.
452
453\b Fix bug in case-insensitive matching when compiled on platforms that
454 don't use the \c{configure} script. Of the official release binaries,
455 that only affected the OS/2 binary.
456
457\b Support for x87 packed BCD constants. See \k{bcdconst}.
458
459\b Correct the \c{LTR} and \c{SLDT} instructions in 64-bit mode.
460
461\b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
462
463\b Add AVX versions of the AES instructions (\c{VAES}...).
464
465\b Fix the 256-bit FMA instructions.
466
467\b Add 256-bit AVX stores per the latest AVX spec.
468
469\b VIA XCRYPT instructions can now be written either with or without
470 \c{REP}, apparently different versions of the VIA spec wrote them
471 differently.
472
473\b Add missing 64-bit \c{MOVNTI} instruction.
474
475\b Fix the operand size of \c{VMREAD} and \c{VMWRITE}.
476
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700477\b Numerous bug fixes, especially to the AES, AVX and VTX instructions.
478
H. Peter Anvina2d542c2008-09-10 23:04:56 -0700479\b The optimizer now always runs until it converges. It also runs even
480 when disabled, but doesn't optimize. This allows most forward references
481 to be resolved properly.
482
H. Peter Anvinc83f9de2008-10-24 16:53:53 -0700483\b \c{%push} no longer needs a context identifier; omitting the context
484 identifier results in an anonymous context.
485
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400486
487\S{cl-2.03.01} Version 2.03.01
488
489\b Fix buffer overflow in the listing module.
490
491\b Fix the handling of hexadecimal escape codes in `...` strings.
492
493\b The Postscript/PDF documentation has been reformatted.
494
495\b The \c{-F} option now implies \c{-g}.
496
497
498\S{cl-2.03} Version 2.03
499
500\b Add support for Intel AVX, CLMUL and FMA instructions,
501including YMM registers.
502
503\b \c{dy}, \c{resy} and \c{yword} for 32-byte operands.
504
505\b Fix some SSE5 instructions.
506
507\b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions.
508
509\b Fix checking for critical expressions when the optimizer is enabled.
510
511\b Support the DWARF debugging format for ELF targets.
512
513\b Fix optimizations of signed bytes.
514
515\b Fix operation on bigendian machines.
516
517\b Fix buffer overflow in the preprocessor.
518
519\b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH).
520
521\b \c{%?} and \c{%??} to refer to the name of a macro itself. In particular,
522\c{%idefine keyword $%?} can be used to make a keyword "disappear".
523
524\b New options for dependency generation: \c{-MD}, \c{-MF},
525\c{-MP}, \c{-MT}, \c{-MQ}.
526
527\b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN
528reimplemented as a macro.
529
530\b \c{%include} now resolves macros in a sane manner.
531
532\b \c{%substr} can now be used to get other than one-character substrings.
533
534\b New type of character/string constants, using backquotes (\c{`...`}),
535which support C-style escape sequences.
536
537\b \c{%defstr} and \c{%idefstr} to stringize macro definitions before
538creation.
539
540\b Fix forward references used in \c{EQU} statements.
541
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400542
H. Peter Anvina5e02792009-06-24 16:50:54 -0700543\S{cl-2.02} Version 2.02
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400544
545\b Additional fixes for MMX operands with explicit \c{qword}, as well as
546 (hopefully) SSE operands with \c{oword}.
547
548\b Fix handling of truncated strings with \c{DO}.
549
550\b Fix segfaults due to memory overwrites when floating-point constants
551 were used.
552
553\b Fix segfaults due to missing include files.
554
555\b Fix OpenWatcom Makefiles for DOS and OS/2.
556
557\b Add autogenerated instruction list back into the documentation.
558
559\b ELF: Fix segfault when generating stabs, and no symbols have been
560 defined.
561
562\b ELF: Experimental support for DWARF debugging information.
563
564\b New compile date and time standard macros.
565
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400566\b \c{%ifnum} now returns true for negative numbers.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400567
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400568\b New \c{%iftoken} test for a single token.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400569
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400570\b New \c{%ifempty} test for empty expansion.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400571
572\b Add support for the \c{XSAVE} instruction group.
573
574\b Makefile for Netware/gcc.
575
576\b Fix issue with some warnings getting emitted way too many times.
577
578\b Autogenerated instruction list added to the documentation.
579
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400580
H. Peter Anvina5e02792009-06-24 16:50:54 -0700581\S{cl-2.01} Version 2.01
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400582
583\b Fix the handling of MMX registers with explicit \c{qword} tags on
584 memory (broken in 2.00 due to 64-bit changes.)
585
586\b Fix the PREFETCH instructions.
587
588\b Fix the documentation.
589
590\b Fix debugging info when using \c{-f elf}
591(backwards compatibility alias for \c{-f elf32}).
592
593\b Man pages for rdoff tools (from the Debian project.)
594
595\b ELF: handle large numbers of sections.
596
597\b Fix corrupt output when the optimizer runs out of passes.
598
599
600\S{cl-2.00} Version 2.00
601
602\b Added c99 data-type compliance.
603
604\b Added general x86-64 support.
605
606\b Added win64 (x86-64 COFF) output format.
607
608\b Added \c{__BITS__} standard macro.
609
610\b Renamed the \c{elf} output format to \c{elf32} for clarity.
611
612\b Added \c{elf64} and \c{macho} (MacOS X) output formats.
613
614\b Added Numeric constants in \c{dq} directive.
615
616\b Added \c{oword}, \c{do} and \c{reso} pseudo operands.
617
618\b Allow underscores in numbers.
619
620\b Added 8-, 16- and 128-bit floating-point formats.
621
622\b Added binary, octal and hexadecimal floating-point.
623
624\b Correct the generation of floating-point constants.
625
626\b Added floating-point option control.
627
628\b Added Infinity and NaN floating point support.
629
630\b Added ELF Symbol Visibility support.
631
632\b Added setting OSABI value in ELF header directive.
633
634\b Added Generate Makefile Dependencies option.
635
636\b Added Unlimited Optimization Passes option.
637
638\b Added \c{%IFN} and \c{%ELIFN} support.
639
640\b Added Logical Negation Operator.
641
642\b Enhanced Stack Relative Preprocessor Directives.
643
644\b Enhanced ELF Debug Formats.
645
646\b Enhanced Send Errors to a File option.
647
648\b Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
649
650\b Added a large number of additional instructions.
651
652\b Significant performance improvements.
653
H. Peter Anvin8a2f1452008-10-29 18:14:03 -0700654\b \c{-w+warning} and \c{-w-warning} can now be written as -Wwarning and
655 -Wno-warning, respectively. See \k{opt-w}.
656
657\b Add \c{-w+error} to treat warnings as errors. See \k{opt-w}.
658
659\b Add \c{-w+all} and \c{-w-all} to enable or disable all suppressible
660 warnings. See \k{opt-w}.
661
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400662
663\H{cl-0.98.xx} NASM 0.98 Series
664
665The 0.98 series was the production versions of NASM from 1999 to 2007.
666
667
668\S{cl-0.98.39} Version 0.98.39
669
670\b fix buffer overflow
671
672\b fix outas86's \c{.bss} handling
673
674\b "make spotless" no longer deletes config.h.in.
675
676\b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300).
677
678\b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol.
679
680\S{cl-0.98.38} Version 0.98.38
681
682
683\b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
684 \c{mkdep.pl} to be able to generate completely pathless dependencies, as
685 required by OpenWatcom wmake (it supports path searches, but not
686 explicit paths.)
687
688\b Fix the \c{STR} instruction.
689
690\b Fix the ELF output format, which was broken under certain
691 circumstances due to the addition of stabs support.
692
693\b Quick-fix Borland format debug-info for \c{-f obj}
694
695\b Fix for \c{%rep} with no arguments (#560568)
696
697\b Fix concatenation of preprocessor function call (#794686)
698
699\b Fix long label causes coredump (#677841)
700
701\b Use autoheader as well as autoconf to keep configure from generating
702 ridiculously long command lines.
703
704\b Make sure that all of the formats which support debugging output
705 actually will suppress debugging output when \c{-g} not specified.
706
707\S{cl-0.98.37} Version 0.98.37
708
709
710\b Paths given in \c{-I} switch searched for \c{incbin}-ed as
711 well as \c{%include}-ed files.
712
713\b Added stabs debugging for the ELF output format, patch from
714 Martin Wawro.
715
716\b Fix \c{output/outbin.c} to allow origin > 80000000h.
717
718\b Make \c{-U} switch work.
719
720\b Fix the use of relative offsets with explicit prefixes, e.g.
721\c{a32 loop foo}.
722
723\b Remove \c{backslash()}.
724
725\b Fix the \c{SMSW} and \c{SLDT} instructions.
726
727\b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}.
728If you mean the latter, please say so! :)
729
730\S{cl-0.98.36} Version 0.98.36
731
732
733\b Update rdoff - librarian/archiver - common rec - docs!
734
735\b Fix signed/unsigned problems.
736
737\b Fix \c{JMP FAR label} and \c{CALL FAR label}.
738
739\b Add new multisection support - map files - fix align bug
740
741\b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
742
743\b \c{Q} or \c{O} suffixes indicate octal
744
745\b Support Prescott new instructions (PNI).
746
747\b Cyrix \c{XSTORE} instruction.
748
749
750\S{cl-0.98.35} Version 0.98.35
751
752\b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
753
754\b Fix dependencies and compiler warnings.
755
756\b Add "const" in a number of places.
757
758\b Add -X option to specify error reporting format (use -Xvc to
759 integrate with Microsoft Visual Studio.)
760
761\b Minor changes for code legibility.
762
763\b Drop use of tmpnam() in rdoff (security fix.)
764
765
766\S{cl-0.98.34} Version 0.98.34
767
768\b Correct additional address-size vs. operand-size confusions.
769
770\b Generate dependencies for all Makefiles automatically.
771
772\b Add support for unimplemented (but theoretically available)
773 registers such as tr0 and cr5. Segment registers 6 and 7 are called
774 segr6 and segr7 for the operations which they can be represented.
775
776\b Correct some disassembler bugs related to redundant address-size prefixes.
777 Some work still remains in this area.
778
779\b Correctly generate an error for things like "SEG eax".
780
781\b Add the JMPE instruction, enabled by "CPU IA64".
782
783\b Correct compilation on newer gcc/glibc platforms.
784
785\b Issue an error on things like "jmp far eax".
786
787
788\S{cl-0.98.33} Version 0.98.33
789
790\b New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
791 round out the version-query macros. version.pl now understands
792 X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
793 X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
794
795\b New keyword "strict" to disable the optimization of specific
796 operands.
797
798\b Fix the handing of size overrides with JMP instructions
799 (instructions such as "jmp dword foo".)
800
801\b Fix the handling of "ABSOLUTE label", where "label" points into a
802 relocatable segment.
803
804\b Fix OBJ output format with lots of externs.
805
806\b More documentation updates.
807
808\b Add -Ov option to get verbose information about optimizations.
809
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400810\b Undo a braindead change which broke \c{%elif} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400811
812\b Makefile updates.
813
814
815\S{cl-0.98.32} Version 0.98.32
816
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400817\b Fix NASM crashing when \c{%macro} directives were left unterminated.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400818
819\b Lots of documentation updates.
820
821\b Complete rewrite of the PostScript/PDF documentation generator.
822
823\b The MS Visual C++ Makefile was updated and corrected.
824
825\b Recognize .rodata as a standard section name in ELF.
826
827\b Fix some obsolete Perl4-isms in Perl scripts.
828
829\b Fix configure.in to work with autoconf 2.5x.
830
831\b Fix a couple of "make cleaner" misses.
832
833\b Make the normal "./configure && make" work with Cygwin.
834
835
836\S{cl-0.98.31} Version 0.98.31
837
838\b Correctly build in a separate object directory again.
839
840\b Derive all references to the version number from the version file.
841
842\b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
843
844\b Lots of Makefile updates and bug fixes.
845
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400846\b New \c{%ifmacro} directive to test for multiline macros.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400847
848\b Documentation updates.
849
850\b Fixes for 16-bit OBJ format output.
851
852\b Changed the NASM environment variable to NASMENV.
853
854
855\S{cl-0.98.30} Version 0.98.30
856
857\b Changed doc files a lot: completely removed old READMExx and
858 Wishlist files, incorporating all information in CHANGES and TODO.
859
860\b I waited a long time to rename zoutieee.c to (original) outieee.c
861
862\b moved all output modules to output/ subdirectory.
863
864\b Added 'make strip' target to strip debug info from nasm & ndisasm.
865
866\b Added INSTALL file with installation instructions.
867
868\b Added -v option description to nasm man.
869
870\b Added dist makefile target to produce source distributions.
871
872\b 16-bit support for ELF output format (GNU extension, but useful.)
873
874
875\S{cl-0.98.28} Version 0.98.28
876
877\b Fastcooked this for Debian's Woody release:
878Frank applied the INCBIN bug patch to 0.98.25alt and called
879it 0.98.28 to not confuse poor little apt-get.
880
881
882\S{cl-0.98.26} Version 0.98.26
883
884\b Reorganised files even better from 0.98.25alt
885
886
887\S{cl-0.98.25alt} Version 0.98.25alt
888
889\b Prettified the source tree. Moved files to more reasonable places.
890
891\b Added findleak.pl script to misc/ directory.
892
893\b Attempted to fix doc.
894
895
896\S{cl-0.98.25} Version 0.98.25
897
898\b Line continuation character \c{\\}.
899
900\b Docs inadvertantly reverted - "dos packaging".
901
902
903\S{cl-0.98.24p1} Version 0.98.24p1
904
905\b FIXME: Someone, document this please.
906
907
908\S{cl-0.98.24} Version 0.98.24
909
910\b Documentation - Ndisasm doc added to Nasm.doc.
911
912
913\S{cl-0.98.23} Version 0.98.23
914
915\b Attempted to remove rdoff version1
916
917\b Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
918
919
920\S{cl-0.98.22} Version 0.98.22
921
922\b Update rdoff2 - attempt to remove v1.
923
924
925\S{cl-0.98.21} Version 0.98.21
926
927\b Optimization fixes.
928
929
930\S{cl-0.98.20} Version 0.98.20
931
932\b Optimization fixes.
933
934
935\S{cl-0.98.19} Version 0.98.19
936
937\b H. J. Lu's patch back out.
938
939
940\S{cl-0.98.18} Version 0.98.18
941
942\b Added ".rdata" to "-f win32".
943
944
945\S{cl-0.98.17} Version 0.98.17
946
947\b H. J. Lu's "bogus elf" patch. (Red Hat problem?)
948
949
950\S{cl-0.98.16} Version 0.98.16
951
952\b Fix whitespace before "[section ..." bug.
953
954
955\S{cl-0.98.15} Version 0.98.15
956
957\b Rdoff changes (?).
958
959\b Fix fixes to memory leaks.
960
961
962\S{cl-0.98.14} Version 0.98.14
963
964\b Fix memory leaks.
965
966
967\S{cl-0.98.13} Version 0.98.13
968
969\b There was no 0.98.13
970
971
972\S{cl-0.98.12} Version 0.98.12
973
974\b Update optimization (new function of "-O1")
975
976\b Changes to test/bintest.asm (?).
977
978
979\S{cl-0.98.11} Version 0.98.11
980
981\b Optimization changes.
982
983\b Ndisasm fixed.
984
985
986\S{cl-0.98.10} Version 0.98.10
987
988\b There was no 0.98.10
989
990
991\S{cl-0.98.09} Version 0.98.09
992
993\b Add multiple sections support to "-f bin".
994
995\b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
996
997\b Add "-v" as an alias to the "-r" switch.
998
999\b Remove "#ifdef" from Tasm compatibility options.
1000
1001\b Remove redundant size-overrides on "mov ds, ex", etc.
1002
1003\b Fixes to SSE2, other insns.dat (?).
1004
1005\b Enable uppercase "I" and "P" switches.
1006
1007\b Case insinsitive "seg" and "wrt".
1008
1009\b Update install.sh (?).
1010
1011\b Allocate tokens in blocks.
1012
1013\b Improve "invalid effective address" messages.
1014
1015
1016\S{cl-0.98.08} Version 0.98.08
1017
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001018\b Add "\c{%strlen}" and "\c{%substr}" macro operators
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001019
1020\b Fixed broken c16.mac.
1021
1022\b Unterminated string error reported.
1023
1024\b Fixed bugs as per 0.98bf
1025
1026
1027\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
1028
1029Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
1030
1031\b More closely compatible with 0.98 when -O0 is implied
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001032or specified. Not strictly identical, since backward
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001033branches in range of short offsets are recognized, and signed
1034byte values with no explicit size specification will be
1035assembled as a single byte.
1036
1037\b More forgiving with the PUSH instruction. 0.98 requires
1038a size to be specified always. 0.98.09b will imply the size
1039from the current BITS setting (16 or 32).
1040
1041\b Changed definition of the optimization flag:
1042
1043 -O0 strict two-pass assembly, JMP and Jcc are
1044 handled more like 0.98, except that back-
1045 ward JMPs are short, if possible.
1046
1047 -O1 strict two-pass assembly, but forward
1048 branches are assembled with code guaranteed
1049 to reach; may produce larger code than
1050 -O0, but will produce successful assembly
1051 more often if branch offset sizes are not
1052 specified.
1053
1054 -O2 multi-pass optimization, minimize branch
1055 offsets; also will minimize signed immed-
1056 iate bytes, overriding size specification.
1057
1058 -O3 like -O2, but more passes taken, if needed
1059
1060
1061\S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01
1062
1063\b Added Stepane Denis' SSE2 instructions to a *working*
1064 version of the code - some earlier versions were based on
1065 broken code - sorry 'bout that. version "0.98.07"
1066
1067
106801/28/01
1069
1070
1071\b Cosmetic modifications to nasm.c, nasm.h,
1072 AUTHORS, MODIFIED
1073
1074
1075\S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01
1076
1077
1078\b - Add "metalbrain"s jecxz bug fix in insns.dat
1079 - alter nasmdoc.src to match - version "0.98.06f"
1080
1081
1082\S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01
1083
1084
1085\b Removed the "outforms.h" file - it appears to be
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001086 someone's old backup of "outform.h". version "0.98.06e"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001087
108801/09/01
1089
1090\b fbk - finally added the fix for the "multiple %includes bug",
1091 known since 7/27/99 - reported originally (?) and sent to
1092 us by Austin Lunnen - he reports that John Fine had a fix
1093 within the day. Here it is...
1094
1095\b Nelson Rush resigns from the group. Big thanks to Nelson for
1096 his leadership and enthusiasm in getting these changes
1097 incorporated into Nasm!
1098
1099\b fbk - [list +], [list -] directives - ineptly implemented, should
1100 be re-written or removed, perhaps.
1101
1102\b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
1103 as well - testing might be desirable...
1104
110508/07/00
1106
1107\b James Seter - -postfix, -prefix command line switches.
1108
1109\b Yuri Zaporogets - rdoff utility changes.
1110
1111
1112\S{cl-0.98p1} Version 0.98p1
1113
1114\b GAS-like palign (Panos Minos)
1115
1116\b FIXME: Someone, fill this in with details
1117
1118
1119\S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed)
1120
1121\b Fixed - elf and aoutb bug - shared libraries
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001122 - multiple "%include" bug in "-f obj"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001123 - jcxz, jecxz bug
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001124 - unrecognized option bug in ndisasm
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001125
1126\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
1127
1128\b Added signed byte optimizations for the 0x81/0x83 class
1129of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
1130when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also
1131optimization of signed byte form of 'PUSH imm' and 'IMUL
1132reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.
1133
1134\b Added multi-pass JMP and Jcc offset optimization. Offsets
1135on forward references will preferentially use the short form,
1136without the need to code a specific size (short or near) for
1137the branch. Added instructions for 'Jcc label' to use the
1138form 'Jnotcc $+3/JMP label', in cases where a short offset
1139is out of bounds. If compiling for a 386 or higher CPU, then
1140the 386 form of Jcc will be used instead.
1141
1142This feature is controlled by a new command-line switch: "O",
1143(upper case letter O). "-O0" reverts the assembler to no
1144extra optimization passes, "-O1" allows up to 5 extra passes,
1145and "-O2"(default), allows up to 10 extra optimization passes.
1146
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001147\b Added a new directive: 'cpu XXX', where XXX is any of:
H. Peter Anvin04156cd2008-07-14 02:45:57 -040011488086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
1149Katmai. All are case insensitive. All instructions will
1150be selected only if they apply to the selected cpu or lower.
1151Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
1152
1153\b Added to 'standard.mac', the "use16" and "use32" forms of
1154the "bits 16/32" directive. This is nothing new, just conforms
1155to a lot of other assemblers. (minor)
1156
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001157\b Changed label allocation from 320/32 (10000 labels @ 200K+)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001158to 32/37 (1000 labels); makes running under DOS much easier.
1159Since additional label space is allocated dynamically, this
1160should have no effect on large programs with lots of labels.
1161The 37 is a prime, believed to be better for hashing. (minor)
1162
1163
1164\S{cl-0.98.03} Version 0.98.03
1165
1166"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for
1167historical reasons: 0.98.02 was trashed." --John Coffman
1168<johninsd@san.rr.com>, 27-Jul-2000
1169
1170\b Kendall Bennett's SciTech MGL changes
1171
1172\b Note that you must define "TASM_COMPAT" at compile-time
1173to get the Tasm Ideal Mode compatibility.
1174
1175\b All changes can be compiled in and out using the TASM_COMPAT macros,
1176and when compiled without TASM_COMPAT defined we get the exact same
1177binary as the unmodified 0.98 sources.
1178
1179\b standard.mac, macros.c: Added macros to ignore TASM directives before
1180first include
1181
1182\b nasm.h: Added extern declaration for tasm_compatible_mode
1183
1184\b nasm.c: Added global variable tasm_compatible_mode
1185
1186\b Added command line switch for TASM compatible mode (-t)
1187
1188\b Changed version command line to reflect when compiled with TASM additions
1189
1190\b Added response file processing to allow all arguments on a single
1191line (response file is @resp rather than -@resp for NASM format).
1192
1193\b labels.c: Changes islocal() macro to support TASM style @@local labels.
1194
1195\b Added islocalchar() macro to support TASM style @@local labels.
1196
1197\b parser.c: Added support for TASM style memory references (ie: mov
1198[DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
1199
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001200\b preproc.c: Added new directives, \c{%arg}, \c{%local}, \c{%stacksize} to directives
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001201table
1202
1203\b Added support for TASM style directives without a leading % symbol.
1204
1205\b Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
1206
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001207\b A new keyword \c{%xdefine} and its case-insensitive counterpart \c{%ixdefine}.
1208They work almost the same way as \c{%define} and \c{%idefine} but expand
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001209the definition immediately, not on the invocation. Something like a cross
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001210between \c{%define} and \c{%assign}. The "x" suffix stands for "eXpand", so
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001211"xdefine" can be deciphered as "expand-and-define". Thus you can do
1212things like this:
1213
1214\c %assign ofs 0
1215\c
1216\c %macro arg 1
1217\c %xdefine %1 dword [esp+ofs]
1218\c %assign ofs ofs+4
1219\c %endmacro
1220
1221\b Changed the place where the expansion of %$name macros are expanded.
1222Now they are converted into ..@ctxnum.name form when detokenizing, so
1223there are no quirks as before when using %$name arguments to macros,
1224in macros etc. For example:
1225
1226\c %macro abc 1
1227\c %define %1 hello
1228\c %endm
1229\c
1230\c abc %$here
1231\c %$here
1232
1233 Now last line will be expanded into "hello" as expected. This also allows
1234 for lots of goodies, a good example are extended "proc" macros included
1235 in this archive.
1236
1237\b Added a check for "cstk" in smacro_defined() before calling get_ctx() -
1238 this allows for things like:
1239
1240\c %ifdef %$abc
1241\c %endif
1242
1243 to work without warnings even in no context.
1244
1245\b Added a check for "cstk" in %if*ctx and %elif*ctx directives -
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001246 this allows to use \c{%ifctx} without excessive warnings. If there is
1247 no active context, \c{%ifctx} goes through "false" branch.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001248
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001249\b Removed "user error: " prefix with \c{%error} directive: it just clobbers the
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001250 output and has absolutely no functionality. Besides, this allows to write
1251 macros that does not differ from built-in functions in any way.
1252
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001253\b Added expansion of string that is output by \c{%error} directive. Now you
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001254 can do things like:
1255
1256\c %define hello(x) Hello, x!
1257\c
1258\c %define %$name andy
1259\c %error "hello(%$name)"
1260
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001261 Same happened with \c{%include} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001262
1263\b Now all directives that expect an identifier will try to expand and
1264 concatenate everything without whitespaces in between before usage.
1265 For example, with "unfixed" nasm the commands
1266
1267\c %define %$abc hello
1268\c %define __%$abc goodbye
1269\c __%$abc
1270
1271 would produce "incorrect" output: last line will expand to
1272
1273\c hello goodbyehello
1274
1275 Not quite what you expected, eh? :-) The answer is that preprocessor
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001276 treats the \c{%define} construct as if it would be
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001277
1278\c %define __ %$abc goodbye
1279
1280 (note the white space between __ and %$abc). After my "fix" it
1281 will "correctly" expand into
1282
1283\c goodbye
1284
1285 as expected. Note that I use quotes around words "correct", "incorrect"
1286 etc because this is rather a feature not a bug; however current behaviour
1287 is more logical (and allows more advanced macro usage :-).
1288
1289 Same change was applied to:
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001290 \c{%push},\c{%macro},\c{%imacro},\c{%define},\c{%idefine},\c{%xdefine},\c{%ixdefine},
1291 \c{%assign},\c{%iassign},\c{%undef}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001292
1293\b A new directive [WARNING {+|-}warning-id] have been added. It works only
1294 if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
1295
1296\b A new warning type: macro-selfref. By default this warning is disabled;
1297 when enabled NASM warns when a macro self-references itself; for example
1298 the following source:
1299
1300\c [WARNING macro-selfref]
1301\c
1302\c %macro push 1-*
1303\c %rep %0
1304\c push %1
1305\c %rotate 1
1306\c %endrep
1307\c %endmacro
1308\c
1309\c push eax,ebx,ecx
1310
1311 will produce a warning, but if we remove the first line we won't see it
1312 anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
1313 eats such constructs without warnings at all).
1314
1315\b Added a "error" routine to preprocessor which always will set ERR_PASS1
1316 bit in severity_code. This removes annoying repeated errors on first
1317 and second passes from preprocessor.
1318
1319\b Added the %+ operator in single-line macros for concatenating two
1320 identifiers. Usage example:
1321
1322\c %define _myfunc _otherfunc
1323\c %define cextern(x) _ %+ x
1324\c cextern (myfunc)
1325
1326 After first expansion, third line will become "_myfunc". After this
1327 expansion is performed again so it becomes "_otherunc".
1328
1329\b Now if preprocessor is in a non-emitting state, no warning or error
1330 will be emitted. Example:
1331
1332\c %if 1
1333\c mov eax,ebx
1334\c %else
1335\c put anything you want between these two brackets,
1336\c even macro-parameter references %1 or local
1337\c labels %$zz or macro-local labels %%zz - no
1338\c warning will be emitted.
1339\c %endif
1340
1341\b Context-local variables on expansion as a last resort are looked up
1342 in outer contexts. For example, the following piece:
1343
1344\c %push outer
1345\c %define %$a [esp]
1346\c
1347\c %push inner
1348\c %$a
1349\c %pop
1350\c %pop
1351
1352 will expand correctly the fourth line to [esp]; if we'll define another
1353 %$a inside the "inner" context, it will take precedence over outer
1354 definition. However, this modification has been applied only to
1355 expand_smacro and not to smacro_define: as a consequence expansion
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001356 looks in outer contexts, but \c{%ifdef} won't look in outer contexts.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001357
1358 This behaviour is needed because we don't want nested contexts to
1359 act on already defined local macros. Example:
1360
1361\c %define %$arg1 [esp+4]
1362\c test eax,eax
1363\c if nz
1364\c mov eax,%$arg1
1365\c endif
1366
1367 In this example the "if" mmacro enters into the "if" context, so %$arg1
1368 is not valid anymore inside "if". Of course it could be worked around
1369 by using explicitely %$$arg1 but this is ugly IMHO.
1370
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001371\b Fixed memory leak in \c{%undef}. The origline wasn't freed before
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001372 exiting on success.
1373
1374\b Fixed trap in preprocessor when line expanded to empty set of tokens.
1375 This happens, for example, in the following case:
1376
1377\c #define SOMETHING
1378\c SOMETHING
1379
1380
1381\S{cl-0.98} Version 0.98
1382
1383All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
1384
1385\b The documentation comment delimiter is \# not #.
1386
1387\b Allow EQU definitions to refer to external labels; reported by
1388 Pedro Gimeno.
1389
1390\b Re-enable support for RDOFF v1; reported by Pedro Gimeno.
1391
1392\b Updated License file per OK from Simon and Julian.
1393
1394
1395\S{cl-0.98p9} Version 0.98p9
1396
1397\b Update documentation (although the instruction set reference will
1398 have to wait; I don't want to hold up the 0.98 release for it.)
1399
1400\b Verified that the NASM implementation of the PEXTRW and PMOVMSKB
1401 instructions is correct. The encoding differs from what the Intel
1402 manuals document, but the Pentium III behaviour matches NASM, not
1403 the Intel manuals.
1404
1405\b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
1406 Stefan Hoffmeister.
1407
1408\b Resurrect the -s option, which was removed when changing the
1409 diagnostic output to stdout.
1410
1411
1412\S{cl-0.98p8} Version 0.98p8
1413
1414\b Fix for "DB" when NASM is running on a bigendian machine.
1415
1416\b Invoke insns.pl once for each output script, making Makefile.in
1417 legal for "make -j".
1418
1419\b Improve the Unix configure-based makefiles to make package
1420 creation easier.
1421
1422\b Included an RPM .spec file for building RPM (RedHat Package Manager)
1423 packages on Linux or Unix systems.
1424
1425\b Fix Makefile dependency problems.
1426
1427\b Change src/rdsrc.pl to include sectioning information in info
1428 output; required for install-info to work.
1429
1430\b Updated the RDOFF distribution to version 2 from Jules; minor
1431 massaging to make it compile in my environment.
1432
1433\b Split doc files that can be built by anyone with a Perl interpreter off
1434 into a separate archive.
1435
1436\b "Dress rehearsal" release!
1437
1438
1439\S{cl-0.98p7} Version 0.98p7
1440
1441\b Fixed opcodes with a third byte-sized immediate argument to not
1442 complain if given "byte" on the immediate.
1443
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001444\b Allow \c{%undef} to remove single-line macros with arguments. This
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001445 matches the behaviour of #undef in the C preprocessor.
1446
1447\b Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
1448 compatibility with most C compilers and preprocessors. This allows
1449 Makefile options to be shared between cc and nasm, for example.
1450
1451\b Minor cleanups.
1452
1453\b Went through the list of Katmai instructions and hopefully fixed the
1454 (rather few) mistakes in it.
1455
1456\b (Hopefully) fixed a number of disassembler bugs related to ambiguous
1457 instructions (disambiguated by -p) and SSE instructions with REP.
1458
1459\b Fix for bug reported by Mark Junger: "call dword 0x12345678" should
1460 work and may add an OSP (affected CALL, JMP, Jcc).
1461
1462\b Fix for environments when "stderr" isn't a compile-time constant.
1463
1464
1465\S{cl-0.98p6} Version 0.98p6
1466
1467
1468\b Took officially over coordination of the 0.98 release; so drop
1469 the p3.x notation. Skipped p4 and p5 to avoid confusion with John
1470 Fine's J4 and J5 releases.
1471
1472\b Update the documentation; however, it still doesn't include
1473 documentation for the various new instructions. I somehow wonder if
1474 it makes sense to have an instruction set reference in the assembler
1475 manual when Intel et al have PDF versions of their manuals online.
1476
1477\b Recognize "idt" or "centaur" for the -p option to ndisasm.
1478
1479\b Changed error messages back to stderr where they belong, but add an
1480 -E option to redirect them elsewhere (the DOS shell cannot redirect
1481 stderr.)
1482
1483\b -M option to generate Makefile dependencies (based on code from Alex
1484 Verstak.)
1485
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001486\b \c{%undef} preprocessor directive, and -u option, that undefines a
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001487 single-line macro.
1488
1489\b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
1490 Chuck Crayne.
1491
1492\b Various minor bugfixes (reported by):
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001493 - Dangling \c{%s} in preproc.c (Martin Junker)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001494
1495\b THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am
1496 on a trip and didn't bring the Katmai instruction reference, so I
1497 can't work on them right now.
1498
1499\b Updated the License file per agreement with Simon and Jules to
1500 include a GPL distribution clause.
1501
1502
1503\S{cl-0.98p3.7} Version 0.98p3.7
1504
1505\b (Hopefully) fixed the canned Makefiles to include the outrdf2 and
1506 zoutieee modules.
1507
1508\b Renamed changes.asm to changed.asm.
1509
1510
1511\S{cl-0.98p3.6} Version 0.98p3.6
1512
1513\b Fixed a bunch of instructions that were added in 0.98p3.5 which had
1514 memory operands, and the address-size prefix was missing from the
1515 instruction pattern.
1516
1517
1518\S{cl-0.98p3.5} Version 0.98p3.5
1519
1520\b Merged in changes from John S. Fine's 0.98-J5 release. John's based
1521 0.98-J5 on my 0.98p3.3 release; this merges the changes.
1522
1523\b Expanded the instructions flag field to a long so we can fit more
1524 flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
1525 such.
1526
1527\b Fix the "PRIV" flag on a bunch of instructions, and create new
1528 "PROT" flag for protected-mode-only instructions (orthogonal to if
1529 the instruction is privileged!) and new "SMM" flag for SMM-only
1530 instructions.
1531
1532\b Added AMD-only SYSCALL and SYSRET instructions.
1533
1534\b Make SSE actually work, and add new Katmai MMX instructions.
1535
1536\b Added a -p (preferred vendor) option to ndisasm so that it can
1537 distinguish e.g. Cyrix opcodes also used in SSE. For example:
1538
1539\c ndisasm -p cyrix aliased.bin
1540\c 00000000 670F514310 paddsiw mm0,[ebx+0x10]
1541\c 00000005 670F514320 paddsiw mm0,[ebx+0x20]
1542\c ndisasm -p intel aliased.bin
1543\c 00000000 670F514310 sqrtps xmm0,[ebx+0x10]
1544\c 00000005 670F514320 sqrtps xmm0,[ebx+0x20]
1545
1546\b Added a bunch of Cyrix-specific instructions.
1547
1548
1549\S{cl-0.98p3.4} Version 0.98p3.4
1550
1551\b Made at least an attempt to modify all the additional Makefiles (in
1552 the Mkfiles directory). I can't test it, but this was the best I
1553 could do.
1554
1555\b DOS DJGPP+"Opus Make" Makefile from John S. Fine.
1556
1557\b changes.asm changes from John S. Fine.
1558
1559
1560\S{cl-0.98p3.3} Version 0.98p3.3
1561
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001562\b Patch from Conan Brink to allow nesting of \c{%rep} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001563
1564\b If we're going to allow INT01 as an alias for INT1/ICEBP (one of
1565 Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
1566 as well.
1567
1568\b Updated changes.asm to include the latest changes.
1569
1570\b Tried to clean up the <CR>s that had snuck in from a DOS/Windows
1571 environment into my Unix environment, and try to make sure than
1572 DOS/Windows users get them back.
1573
1574\b We would silently generate broken tools if insns.dat wasn't sorted
1575 properly. Change insns.pl so that the order doesn't matter.
1576
1577\b Fix bug in insns.pl (introduced by me) which would cause conditional
1578 instructions to have an extra "cc" in disassembly, e.g. "jnz"
1579 disassembled as "jccnz".
1580
1581
1582\S{cl-0.98p3.2} Version 0.98p3.2
1583
1584\b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
1585 http://www.csoft.net/cz/johnfine/
1586
1587\b Changed previous "spotless" Makefile target (appropriate for distribution)
1588 to "distclean", and added "cleaner" target which is same as "clean"
1589 except deletes files generated by Perl scripts; "spotless" is union.
1590
1591\b Removed BASIC programs from distribution. Get a Perl interpreter
1592 instead (see below.)
1593
1594\b Calling this "pre-release 3.2" rather than "p3-hpa2" because of
1595 John's contributions.
1596
1597\b Actually link in the IEEE output format (zoutieee.c); fix a bunch of
1598 compiler warnings in that file. Note I don't know what IEEE output
1599 is supposed to look like, so these changes were made "blind".
1600
1601
1602\S{cl-0.98p3-hpa} Version 0.98p3-hpa
1603
1604\b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
1605 buildable version for Unix systems (Makefile.in updates, etc.)
1606
1607\b Changed insns.pl to create the instruction tables in nasm.h and
1608 names.c, so that a new instruction can be added by adding it *only*
1609 to insns.dat.
1610
1611\b Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
1612 FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
1613 guarantee will never be used; one of them is documented as UD2 in
1614 Intel documentation, the other one just as "Undefined Opcode" --
1615 calling it UD1 seemed to make sense.)
1616
1617\b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
1618 characters long. Now MAX_SYMBOL is derived from insns.dat.
1619
1620\b A note on the BASIC programs included: forget them. insns.bas is
1621 already out of date. Get yourself a Perl interpreter for your
1622 platform of choice at
1623 \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}.
1624
1625
1626\S{cl-0.98p3} Version 0.98 pre-release 3
1627
1628\b added response file support, improved command line handling, new layout
1629help screen
1630
1631\b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
1632related bugs, updated Wishlist; 0.98 Prerelease 3.
1633
1634
1635\S{cl-0.98p2} Version 0.98 pre-release 2
1636
1637\b fixed bug in outcoff.c to do with truncating section names longer
1638than 8 characters, referencing beyond end of string; 0.98 pre-release 2
1639
1640
1641\S{cl-0.98p1} Version 0.98 pre-release 1
1642
1643\b Fixed a bug whereby STRUC didn't work at all in RDF.
1644
1645\b Fixed a problem with group specification in PUBDEFs in OBJ.
1646
1647\b Improved ease of adding new output formats. Contribution due to
1648Fox Cutter.
1649
1650\b Fixed a bug in relocations in the `bin' format: was showing up when
1651a relocatable reference crossed an 8192-byte boundary in any output
1652section.
1653
1654\b Fixed a bug in local labels: local-label lookups were inconsistent
1655between passes one and two if an EQU occurred between the definition
1656of a global label and the subsequent use of a local label local to
1657that global.
1658
1659\b Fixed a seg-fault in the preprocessor (again) which happened when
1660you use a blank line as the first line of a multi-line macro
1661definition and then defined a label on the same line as a call to
1662that macro.
1663
1664\b Fixed a stale-pointer bug in the handling of the NASM environment
1665variable. Thanks to Thomas McWilliams.
1666
1667\b ELF had a hard limit on the number of sections which caused
1668segfaults when transgressed. Fixed.
1669
1670\b Added ability for ndisasm to read from stdin by using `-' as the
1671filename.
1672
1673\b ndisasm wasn't outputting the TO keyword. Fixed.
1674
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001675\b Fixed error cascade on bogus expression in \c{%if} - an error in
1676evaluation was causing the entire \c{%if} to be discarded, thus creating
1677trouble later when the \c{%else} or \c{%endif} was encountered.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001678
1679\b Forward reference tracking was instruction-granular not operand-
1680granular, which was causing 286-specific code to be generated
1681needlessly on code of the form `shr word [forwardref],1'. Thanks to
1682Jim Hague for sending a patch.
1683
1684\b All messages now appear on stdout, as sending them to stderr serves
1685no useful purpose other than to make redirection difficult.
1686
1687\b Fixed the problem with EQUs pointing to an external symbol - this
1688now generates an error message.
1689
1690\b Allowed multiple size prefixes to an operand, of which only the first
1691is taken into account.
1692
1693\b Incorporated John Fine's changes, including fixes of a large number
1694of preprocessor bugs, some small problems in OBJ, and a reworking of
1695label handling to define labels before their line is assembled, rather
1696than after.
1697
1698\b Reformatted a lot of the source code to be more readable. Included
1699'coding.txt' as a guideline for how to format code for contributors.
1700
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001701\b Stopped nested \c{%reps} causing a panic - they now cause a slightly more
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001702friendly error message instead.
1703
1704\b Fixed floating point constant problems (patch by Pedro Gimeno)
1705
1706\b Fixed the return value of insn_size() not being checked for -1, indicating
1707an error.
1708
1709\b Incorporated 3Dnow! instructions.
1710
1711\b Fixed the 'mov eax, eax + ebx' bug.
1712
1713\b Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
1714
1715\b Incorporated John Fine's command line parsing changes
1716
1717\b Incorporated David Lindauer's OMF debug support
1718
1719\b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size
1720specification warning when sizes agree).
1721
1722
1723\H{cl-0.9x} NASM 0.9 Series
1724
1725Revisions before 0.98.
1726
1727
1728\S{cl-0.97} Version 0.97 released December 1997
1729
1730\b This was entirely a bug-fix release to 0.96, which seems to have got
1731cursed. Silly me.
1732
1733\b Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
1734fail. Caused by an error in the `MOV EAX,<segment>' support.
1735
1736\b ndisasm hung at EOF when compiled with lcc on Linux because lcc on
1737Linux somehow breaks feof(). ndisasm now does not rely on feof().
1738
1739\b A heading in the documentation was missing due to a markup error in
1740the indexing. Fixed.
1741
1742\b Fixed failure to update all pointers on realloc() within extended-
1743operand code in parser.c. Was causing wrong behaviour and seg faults
1744on lines such as `dd 0.0,0.0,0.0,0.0,...'
1745
1746\b Fixed a subtle preprocessor bug whereby invoking one multi-line
1747macro on the first line of the expansion of another, when the second
1748had been invoked with a label defined before it, didn't expand the
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001749inner macro.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001750
1751\b Added internal.doc back in to the distribution archives - it was
1752missing in 0.96 *blush*
1753
1754\b Fixed bug causing 0.96 to be unable to assemble its own test files,
1755specifically objtest.asm. *blush again*
1756
1757\b Fixed seg-faults and bogus error messages caused by mismatching
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001758\c{%rep} and \c{%endrep} within multi-line macro definitions.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001759
1760\b Fixed a problem with buffer overrun in OBJ, which was causing
1761corruption at ends of long PUBDEF records.
1762
1763\b Separated DOS archives into main-program and documentation to reduce
1764download size.
1765
1766
1767\S{cl-0.96} Version 0.96 released November 1997
1768
1769\b Fixed a bug whereby, if `nasm sourcefile' would cause a filename
1770collision warning and put output into `nasm.out', then `nasm
1771sourcefile -o outputfile' still gave the warning even though the
1772`-o' was honoured.
1773Fixed name pollution under Digital UNIX: one of its header files
1774defined R_SP, which broke the enum in nasm.h.
1775
1776\b Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
1777two-operand forms; NDISASM didn't recognise the longer register
1778forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
1779flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
1780size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
1781undocumented because the Intel Architecture reference documents
1782them.
1783
1784\b Fixed a problem with the local-label mechanism, whereby strange
1785types of symbol (EQUs, auto-defined OBJ segment base symbols)
1786interfered with the `previous global label' value and screwed up
1787local labels.
1788
1789\b Fixed a bug whereby the stub preprocessor didn't communicate with
1790the listing file generator, so that the -a and -l options in
1791conjunction would produce a useless listing file.
1792
1793\b Merged `os2' object file format back into `obj', after discovering
1794that `obj' _also_ shouldn't have a link pass separator in a module
1795containing a non-trivial MODEND. Flat segments are now declared
1796using the FLAT attribute. `os2' is no longer a valid object format
1797name: use `obj'.
1798
1799\b Removed the fixed-size temporary storage in the evaluator. Very very
1800long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
1801so) should now no longer crash NASM.
1802
1803\b Fixed a bug involving segfaults on disassembly of MMX instructions,
1804by changing the meaning of one of the operand-type flags in nasm.h.
1805This may cause other apparently unrelated MMX problems; it needs to
1806be tested thoroughly.
1807
1808\b Fixed some buffer overrun problems with large OBJ output files.
1809Thanks to DJ Delorie for the bug report and fix.
1810
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001811\b Made preprocess-only mode actually listen to the \c{%line} markers as it
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001812prints them, so that it can report errors more sanely.
1813
1814\b Re-designed the evaluator to keep more sensible track of expressions
1815involving forward references: can now cope with previously-nightmare
1816situations such as:
1817
1818\c mov ax,foo | bar
1819\c foo equ 1
1820\c bar equ 2
1821
1822\b Added the ALIGN and ALIGNB standard macros.
1823
1824\b Added PIC support in ELF: use of WRT to obtain the four extra
1825relocation types needed.
1826
1827\b Added the ability for output file formats to define their own
1828extensions to the GLOBAL, COMMON and EXTERN directives.
1829
1830\b Implemented common-variable alignment, and global-symbol type and
1831size declarations, in ELF.
1832
1833\b Implemented NEAR and FAR keywords for common variables, plus
1834far-common element size specification, in OBJ.
1835
1836\b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
1837default WRT specification (either a segment or a group).
1838
1839\b Transformed the Unix NASM archive into an auto-configuring package.
1840
1841\b Added a sanity-check for people applying SEG to things which are
1842already segment bases: this previously went unnoticed by the SEG
1843processing and caused OBJ-driver panics later.
1844
1845\b Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
1846type references: OBJ doesn't directly support dword-size segment
1847base fixups, but as long as the low two bytes of the constant term
1848are zero, a word-size fixup can be generated instead and it will
1849work.
1850
1851\b Added the ability to specify sections' alignment requirements in
1852Win32 object files and pure binary files.
1853
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001854\b Added preprocess-time expression evaluation: the \c{%assign} (and
1855\c{%iassign}) directive and the bare \c{%if} (and \c{%elif}) conditional. Added
1856relational operators to the evaluator, for use only in \c{%if}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001857constructs: the standard relationals = < > <= >= <> (and C-like
1858synonyms == and !=) plus low-precedence logical operators &&, ^^ and
1859||.
1860
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001861\b Added a preprocessor repeat construct: \c{%rep} / \c{%exitrep} / \c{%endrep}.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001862
1863\b Added the __FILE__ and __LINE__ standard macros.
1864
1865\b Added a sanity check for number constants being greater than
18660xFFFFFFFF. The warning can be disabled.
1867
1868\b Added the %0 token whereby a variadic multi-line macro can tell how
1869many parameters it's been given in a specific invocation.
1870
1871\b Added \c{%rotate}, allowing multi-line macro parameters to be cycled.
1872
1873\b Added the `*' option for the maximum parameter count on multi-line
1874macros, allowing them to take arbitrarily many parameters.
1875
1876\b Added the ability for the user-level forms of EXTERN, GLOBAL and
1877COMMON to take more than one argument.
1878
1879\b Added the IMPORT and EXPORT directives in OBJ format, to deal with
1880Windows DLLs.
1881
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001882\b Added some more preprocessor \c{%if} constructs: \c{%ifidn} / \c{%ifidni} (exact
1883textual identity), and \c{%ifid} / \c{%ifnum} / \c{%ifstr} (token type testing).
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001884
1885\b Added the ability to distinguish SHL AX,1 (the 8086 version) from
1886SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
1887be 1).
1888
1889\b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
1890with PIC shared library features.
1891
1892\b Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
1893FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
1894otherwise accepted standard. The previous behaviour, though it was a
1895deliberate feature, was a deliberate feature based on a
1896misunderstanding. Apologies for the inconvenience.
1897
1898\b Improved the flexibility of ABSOLUTE: you can now give it an
1899expression rather than being restricted to a constant, and it can
1900take relocatable arguments as well.
1901
1902\b Added the ability for a variable to be declared as EXTERN multiple
1903times, and the subsequent definitions are just ignored.
1904
1905\b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
1906alone on a line (without a following instruction).
1907
1908\b Improved sanity checks on whether the arguments to EXTERN, GLOBAL
1909and COMMON are valid identifiers.
1910
1911\b Added misc/exebin.mac to allow direct generation of .EXE files by
1912hacking up an EXE header using DB and DW; also added test/binexe.asm
1913to demonstrate the use of this. Thanks to Yann Guidon for
1914contributing the EXE header code.
1915
1916\b ndisasm forgot to check whether the input file had been successfully
1917opened. Now it does. Doh!
1918
1919\b Added the Cyrix extensions to the MMX instruction set.
1920
1921\b Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
1922assembled differently. This is important since [ESI+EBP] and
1923[EBP+ESI] have different default base segment registers.
1924
1925\b Added support for the PharLap OMF extension for 4096-byte segment
1926alignment.
1927
1928
1929\S{cl-0.95 released July 1997} Version 0.95 released July 1997
1930
1931\b Fixed yet another ELF bug. This one manifested if the user relied on
1932the default segment, and attempted to define global symbols without
1933first explicitly declaring the target segment.
1934
1935\b Added makefiles (for NASM and the RDF tools) to build Win32 console
1936apps under Symantec C++. Donated by Mark Junker.
1937
1938\b Added `macros.bas' and `insns.bas', QBasic versions of the Perl
1939scripts that convert `standard.mac' to `macros.c' and convert
1940`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
1941Junker.
1942
1943\b Changed the diassembled forms of the conditional instructions so
1944that JB is now emitted as JC, and other similar changes. Suggested
1945list by Ulrich Doewich.
1946
1947\b Added `@' to the list of valid characters to begin an identifier
1948with.
1949
1950\b Documentary changes, notably the addition of the `Common Problems'
1951section in nasm.doc.
1952
1953\b Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
1954
1955\b Fixed a bug in perm_copy() in labels.c which was causing exceptions
1956in cleanup_labels() on some systems.
1957
1958\b Positivity sanity check in TIMES argument changed from a warning to
1959an error following a further complaint.
1960
1961\b Changed the acceptable limits on byte and word operands to allow
1962things like `~10111001b' to work.
1963
1964\b Fixed a major problem in the preprocessor which caused seg-faults if
1965macro definitions contained blank lines or comment-only lines.
1966
1967\b Fixed inadequate error checking on the commas separating the
1968arguments to `db', `dw' etc.
1969
1970\b Fixed a crippling bug in the handling of macros with operand counts
1971defined with a `+' modifier.
1972
1973\b Fixed a bug whereby object file formats which stored the input file
1974name in the output file (such as OBJ and COFF) weren't doing so
1975correctly when the output file name was specified on the command
1976line.
1977
1978\b Removed [INC] and [INCLUDE] support for good, since they were
1979obsolete anyway.
1980
1981\b Fixed a bug in OBJ which caused all fixups to be output in 16-bit
1982(old-format) FIXUPP records, rather than putting the 32-bit ones in
1983FIXUPP32 (new-format) records.
1984
1985\b Added, tentatively, OS/2 object file support (as a minor variant on
1986OBJ).
1987
1988\b Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
1989
1990\b Removed a spurious second fclose() on the output file.
1991
1992\b Added the `-s' command line option to redirect all messages which
1993would go to stderr (errors, help text) to stdout instead.
1994
1995\b Added the `-w' command line option to selectively suppress some
1996classes of assembly warning messages.
1997
1998\b Added the `-p' pre-include and `-d' pre-define command-line options.
1999
2000\b Added an include file search path: the `-i' command line option.
2001
2002\b Fixed a silly little preprocessor bug whereby starting a line with a
2003`%!' environment-variable reference caused an `unknown directive'
2004error.
2005
2006\b Added the long-awaited listing file support: the `-l' command line
2007option.
2008
2009\b Fixed a problem with OBJ format whereby, in the absence of any
2010explicit segment definition, non-global symbols declared in the
2011implicit default segment generated spurious EXTDEF records in the
2012output.
2013
2014\b Added the NASM environment variable.
2015
2016\b From this version forward, Win32 console-mode binaries will be
2017included in the DOS distribution in addition to the 16-bit binaries.
2018Added Makefile.vc for this purpose.
2019
2020\b Added `return 0;' to test/objlink.c to prevent compiler warnings.
2021
2022\b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
2023
2024\b Added an alternative memory-reference syntax in which prefixing an
2025operand with `&' is equivalent to enclosing it in square brackets,
2026at the request of Fox Cutter.
2027
2028\b Errors in pass two now cause the program to return a non-zero error
2029code, which they didn't before.
2030
2031\b Fixed the single-line macro cycle detection, which didn't work at
2032all on macros with no parameters (caused an infinite loop). Also
2033changed the behaviour of single-line macro cycle detection to work
2034like cpp, so that macros like `extrn' as given in the documentation
2035can be implemented.
2036
2037\b Fixed the implementation of WRT, which was too restrictive in that
2038you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
2039a relocatable reference.
2040
2041
2042\S{cl-0.94 released April 1997} Version 0.94 released April 1997
2043
2044
2045\b Major item: added the macro processor.
2046
2047\b Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
2048reorganised CMPXCHG instruction into early-486 and Pentium forms.
2049Thanks to Thobias Jones for the information.
2050
2051\b Fixed two more stupid bugs in ELF, which were causing `ld' to
2052continue to seg-fault in a lot of non-trivial cases.
2053
2054\b Fixed a seg-fault in the label manager.
2055
2056\b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
2057the only option for BCD loads/stores in any case.
2058
2059\b Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
2060anyone bothers to provide it. Previously they complained unless no
2061keyword at all was present.
2062
2063\b Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
2064vestige of a bug that I thought had been fixed in 0.92. This was
2065fixed, hopefully for good this time...
2066
2067\b Another minor phase error (insofar as a phase error can _ever_ be
2068minor) fixed, this one occurring in code of the form
2069
2070\c rol ax,forward_reference
2071\c forward_reference equ 1
2072
2073\b The number supplied to TIMES is now sanity-checked for positivity,
2074and also may be greater than 64K (which previously didn't work on
207516-bit systems).
2076
2077\b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
2078
2079\b Added the INCBIN pseudo-opcode.
2080
2081\b Due to the advent of the preprocessor, the [INCLUDE] and [INC]
2082directives have become obsolete. They are still supported in this
2083version, with a warning, but won't be in the next.
2084
2085\b Fixed a bug in OBJ format, which caused incorrect object records to
2086be output when absolute labels were made global.
2087
2088\b Updates to RDOFF subdirectory, and changes to outrdf.c.
2089
2090
2091\S{cl-0.93 released January 1997} Version 0.93 released January 1997
2092
2093This release went out in a great hurry after semi-crippling bugs
2094were found in 0.92.
2095
2096\b Really \e{did} fix the stack overflows this time. *blush*
2097
2098\b Had problems with EA instruction sizes changing between passes, when
2099an offset contained a forward reference and so 4 bytes were
2100allocated for the offset in pass one; by pass two the symbol had
2101been defined and happened to be a small absolute value, so only 1
2102byte got allocated, causing instruction size mismatch between passes
2103and hence incorrect address calculations. Fixed.
2104
2105\b Stupid bug in the revised ELF section generation fixed (associated
2106string-table section for .symtab was hard-coded as 7, even when this
2107didn't fit with the real section table). Was causing `ld' to
2108seg-fault under Linux.
2109
2110\b Included a new Borland C makefile, Makefile.bc2, donated by Fox
2111Cutter <lmb@comtch.iea.com>.
2112
2113
2114\S{cl-0.92 released January 1997} Version 0.92 released January 1997
2115
2116\b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
2117fixed. This also affected the LCC driver.
2118
2119\b Fixed a bug regarding 32-bit effective addresses of the form
2120\c{[other_register+ESP]}.
2121
2122\b Documentary changes, notably documentation of the fact that Borland
2123Win32 compilers use `obj' rather than `win32' object format.
2124
2125\b Fixed the COMENT record in OBJ files, which was formatted
2126incorrectly.
2127
2128\b Fixed a bug causing segfaults in large RDF files.
2129
2130\b OBJ format now strips initial periods from segment and group
2131definitions, in order to avoid complications with the local label
2132syntax.
2133
2134\b Fixed a bug in disassembling far calls and jumps in NDISASM.
2135
2136\b Added support for user-defined sections in COFF and ELF files.
2137
2138\b Compiled the DOS binaries with a sensible amount of stack, to
2139prevent stack overflows on any arithmetic expression containing
2140parentheses.
2141
2142\b Fixed a bug in handling of files that do not terminate in a newline.
2143
2144
2145\S{cl-0.91 released November 1996} Version 0.91 released November 1996
2146
2147\b Loads of bug fixes.
2148
2149\b Support for RDF added.
2150
2151\b Support for DBG debugging format added.
2152
2153\b Support for 32-bit extensions to Microsoft OBJ format added.
2154
2155\b Revised for Borland C: some variable names changed, makefile added.
2156
2157\b LCC support revised to actually work.
2158
2159\b JMP/CALL NEAR/FAR notation added.
2160
2161\b `a16', `o16', `a32' and `o32' prefixes added.
2162
2163\b Range checking on short jumps implemented.
2164
2165\b MMX instruction support added.
2166
2167\b Negative floating point constant support added.
2168
2169\b Memory handling improved to bypass 64K barrier under DOS.
2170
2171\b \c{$} prefix to force treatment of reserved words as identifiers added.
2172
2173\b Default-size mechanism for object formats added.
2174
2175\b Compile-time configurability added.
2176
2177\b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels.
2178
2179\b \c{-e} and \c{-k} options in NDISASM added.
2180
2181
2182\S{cl-0.90 released October 1996} Version 0.90 released October 1996
2183
2184First release version. First support for object file output. Other
2185changes from previous version (0.3x) too numerous to document.