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