blob: 73d84eb140fb5750d8eba277c7e2a589e3a5e0dc [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 Anvin8494cc82016-04-05 13:06:14 -070010\S{cl-2.12.02} Version 2.12.02
11
12\b Fix preprocessor errors, especially \c{%error} and \c{%warning},
13 inside \c{%if} statements.
14
H. Peter Anvinff7ff122016-05-09 11:19:58 -070015\b Fix relative relocations in 32-bit Mach-O.
16
17\b More Codeview debug format fixes.
18
H. Peter Anvin19bc9de2016-05-09 12:09:04 -070019\b If the MASM PTR keyword is encountered, issue a warning. This is
20 much more likely to indicate a MASM-ism encountered in NASM than it
H. Peter Anvin77511e32016-05-09 14:36:59 -070021 is a valid label. This warning can be suppressed with \c{-w-ptr},
22 the \c{[warning]} directive (see \k{opt-w}) or by the macro
23 definition \c{%idefine ptr %??}.
24
25\b When an error or a warning comes from the expansion of a multi-line
26 macro, display the file and line numbers for the expanded macros.
27 Macros defined with \c{.nolist} do not get displayed.
H. Peter Anvin19bc9de2016-05-09 12:09:04 -070028
H. Peter Anvinaa958b12016-05-24 23:03:17 -070029\b Add macros \c{ilog2fw()} and \c{ilog2cw()} to the \c{ifunc} macro
30 package. See \k{ilog2}.
31
H. Peter Anvinff7ff122016-05-09 11:19:58 -070032
H. Peter Anvinc5b95dd2016-03-03 12:43:02 -080033\S{cl-2.12.01} Version 2.12.01
34
35\b Portability fixes for some platforms.
36
H. Peter Anvinc073fc02016-03-04 10:57:01 -080037\b Fix error when not specifying a list file.
38
H. Peter Anvin2a74d842016-03-07 22:17:10 -080039\b Correct the handling of macro-local labels in the Codeview
40 debugging format.
41
Cyrill Gorcunov6832acb2016-03-07 22:36:18 +030042\b Add \c{CLZERO}, \c{MONITORX} and \c{MWAITX} instructions.
Cyrill Gorcunovf34cf392016-03-07 22:32:31 +030043
H. Peter Anvinc5b95dd2016-03-03 12:43:02 -080044
Cyrill Gorcunov23386132016-02-17 17:00:06 +030045\S{cl-2.12} Version 2.12
46
H. Peter Anvin277308f2016-02-18 11:49:33 -080047\b Major fixes to the \c{macho} backend (\k{machofmt}); earlier versions
48 would produce invalid symbols and relocations on a regular basis.
49
50\b Support for thread-local storage in Mach-O.
51
52\b Support for arbitrary sections in Mach-O.
Cyrill Gorcunov23386132016-02-17 17:00:06 +030053
54\b Fix wrong negative size treated as a big positive value passed into
H. Peter Anvin277308f2016-02-18 11:49:33 -080055 backend causing NASM to crash.
Cyrill Gorcunov23386132016-02-17 17:00:06 +030056
57\b Fix handling of zero-extending unsigned relocations, we have been printing
58 wrong message and forgot to assign segment with predefined value before
59 passing it into output format.
60
61\b Fix potential write of oversized (with size greater than allowed in
62 output format) relative relocations.
63
H. Peter Anvin9f7c68a2016-02-17 13:44:51 -080064\b Portability fixes for building NASM with LLVM compiler.
Cyrill Gorcunov23386132016-02-17 17:00:06 +030065
H. Peter Anvin277308f2016-02-18 11:49:33 -080066\b Add support of Codeview version 8 (\c{cv8}) debug format for
67 \c{win32} and \c{win64} formats in the \c{COFF} backend,
68 see \k{codeview}.
H. Peter Anvin9f7c68a2016-02-17 13:44:51 -080069
70\b Allow 64-bit outputs in 16/32-bit only backends. Unsigned 64-bit
71 relocations are zero-extended from 32-bits with a warning
H. Peter Anvin277308f2016-02-18 11:49:33 -080072 (suppressible via \c{-w-zext-reloc}); signed 64-bit relocations are
H. Peter Anvind2238e22016-03-17 17:34:49 -070073 an error.
Cyrill Gorcunov23386132016-02-17 17:00:06 +030074
H. Peter Anvind2ea49b2016-02-17 15:35:06 -080075\b Line numbers in list files now correspond to the lines in the source
76 files, instead of simply being sequential.
77
H. Peter Anvina8506052016-02-26 20:47:45 -080078\b There is now an official 64-bit (x64 a.k.a. x86-64) build for Windows.
79
H. Peter Anvin277308f2016-02-18 11:49:33 -080080
Cyrill Gorcunov8b4ef2d2015-07-26 14:42:30 +030081\S{cl-2.11.09} Version 2.11.09
82
83\b Fix potential stack overwrite in \c{macho32} backend.
84
85\b Fix relocation records in \c{macho64} backend.
86
87\b Fix symbol lookup computation in \c{macho64} backend.
88
89\b Adjust \c{.symtab} and \c{.rela.text} sections alignments to 8 bytes
90 in \c{elf64} backed.
91
92\b Fix section length computation in \c{bin} backend which leaded in incorrect
93 relocation records.
94
Cyrill Gorcunov399d29c2015-02-21 22:12:57 +030095\S{cl-2.11.08} Version 2.11.08
96
97\b Fix section length computation in \c{bin} backend which leaded in incorrect
98 relocation records.
99
100\b Add a warning for numeric preprocessor definitions passed via command
101 line which might have unexpected results otherwise.
102
103\b Add ability to specify a module name record in \c{rdoff} linker with
104 \c{-mn} option.
105
106\b Increase label length capacity up to 256 bytes in \c{rdoff} backend for
107 FreePascal sake, which tends to generate very long labels for procedures.
108
109\b Fix segmentation failure when rip addressing is used in \c{macho64} backend.
110
111\b Fix access on out of memory when handling strings with a single
112 grave. We have sixed similar problem in previous release but not
113 all cases were covered.
114
115\b Fix NULL dereference in disassembled on \c{BND} instruction.
116
Cyrill Gorcunove3131142014-12-09 21:47:23 +0300117\S{cl-2.11.07} Version 2.11.07
118
119\b Fix 256 bit \c{VMOVNTPS} instruction.
120
121\b Fix \c{-MD} option handling, which was rather broken in previous
122release changing command line api.
123
124\b Fix access to unitialized space when handling strings with
125a single grave.
126
127\b Fix nil dereference in handling memory reference parsing.
128
Jim Kukunase3e4f7c2014-10-17 14:51:36 -0700129\S{cl-2.11.06} Version 2.11.06
130
131\b Update AVX512 instructions based on the Extension Reference (319433-021 Sept
1322014).
133
134\b Fix the behavior of \c{-MF} and \c{-MD} options (Bugzilla 3392280)
135
136\b Updated Win32 Makefile to fix issue with build
137
H. Peter Anvin4ac3b022014-05-21 08:28:21 -0700138\S{cl-2.11.05} Version 2.11.05
139
140\b Add \c{--v} as an alias for \c{-v} (see \k{opt-v}), for
141command-line compatibility with Yasm.
142
143\b Fix a bug introduced in 2.11.03 whereby certain instructions would
144contain multiple REX prefixes, and thus be corrupt.
145
Jin Kyu Song3a105c32014-05-07 13:55:58 -0700146\S{cl-2.11.04} Version 2.11.04
147
148\b Removed an invalid error checking code. Sometimes a memref only with
149a displacement can also set an evex flag. For example:
150
151\c vmovdqu32 [0xabcd]{k1}, zmm0
152
153\b Fixed a bug in disassembler that EVEX.L'L vector length was not matched
154when EVEX.b was set because it was simply considered as EVEC.RC.
155Separated EVEX.L'L case from EVEX.RC which is ignored in matching.
156
H. Peter Anvin1a032812014-05-05 11:21:17 -0700157\S{cl-2.11.03} Version 2.11.03
158
159\b Fix a bug there REX prefixes were missing on instructions inside a
160\c{TIMES} statement.
161
H. Peter Anvin0b7db572014-02-19 14:55:54 -0800162\S{cl-2.11.02} Version 2.11.02
163
164\b Add the \c{XSAVEC}, \c{XSAVES} and \c{XRSTORS} family instructions.
165
H. Peter Anvin727eb3f2014-02-19 15:39:57 -0800166\b Add the \c{CLFLUSHOPT} instruction.
167
H. Peter Anvinf2d25692014-02-18 14:05:14 -0800168\S{cl-2.11.01} Version 2.11.01
169
170\b Allow instructions which implicitly uses \c{XMM0} (\c{VBLENDVPD},
171\c{VBLENDVPS}, \c{PBLENDVB} and \c{SHA256RNDS2}) to be specified
172without an explicit \c{xmm0} on the assembly line. In other words,
173the following two lines produce the same output:
174
175\c vblendvpd xmm2,xmm1,xmm0 ; Last operand is fixed xmm0
176\c vblendvpd xmm2,xmm1 ; Implicit xmm0 omitted
177
178\b In the ELF backends, don't crash the assembler if \c{section align}
179is specified without a value.
180
Jin Kyu Song1ab16e42013-11-25 17:59:25 -0800181\S{cl-2.11} Version 2.11
182
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800183\b Add support for the Intel AVX-512 instruction set:
Jin Kyu Song1ab16e42013-11-25 17:59:25 -0800184
185\b 16 new, 512-bit SIMD registers. Total 32 \c{(ZMM0 ~ ZMM31)}
186
187\b 8 new opmask registers \c{(K0 ~ K7)}. One of 7 registers \c{(K1 ~ K7)} can
188be used as an opmask for conditional execution.
189
190\b A new EVEX encoding prefix. EVEX is based on VEX and provides more
191capabilities: opmasks, broadcasting, embedded rounding and compressed
192displacements.
193
194\c - opmask
195\c VDIVPD zmm0{k1}{z}, zmm1, zmm3 ; conditional vector operation
196\c ; using opmask k1.
197\c ; {z} is for zero-masking
198\c - broadcasting
199\c VDIVPS zmm4, zmm5, [rbx]{1to16} ; load single-precision float and
200\c ; replicate it 16 times. 32 * 16 = 512
201\c - embedded rounding
202\c VCVTSI2SD xmm6, xmm7, {rz-sae}, rax ; round toward zero. note that it
203\c ; is used as if a separate operand.
204\c ; it comes after the last SIMD operand
205
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800206\b Add support for \c{ZWORD} (512 bits), \c{DZ} and \c{RESZ}.
207
208\b Add support for the MPX and SHA instruction sets.
209
210\b Better handling of section redefinition.
211
212\b Generate manpages when running \c{'make dist'}.
213
214\b Handle all token chains in mmacro params range.
215
216\b Support split [base,index] effective address:
217
218\c mov eax,[eax+8,ecx*4] ; eax=base, ecx=index, 4=scale, 8=disp
219
220This is expected to be most useful for the MPX instructions.
221
222\b Support \c{BND} prefix for branch instructions (for MPX).
223
H. Peter Anvinb2fcac92013-12-31 10:38:51 -0800224\b The \c{DEFAULT} directive can now take \c{BND} and \c{NOBND}
225options to indicate whether all relevant branches should be getting
226\c{BND} prefixes. This is expected to be the normal for use in MPX
227code.
228
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800229\b Add \c{{evex}}, \c{{vex3}} and \c{{vex2}} instruction prefixes to
230have NASM encode the corresponding instruction, if possible, with an EVEX,
2313-byte VEX, or 2-byte VEX prefix, respectively.
232
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800233\b Support for section names longer than 8 bytes in Win32/Win64 COFF.
Jin Kyu Song1ab16e42013-11-25 17:59:25 -0800234
H. Peter Anvinbe1d0522013-12-31 10:35:12 -0800235\b The \c{NOSPLIT} directive by itself no longer forces a single
236register to become an index register, unless it has an explicit
237multiplier.
238
239\c mov eax,[nosplit eax] ; eax as base register
240\c mov eax,[nosplit eax*1] ; eax as index register
241
Cyrill Gorcunove74e4942013-07-23 09:36:00 +0400242\S{cl-2.10.09} Version 2.10.09
243
244\b Pregenerate man pages.
245
Cyrill Gorcunov82139da2013-07-21 00:42:47 +0400246\S{cl-2.10.08} Version 2.10.08
247
Cyrill Gorcunov85f734b2013-07-21 11:19:27 +0400248\b Fix \c{VMOVNTDQA}, \c{MOVNTDQA} and \c{MOVLPD} instructions.
249
Cyrill Gorcunov82139da2013-07-21 00:42:47 +0400250\b Fix collision for \c{VGATHERQPS}, \c{VPGATHERQD} instructions.
251
252\b Fix \c{VPMOVSXBQ}, \c{VGATHERQPD}, \c{VSPLLW} instructions.
253
254\b Add a bunch of AMD TBM instructions.
255
256\b Fix potential stack overwrite in numbers conversion.
257
258\b Allow byte size in \c{PREFETCHTx} instructions.
259
260\b Make manual pages up to date.
261
262\b Make \c{F3} and \c{F2} SSE prefixes to override \c{66}.
263
264\b Support of AMD SVM instructions in 32 bit mode.
265
266\b Fix near offsets code generation for \c{JMP}, \c{CALL} instrictions
267in long mode.
268
269\b Fix preprocessor parse regression when id is expanding to a whitespace.
270
Cyrill Gorcunov6cdebb42012-12-27 20:28:02 +0400271\S{cl-2.10.07} Version 2.10.07
272
273\b Fix line continuation parsing being broken in previous version.
274
H. Peter Anvin55340992012-09-09 17:09:00 -0700275\S{cl-2.10.06} Version 2.10.06
276
277\b Always quote the dependency source names when using the automatic
278dependency generation options.
279
280\b If no dependency target name is specified via the \c{-MT} or
281\c{-MQ} options, quote the default output name.
282
H. Peter Anvin4dab7a02012-10-08 12:05:59 +0800283\b Fix assembly of shift operations in \c{CPU 8086} mode.
284
285\b Fix incorrect generation of explicit immediate byte for shift by 1
286under certain circumstances.
287
288\b Fix assembly of the \c{VPCMPGTQ} instruction.
289
H. Peter Anvinf2ded502012-12-04 13:36:42 -0800290\b Fix RIP-relative relocations in the \c{macho64} backend.
291
H. Peter Anvin55f3cb82012-09-09 11:05:35 -0700292\S{cl-2.10.05} Version 2.10.05
293
294\b Add the \c{CLAC} and \c{STAC} instructions.
295
H. Peter Anvin480435c2012-08-17 15:42:24 -0700296\S{cl-2.10.04} Version 2.10.04
297
298\b Add back the inadvertently deleted 256-bit version of the \c{VORPD}
299instruction.
300
301\b Correct disassembly of instructions starting with byte \c{82} hex.
302
303\b Fix corner cases in token pasting, for example:
304
305\c %define N 1e%++%+ 5
306\c dd N, 1e+5
307
H. Peter Anvin7f9a43a2012-07-22 21:08:30 -0700308\S{cl-2.10.03} Version 2.10.03
309
310\b Correct the assembly of the instruction:
311
312\c XRELEASE MOV [absolute],AL
313
314Previous versions would incorrectly generate \c{F3 A2} for this
315instruction and issue a warning; correct behavior is to emit \c{F3 88
31605}.
317
H. Peter Anvin5c4c5062012-07-20 17:53:55 -0700318\S{cl-2.10.02} Version 2.10.02
319
320\b Add the \c{ifunc} macro package with integer functions, currently
321only integer logarithms. See \k{pkg_ifunc}.
322
323\b Add the \c{RDSEED}, \c{ADCX} and \c{ADOX} instructions.
324
Cyrill Gorcunov45bf92b2012-05-25 00:58:43 +0400325\S{cl-2.10.01} Version 2.10.01
326
327\b Add missing VPMOVMSKB instruction with reg32, ymmreg operands.
328
H. Peter Anvinaf5cb1b2010-08-24 14:13:32 -0700329\S{cl-2.10} Version 2.10
330
331\b When optimization is enabled, \c{mov r64,imm} now optimizes to the
332 shortest form possible between:
333
H. Peter Anvin96e8d962010-08-24 14:20:40 -0700334\c mov r32,imm32 ; 5 bytes
335\c mov r64,imm32 ; 7 bytes
336\c mov r64,imm64 ; 10 bytes
H. Peter Anvinaf5cb1b2010-08-24 14:13:32 -0700337
H. Peter Anvind68466a2010-08-24 14:14:48 -0700338To force a specific form, use the \c{STRICT} keyword, see \k{strict}.
339
H. Peter Anvin8a44aa42012-02-25 13:30:41 -0800340\b Add support for the Intel AVX2 instruction set.
341
342\b Add support for Bit Manipulation Instructions 1 and 2.
343
344\b Add support for Intel Transactional Synchronization Extensions (TSX).
H. Peter Anvin2d3dce22010-08-24 09:55:27 -0700345
H. Peter Anvinc92aaa12012-02-25 15:05:45 -0800346\b Add support for x32 ELF (32-bit ELF with the CPU in 64-bit mode.)
347 See \k{elffmt}.
348
H. Peter Anvin6b8cc122012-02-25 15:34:14 -0800349\b Add support for bigendian UTF-16 and UTF-32. See \k{unicode}.
350
Cyrill Gorcunoved48ab82011-07-16 01:33:00 +0400351\S{cl-2.09.10} Version 2.09.10
352
353\b Fix up NSIS script to protect uninstaller against registry keys
354 absence or corruption. It brings in a few additional questions
355 to a user during deinstallation procedure but still it is better
356 than unpredictable file removal.
357
Cyrill Gorcunov68868b02011-07-04 00:47:08 +0400358\S{cl-2.09.09} Version 2.09.09
359
360\b Fix initialization of section attributes of \c{bin} output format.
361
362\b Fix \c{mach64} output format bug that crashes NASM due to NULL symbols.
363
364
Cyrill Gorcunov47e7ecd2011-04-06 19:08:34 +0400365\S{cl-2.09.08} Version 2.09.08
366
367\b Fix \c{__OUTPUT_FORMAT__} assignment when output driver alias
368 is used. For example when \c{-f elf} is used \c{__OUTPUT_FORMAT__}
369 must be set to \c{elf}, if \c{-f elf32} is used \c{__OUTPUT_FORMAT__}
370 must be assigned accordingly, i.e. to \c{elf32}. The rule applies to
371 all output driver aliases. See \k{ofmtm}.
372
373
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300374\S{cl-2.09.07} Version 2.09.07
375
376\b Fix attempts to close same file several times
377 when \c{-a} option is used.
378
Cyrill Gorcunoveb9b2942011-03-07 12:44:43 +0300379\b Fixes for VEXTRACTF128, VMASKMOVPS encoding.
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300380
Cyrill Gorcunova09fe1e2011-03-12 22:35:42 +0300381
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300382\S{cl-2.09.06} Version 2.09.06
Cyrill Gorcunov37dacf02011-02-28 09:58:52 +0300383
384\b Fix missed section attribute initialization in \c{bin} output target.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400385
Cyrill Gorcunov1616b9d2011-02-28 10:03:53 +0300386
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300387\S{cl-2.09.05} Version 2.09.05
388
Cyrill Gorcunov8fc44e92011-02-20 22:12:32 +0300389\b Fix arguments encoding for VPEXTRW instruction.
390
391\b Remove invalid form of VPEXTRW instruction.
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300392
Cyrill Gorcunovb6c1dca2011-02-23 00:49:13 +0300393\b Add \c{VLDDQU} as alias for \c{VLDQQU} to
394 match specification.
395
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300396
Cyrill Gorcunov9348b902010-11-21 19:51:49 +0300397\S{cl-2.09.04} Version 2.09.04
398
399\b Fix incorrect labels offset for VEX intructions.
400
401\b Eliminate bogus warning on implicit operand size override.
402
403\b \c{%if} term could not handle 64 bit numbers.
404
405\b The COFF backend was limiting relocations number to 16 bits even if
406 in real there were a way more relocations.
407
408
Cyrill Gorcunovfdbe8ba2010-10-27 21:50:20 +0400409\S{cl-2.09.03} Version 2.09.03
410
411\b Print \c{%macro} name inside \c{%rep} blocks on error.
412
413\b Fix preprocessor expansion behaviour. It happened sometime
414 too early and sometime simply wrong. Move behaviour back to
415 the origins (down to NASM 2.05.01).
416
417\b Fix unitialized data dereference on OMF output format.
418
419\b Issue warning on unterminated \c{%{} construct.
420
421\b Fix for documentation typo.
422
423
H. Peter Anvin2c11f972010-09-15 08:59:12 -0700424\S{cl-2.09.02} Version 2.09.02
425
426\b Fix reversed tokens when \c{%deftok} produces more than one output token.
427
Cyrill Gorcunov831222f2010-09-15 21:13:48 +0400428\b Fix segmentation fault on disassembling some VEX instructions.
429
430\b Missing \c{%endif} did not always cause error.
431
432\b Fix typo in documentation.
433
Cyrill Gorcunova28db5f2010-09-18 02:55:46 +0400434\b Compound context local preprocessor single line macro identifiers
435 were not expanded early enough and as result lead to unresolved
436 symbols.
437
H. Peter Anvin2c11f972010-09-15 08:59:12 -0700438
Cyrill Gorcunov234e4ed2010-09-07 20:57:36 +0400439\S{cl-2.09.01} Version 2.09.01
440
441\b Fix NULL dereference on missed %deftok second parameter.
442
443\b Fix NULL dereference on invalid %substr parameters.
444
445
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400446\S{cl-2.09} Version 2.09
447
Cyrill Gorcunove091d6e2010-08-09 13:58:22 +0400448\b Fixed assignment the magnitude of \c{%rep} counter. It is limited
449 to 62 bits now.
450
Cyrill Gorcunov088d1512010-07-23 18:57:40 +0400451\b Fixed NULL dereference if argument of \c{%strlen} resolves
452 to whitespace. For example if nonexistent macro parameter is used.
453
H. Peter Anvin077fb932010-07-20 14:56:30 -0700454\b \c{%ifenv}, \c{%elifenv}, \c{%ifnenv}, and \c{%elifnenv} directives
455 introduced. See \k{ifenv}.
Bryant Kellera537d492010-07-13 23:49:39 +0400456
Cyrill Gorcunov702df6d2010-07-13 20:59:46 +0400457\b Fixed NULL dereference if environment variable is missed.
458
Cyrill Gorcunovaed4eaa2010-07-17 18:24:13 +0400459\b Updates of new AVX v7 Intel instructions.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400460
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400461\b \c{PUSH imm32} is now officially documented.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400462
463\b Fix for encoding the LFS, LGS and LSS in 64-bit mode.
464
H. Peter Anvin077fb932010-07-20 14:56:30 -0700465\b Fixes for compatibility with OpenWatcom compiler and DOS 8.3 file
466 format limitation.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400467
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400468\b Macros parameters range expansion introduced. See \k{mlmacrange}.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400469
H. Peter Anvinab5bd052010-07-25 12:43:30 -0700470\b Backward compatibility on expanging of local sigle macros restored.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400471
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400472\b 8 bit relocations for \c{elf} and \c{bin} output formats are introduced.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400473
474\b Short intersegment jumps are permitted now.
475
Cyrill Gorcunov327edcf2010-08-16 13:47:24 +0400476\b An alignment more than 64 bytes are allowed for \c{win32},
H. Peter Anvin077fb932010-07-20 14:56:30 -0700477 \c{win64} output formats.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400478
Cyrill Gorcunov407e6c72010-07-28 17:59:49 +0400479\b \c{SECTALIGN} directive introduced. See \k{sectalign}.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400480
H. Peter Anvin077fb932010-07-20 14:56:30 -0700481\b \c{nojmp} option introduced in \c{smartalign} package. See
482 \k{pkg_smartalign}.
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400483
H. Peter Anvin077fb932010-07-20 14:56:30 -0700484\b Short aliases \c{win}, \c{elf} and \c{macho} for output formats are
485 introduced. Each stands for \c{win32}, \c{elf32} and \c{macho32}
486 accordingly.
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400487
488\b Faster handling of missing directives implemented.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400489
490\b Various small improvements in documentation.
491
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400492\b No hang anymore if unable to open malloc.log file.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400493
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400494\b The environments without vsnprintf function are able to build nasm again.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400495
496\b AMD LWP instructions updated.
497
498\b Tighten EA checks. We warn a user if there overflow in EA addressing.
499
H. Peter Anvin31387b22010-07-15 18:28:52 -0700500\b Make \c{-Ox} the default optimization level. For the legacy
H. Peter Anvinab5bd052010-07-25 12:43:30 -0700501 behavior, specify \c{-O0} explicitly. See \k{opt-O}.
H. Peter Anvin31387b22010-07-15 18:28:52 -0700502
H. Peter Anvin077fb932010-07-20 14:56:30 -0700503\b Environment variables read with \c{%!} or tested with \c{%ifenv}
504 can now contain non-identifier characters if surrounded by quotes.
505 See \k{getenv}.
506
H. Peter Anvin2d3dce22010-08-24 09:55:27 -0700507\b Add a new standard macro package \c{%use fp} for floating-point
508 convenience macros. See \k{pkg_fp}.
509
Cyrill Gorcunovb9771902009-11-06 11:24:54 +0300510
H. Peter Anvin5bc03272010-07-15 22:44:03 -0700511\S{cl-2.08.02} Version 2.08.02
512
513\b Fix crash under certain circumstances when using the \c{%+} operator.
514
515
516\S{cl-2.08.01} Version 2.08.01
517
518\b Fix the \c{%use} statement, which was broken in 2.08.
519
520
H. Peter Anvin57924832009-11-09 14:58:45 -0800521\S{cl-2.08} Version 2.08
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400522
523\b A number of enhancements/fixes in macros area.
524
Keith Kanios4ea84662009-10-25 14:06:24 -0500525\b Support for converting strings to tokens. See \k{deftok}.
526
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400527\b Fuzzy operand size logic introduced.
528
Cyrill Gorcunov78debd02009-12-13 14:13:35 +0300529\b Fix COFF stack overrun on too long export identifiers.
530
Keith Kanios4ea84662009-10-25 14:06:24 -0500531\b Fix Macho-O alignment bug.
532
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400533\b Fix crashes with -fwin32 on file with many exports.
534
535\b Fix stack overrun for too long [DEBUG id].
536
Cyrill Gorcunovb9771902009-11-06 11:24:54 +0300537\b Fix incorrect sbyte usage in IMUL (hit only if optimization
538 flag passed).
539
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400540\b Append ending token for \c{.stabs} records in the ELF output format.
541
542\b New NSIS script which uses ModernUI and MultiUser approach.
543
544\b Visual Studio 2008 NASM integration (rules file).
545
Cyrill Gorcunov7a8098c2010-01-03 15:41:22 +0300546\b Warn a user if a constant is too long (and as result will be stripped).
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400547
H. Peter Anvin57924832009-11-09 14:58:45 -0800548\b The obsoleted pre-XOP AMD SSE5 instruction set which was never actualized
549 was removed.
550
Cyrill Gorcunov78debd02009-12-13 14:13:35 +0300551\b Fix stack overrun on too long error file name passed from the command line.
Keith Kanios4ea84662009-10-25 14:06:24 -0500552
Cyrill Gorcunov7a8098c2010-01-03 15:41:22 +0300553\b Bind symbols to the .text section by default (ie in case if SECTION
554 directive was omitted) in the ELF output format.
555
556\b Fix sync points array index wrapping.
557
558\b A few fixes for FMA4 and XOP instruction templates.
559
560\b Add AMD Lightweight Profiling (LWP) instructions.
561
H. Peter Anvin3af37792010-02-15 10:15:53 -0800562\b Fix the offset for \c{%arg} in 64-bit mode.
563
564\b An undefined local macro (\c{%$}) no longer matches a global macro
565 with the same name.
566
Cyrill Gorcunov3dce1e12010-03-03 23:13:48 +0300567\b Fix NULL dereference on too long local labels.
H. Peter Anvin3af37792010-02-15 10:15:53 -0800568
Cyrill Gorcunov90bb2852010-03-03 23:15:25 +0300569
H. Peter Anvinfba06d22009-07-06 11:28:12 -0700570\S{cl-2.07} Version 2.07
571
572\b NASM is now under the 2-clause BSD license. See \k{legal}.
573
574\b Fix the section type for the \c{.strtab} section in the \c{elf64}
575 output format.
576
577\b Fix the handling of \c{COMMON} directives in the \c{obj} output format.
578
579\b New \c{ith} and \c{srec} output formats; these are variants of the
580 \c{bin} output format which output Intel hex and Motorola S-records,
581 respectively. See \k{ithfmt} and \k{srecfmt}.
582
583\b \c{rdf2ihx} replaced with an enhanced \c{rdf2bin}, which can output
584 binary, COM, Intel hex or Motorola S-records.
585
586\b The Windows installer now puts the NASM directory first in the
587 \c{PATH} of the "NASM Shell".
588
H. Peter Anvin83b942d2009-07-06 19:00:08 -0700589\b Revert the early expansion behavior of \c{%+} to pre-2.06 behavior:
590 \c{%+} is only expanded late.
591
H. Peter Anvine227fe62009-07-06 19:27:33 -0700592\b Yet another Mach-O alignment fix.
593
H. Peter Anvina7a14b22009-07-07 16:08:56 -0700594\b Don't delete the list file on errors. Also, include error and
595 warning information in the list file.
596
H. Peter Anvina6e25b52009-07-08 21:32:28 -0700597\b Support for 64-bit Mach-O output, see \k{machofmt}.
598
H. Peter Anvina99c9842009-07-15 17:43:32 -0400599\b Fix assert failure on certain operations that involve strings with
600 high-bit bytes.
H. Peter Anvincc6ee1a2009-07-15 16:31:55 -0400601
H. Peter Anvinfba06d22009-07-06 11:28:12 -0700602
H. Peter Anvinb34fce72008-10-24 16:05:19 -0700603\S{cl-2.06} Version 2.06
604
H. Peter Anvinc940afc2009-06-28 17:12:37 -0700605\b This release is dedicated to the memory of Charles A. Crayne, long
606 time NASM developer as well as moderator of \c{comp.lang.asm.x86} and
607 author of the book \e{Serious Assembler}. We miss you, Chuck.
608
H. Peter Anvinb34fce72008-10-24 16:05:19 -0700609\b Support for indirect macro expansion (\c{%[...]}). See \k{indmacro}.
610
H. Peter Anvin0b7d9032008-10-24 16:27:11 -0700611\b \c{%pop} can now take an argument, see \k{pushpop}.
612
H. Peter Anvin264b7b92008-10-24 16:38:17 -0700613\b The argument to \c{%use} is no longer macro-expanded. Use
614 \c{%[...]} if macro expansion is desired.
615
H. Peter Anvine263d042008-11-02 20:41:29 -0800616\b Support for thread-local storage in ELF32 and ELF64. See \k{elftls}.
617
H. Peter Anvin67a405e2008-11-04 14:26:32 -0800618\b Fix crash on \c{%ifmacro} without an argument.
619
H. Peter Anvin67478812008-11-06 09:42:11 -0800620\b Correct the arguments to the \c{POPCNT} instruction.
621
H. Peter Anvinfd925d92008-12-22 16:37:59 -0800622\b Fix section alignment in the Mach-O format.
623
H. Peter Anvine8a3e622009-02-18 14:13:25 -0800624\b Update AVX support to version 5 of the Intel specification.
625
H. Peter Anvin87513882009-02-21 18:26:20 -0800626\b Fix the handling of accesses to context-local macros from higher
627 levels in the context stack.
628
629\b Treat \c{WAIT} as a prefix rather than as an instruction, thereby
630 allowing constructs like \c{O16 FSAVE} to work correctly.
631
Victor van den Elzenb32536c2009-03-29 03:09:13 +0200632\b Support for structures with a non-zero base offset. See \k{struc}.
633
H. Peter Anvin9c7f3f52009-04-07 22:09:05 -0700634\b Correctly handle preprocessor token concatenation (see \k{concat})
635 involving floating-point numbers.
636
H. Peter Anvin883735f2009-06-25 11:23:37 -0700637\b The \c{PINSR} series of instructions have been corrected and
638 rationalized.
639
640\b Removed AMD SSE5, replaced with the new XOP/FMA4/CVT16 (rev 3.03)
641 spec.
642
H. Peter Anvind219a3e2009-06-25 12:30:50 -0700643\b The ELF backends no longer automatically generate a \c{.comment} section.
644
H. Peter Anvinc4471462009-06-25 14:54:44 -0700645\b Add additional "well-known" ELF sections with default attributes. See
646 \k{elfsect}.
647
H. Peter Anvinb34fce72008-10-24 16:05:19 -0700648
H. Peter Anvin7714ced2008-10-29 10:51:51 -0700649\S{cl-2.05.01} Version 2.05.01
650
651\b Fix the \c{-w}/\c{-W} option parsing, which was broken in NASM 2.05.
652
653
H. Peter Anvindc0bf472008-09-30 16:24:47 -0700654\S{cl-2.05} Version 2.05
655
H. Peter Anvin1abb9e52008-09-30 17:14:54 -0700656\b Fix redundant REX.W prefix on \c{JMP reg64}.
657
H. Peter Anvindc0bf472008-09-30 16:24:47 -0700658\b Make the behaviour of \c{-O0} match NASM 0.98 legacy behavior.
659 See \k{opt-O}.
660
H. Peter Anvin2f160432008-09-30 16:39:17 -0700661\b \c{-w-user} can be used to suppress the output of \c{%warning} directives.
662 See \k{opt-w}.
663
H. Peter Anvina3a60e92008-10-01 10:02:44 -0700664\b Fix bug where \c{ALIGN} would issue a full alignment datum instead of
665 zero bytes.
666
667\b Fix offsets in list files.
668
669\b Fix \c{%include} inside multi-line macros or loops.
670
H. Peter Anvin6c80ab62008-10-04 18:50:47 -0700671\b Fix error where NASM would generate a spurious warning on valid
672 optimizations of immediate values.
673
H. Peter Anvin04c60522008-10-06 18:00:13 -0700674\b Fix arguments to a number of the \c{CVT} SSE instructions.
675
H. Peter Anvin68b41d32008-10-06 19:15:42 -0700676\b Fix RIP-relative offsets when the instruction carries an immediate.
677
H. Peter Anvin3ffd0fc2008-10-17 23:36:45 -0700678\b Massive overhaul of the ELF64 backend for spec compliance.
H. Peter Anvin8cd1df82008-10-12 21:17:04 -0700679
H. Peter Anvin7766ab02008-10-23 19:29:28 -0700680\b Fix the Geode \c{PFRCPV} and \c{PFRSQRTV} instruction.
681
682\b Fix the SSE 4.2 \c{CRC32} instruction.
683
H. Peter Anvindc0bf472008-09-30 16:24:47 -0700684
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400685\S{cl-2.04} Version 2.04
686
H. Peter Anvin6477f3d2008-07-14 02:49:52 -0400687\b Sanitize macro handing in the \c{%error} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400688
H. Peter Anvin6477f3d2008-07-14 02:49:52 -0400689\b New \c{%warning} directive to issue user-controlled warnings.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400690
H. Peter Anvin8e3f75e2008-09-24 00:21:58 -0700691\b \c{%error} directives are now deferred to the final assembly phase.
692
693\b New \c{%fatal} directive to immediately terminate assembly.
694
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700695\b New \c{%strcat} directive to join quoted strings together.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400696
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700697\b New \c{%use} macro directive to support standard macro directives. See
698 \k{use}.
699
700\b Excess default parameters to \c{%macro} now issues a warning by default.
701 See \k{mlmacro}.
702
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -0700703\b Fix \c{%ifn} and \c{%elifn}.
704
705\b Fix nested \c{%else} clauses.
706
707\b Correct the handling of nested \c{%rep}s.
708
709\b New \c{%unmacro} directive to undeclare a multi-line macro.
710 See \k{unmacro}.
711
H. Peter Anvin010aee22008-09-24 17:34:37 -0700712\b Builtin macro \c{__PASS__} which expands to the current assembly pass.
713 See \k{pass_macro}.
714
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -0700715\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
716 strings. See \k{unicode}.
717
718\b Fix bug in case-insensitive matching when compiled on platforms that
719 don't use the \c{configure} script. Of the official release binaries,
720 that only affected the OS/2 binary.
721
722\b Support for x87 packed BCD constants. See \k{bcdconst}.
723
724\b Correct the \c{LTR} and \c{SLDT} instructions in 64-bit mode.
725
726\b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
727
728\b Add AVX versions of the AES instructions (\c{VAES}...).
729
730\b Fix the 256-bit FMA instructions.
731
732\b Add 256-bit AVX stores per the latest AVX spec.
733
734\b VIA XCRYPT instructions can now be written either with or without
735 \c{REP}, apparently different versions of the VIA spec wrote them
736 differently.
737
738\b Add missing 64-bit \c{MOVNTI} instruction.
739
740\b Fix the operand size of \c{VMREAD} and \c{VMWRITE}.
741
H. Peter Anvindf73e0b2008-09-03 15:16:44 -0700742\b Numerous bug fixes, especially to the AES, AVX and VTX instructions.
743
H. Peter Anvina2d542c2008-09-10 23:04:56 -0700744\b The optimizer now always runs until it converges. It also runs even
745 when disabled, but doesn't optimize. This allows most forward references
746 to be resolved properly.
747
H. Peter Anvinc83f9de2008-10-24 16:53:53 -0700748\b \c{%push} no longer needs a context identifier; omitting the context
749 identifier results in an anonymous context.
750
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400751
752\S{cl-2.03.01} Version 2.03.01
753
754\b Fix buffer overflow in the listing module.
755
756\b Fix the handling of hexadecimal escape codes in `...` strings.
757
758\b The Postscript/PDF documentation has been reformatted.
759
760\b The \c{-F} option now implies \c{-g}.
761
762
763\S{cl-2.03} Version 2.03
764
765\b Add support for Intel AVX, CLMUL and FMA instructions,
766including YMM registers.
767
768\b \c{dy}, \c{resy} and \c{yword} for 32-byte operands.
769
770\b Fix some SSE5 instructions.
771
772\b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions.
773
774\b Fix checking for critical expressions when the optimizer is enabled.
775
776\b Support the DWARF debugging format for ELF targets.
777
778\b Fix optimizations of signed bytes.
779
780\b Fix operation on bigendian machines.
781
782\b Fix buffer overflow in the preprocessor.
783
784\b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH).
785
786\b \c{%?} and \c{%??} to refer to the name of a macro itself. In particular,
787\c{%idefine keyword $%?} can be used to make a keyword "disappear".
788
789\b New options for dependency generation: \c{-MD}, \c{-MF},
790\c{-MP}, \c{-MT}, \c{-MQ}.
791
792\b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN
793reimplemented as a macro.
794
795\b \c{%include} now resolves macros in a sane manner.
796
797\b \c{%substr} can now be used to get other than one-character substrings.
798
799\b New type of character/string constants, using backquotes (\c{`...`}),
800which support C-style escape sequences.
801
802\b \c{%defstr} and \c{%idefstr} to stringize macro definitions before
803creation.
804
805\b Fix forward references used in \c{EQU} statements.
806
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400807
H. Peter Anvina5e02792009-06-24 16:50:54 -0700808\S{cl-2.02} Version 2.02
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400809
810\b Additional fixes for MMX operands with explicit \c{qword}, as well as
811 (hopefully) SSE operands with \c{oword}.
812
813\b Fix handling of truncated strings with \c{DO}.
814
815\b Fix segfaults due to memory overwrites when floating-point constants
816 were used.
817
818\b Fix segfaults due to missing include files.
819
820\b Fix OpenWatcom Makefiles for DOS and OS/2.
821
822\b Add autogenerated instruction list back into the documentation.
823
824\b ELF: Fix segfault when generating stabs, and no symbols have been
825 defined.
826
827\b ELF: Experimental support for DWARF debugging information.
828
829\b New compile date and time standard macros.
830
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400831\b \c{%ifnum} now returns true for negative numbers.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400832
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400833\b New \c{%iftoken} test for a single token.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400834
H. Peter Anvin5506e1f2008-07-14 02:54:00 -0400835\b New \c{%ifempty} test for empty expansion.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400836
837\b Add support for the \c{XSAVE} instruction group.
838
839\b Makefile for Netware/gcc.
840
841\b Fix issue with some warnings getting emitted way too many times.
842
843\b Autogenerated instruction list added to the documentation.
844
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400845
H. Peter Anvina5e02792009-06-24 16:50:54 -0700846\S{cl-2.01} Version 2.01
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400847
848\b Fix the handling of MMX registers with explicit \c{qword} tags on
849 memory (broken in 2.00 due to 64-bit changes.)
850
851\b Fix the PREFETCH instructions.
852
853\b Fix the documentation.
854
855\b Fix debugging info when using \c{-f elf}
856(backwards compatibility alias for \c{-f elf32}).
857
858\b Man pages for rdoff tools (from the Debian project.)
859
860\b ELF: handle large numbers of sections.
861
862\b Fix corrupt output when the optimizer runs out of passes.
863
864
865\S{cl-2.00} Version 2.00
866
867\b Added c99 data-type compliance.
868
869\b Added general x86-64 support.
870
871\b Added win64 (x86-64 COFF) output format.
872
873\b Added \c{__BITS__} standard macro.
874
875\b Renamed the \c{elf} output format to \c{elf32} for clarity.
876
877\b Added \c{elf64} and \c{macho} (MacOS X) output formats.
878
879\b Added Numeric constants in \c{dq} directive.
880
881\b Added \c{oword}, \c{do} and \c{reso} pseudo operands.
882
883\b Allow underscores in numbers.
884
885\b Added 8-, 16- and 128-bit floating-point formats.
886
887\b Added binary, octal and hexadecimal floating-point.
888
889\b Correct the generation of floating-point constants.
890
891\b Added floating-point option control.
892
893\b Added Infinity and NaN floating point support.
894
895\b Added ELF Symbol Visibility support.
896
897\b Added setting OSABI value in ELF header directive.
898
899\b Added Generate Makefile Dependencies option.
900
901\b Added Unlimited Optimization Passes option.
902
903\b Added \c{%IFN} and \c{%ELIFN} support.
904
905\b Added Logical Negation Operator.
906
907\b Enhanced Stack Relative Preprocessor Directives.
908
909\b Enhanced ELF Debug Formats.
910
911\b Enhanced Send Errors to a File option.
912
913\b Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
914
915\b Added a large number of additional instructions.
916
917\b Significant performance improvements.
918
H. Peter Anvin8a2f1452008-10-29 18:14:03 -0700919\b \c{-w+warning} and \c{-w-warning} can now be written as -Wwarning and
920 -Wno-warning, respectively. See \k{opt-w}.
921
922\b Add \c{-w+error} to treat warnings as errors. See \k{opt-w}.
923
924\b Add \c{-w+all} and \c{-w-all} to enable or disable all suppressible
925 warnings. See \k{opt-w}.
926
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400927
928\H{cl-0.98.xx} NASM 0.98 Series
929
930The 0.98 series was the production versions of NASM from 1999 to 2007.
931
932
933\S{cl-0.98.39} Version 0.98.39
934
935\b fix buffer overflow
936
937\b fix outas86's \c{.bss} handling
938
939\b "make spotless" no longer deletes config.h.in.
940
941\b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300).
942
943\b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol.
944
945\S{cl-0.98.38} Version 0.98.38
946
947
948\b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
949 \c{mkdep.pl} to be able to generate completely pathless dependencies, as
950 required by OpenWatcom wmake (it supports path searches, but not
951 explicit paths.)
952
953\b Fix the \c{STR} instruction.
954
955\b Fix the ELF output format, which was broken under certain
956 circumstances due to the addition of stabs support.
957
958\b Quick-fix Borland format debug-info for \c{-f obj}
959
960\b Fix for \c{%rep} with no arguments (#560568)
961
962\b Fix concatenation of preprocessor function call (#794686)
963
964\b Fix long label causes coredump (#677841)
965
966\b Use autoheader as well as autoconf to keep configure from generating
967 ridiculously long command lines.
968
969\b Make sure that all of the formats which support debugging output
970 actually will suppress debugging output when \c{-g} not specified.
971
972\S{cl-0.98.37} Version 0.98.37
973
974
975\b Paths given in \c{-I} switch searched for \c{incbin}-ed as
976 well as \c{%include}-ed files.
977
978\b Added stabs debugging for the ELF output format, patch from
979 Martin Wawro.
980
981\b Fix \c{output/outbin.c} to allow origin > 80000000h.
982
983\b Make \c{-U} switch work.
984
985\b Fix the use of relative offsets with explicit prefixes, e.g.
986\c{a32 loop foo}.
987
988\b Remove \c{backslash()}.
989
990\b Fix the \c{SMSW} and \c{SLDT} instructions.
991
992\b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}.
993If you mean the latter, please say so! :)
994
995\S{cl-0.98.36} Version 0.98.36
996
997
998\b Update rdoff - librarian/archiver - common rec - docs!
999
1000\b Fix signed/unsigned problems.
1001
1002\b Fix \c{JMP FAR label} and \c{CALL FAR label}.
1003
1004\b Add new multisection support - map files - fix align bug
1005
1006\b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
1007
1008\b \c{Q} or \c{O} suffixes indicate octal
1009
1010\b Support Prescott new instructions (PNI).
1011
1012\b Cyrix \c{XSTORE} instruction.
1013
1014
1015\S{cl-0.98.35} Version 0.98.35
1016
1017\b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
1018
1019\b Fix dependencies and compiler warnings.
1020
1021\b Add "const" in a number of places.
1022
1023\b Add -X option to specify error reporting format (use -Xvc to
1024 integrate with Microsoft Visual Studio.)
1025
1026\b Minor changes for code legibility.
1027
1028\b Drop use of tmpnam() in rdoff (security fix.)
1029
1030
1031\S{cl-0.98.34} Version 0.98.34
1032
1033\b Correct additional address-size vs. operand-size confusions.
1034
1035\b Generate dependencies for all Makefiles automatically.
1036
1037\b Add support for unimplemented (but theoretically available)
1038 registers such as tr0 and cr5. Segment registers 6 and 7 are called
1039 segr6 and segr7 for the operations which they can be represented.
1040
1041\b Correct some disassembler bugs related to redundant address-size prefixes.
1042 Some work still remains in this area.
1043
1044\b Correctly generate an error for things like "SEG eax".
1045
1046\b Add the JMPE instruction, enabled by "CPU IA64".
1047
1048\b Correct compilation on newer gcc/glibc platforms.
1049
1050\b Issue an error on things like "jmp far eax".
1051
1052
1053\S{cl-0.98.33} Version 0.98.33
1054
1055\b New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
1056 round out the version-query macros. version.pl now understands
1057 X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
1058 X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
1059
1060\b New keyword "strict" to disable the optimization of specific
1061 operands.
1062
1063\b Fix the handing of size overrides with JMP instructions
1064 (instructions such as "jmp dword foo".)
1065
1066\b Fix the handling of "ABSOLUTE label", where "label" points into a
1067 relocatable segment.
1068
1069\b Fix OBJ output format with lots of externs.
1070
1071\b More documentation updates.
1072
1073\b Add -Ov option to get verbose information about optimizations.
1074
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001075\b Undo a braindead change which broke \c{%elif} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001076
1077\b Makefile updates.
1078
1079
1080\S{cl-0.98.32} Version 0.98.32
1081
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001082\b Fix NASM crashing when \c{%macro} directives were left unterminated.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001083
1084\b Lots of documentation updates.
1085
1086\b Complete rewrite of the PostScript/PDF documentation generator.
1087
1088\b The MS Visual C++ Makefile was updated and corrected.
1089
1090\b Recognize .rodata as a standard section name in ELF.
1091
1092\b Fix some obsolete Perl4-isms in Perl scripts.
1093
1094\b Fix configure.in to work with autoconf 2.5x.
1095
1096\b Fix a couple of "make cleaner" misses.
1097
1098\b Make the normal "./configure && make" work with Cygwin.
1099
1100
1101\S{cl-0.98.31} Version 0.98.31
1102
1103\b Correctly build in a separate object directory again.
1104
1105\b Derive all references to the version number from the version file.
1106
1107\b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
1108
1109\b Lots of Makefile updates and bug fixes.
1110
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001111\b New \c{%ifmacro} directive to test for multiline macros.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001112
1113\b Documentation updates.
1114
1115\b Fixes for 16-bit OBJ format output.
1116
1117\b Changed the NASM environment variable to NASMENV.
1118
1119
1120\S{cl-0.98.30} Version 0.98.30
1121
1122\b Changed doc files a lot: completely removed old READMExx and
1123 Wishlist files, incorporating all information in CHANGES and TODO.
1124
1125\b I waited a long time to rename zoutieee.c to (original) outieee.c
1126
1127\b moved all output modules to output/ subdirectory.
1128
1129\b Added 'make strip' target to strip debug info from nasm & ndisasm.
1130
1131\b Added INSTALL file with installation instructions.
1132
1133\b Added -v option description to nasm man.
1134
1135\b Added dist makefile target to produce source distributions.
1136
1137\b 16-bit support for ELF output format (GNU extension, but useful.)
1138
1139
1140\S{cl-0.98.28} Version 0.98.28
1141
1142\b Fastcooked this for Debian's Woody release:
1143Frank applied the INCBIN bug patch to 0.98.25alt and called
1144it 0.98.28 to not confuse poor little apt-get.
1145
1146
1147\S{cl-0.98.26} Version 0.98.26
1148
1149\b Reorganised files even better from 0.98.25alt
1150
1151
1152\S{cl-0.98.25alt} Version 0.98.25alt
1153
1154\b Prettified the source tree. Moved files to more reasonable places.
1155
1156\b Added findleak.pl script to misc/ directory.
1157
1158\b Attempted to fix doc.
1159
1160
1161\S{cl-0.98.25} Version 0.98.25
1162
1163\b Line continuation character \c{\\}.
1164
1165\b Docs inadvertantly reverted - "dos packaging".
1166
1167
1168\S{cl-0.98.24p1} Version 0.98.24p1
1169
1170\b FIXME: Someone, document this please.
1171
1172
1173\S{cl-0.98.24} Version 0.98.24
1174
1175\b Documentation - Ndisasm doc added to Nasm.doc.
1176
1177
1178\S{cl-0.98.23} Version 0.98.23
1179
1180\b Attempted to remove rdoff version1
1181
1182\b Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
1183
1184
1185\S{cl-0.98.22} Version 0.98.22
1186
1187\b Update rdoff2 - attempt to remove v1.
1188
1189
1190\S{cl-0.98.21} Version 0.98.21
1191
1192\b Optimization fixes.
1193
1194
1195\S{cl-0.98.20} Version 0.98.20
1196
1197\b Optimization fixes.
1198
1199
1200\S{cl-0.98.19} Version 0.98.19
1201
1202\b H. J. Lu's patch back out.
1203
1204
1205\S{cl-0.98.18} Version 0.98.18
1206
1207\b Added ".rdata" to "-f win32".
1208
1209
1210\S{cl-0.98.17} Version 0.98.17
1211
1212\b H. J. Lu's "bogus elf" patch. (Red Hat problem?)
1213
1214
1215\S{cl-0.98.16} Version 0.98.16
1216
1217\b Fix whitespace before "[section ..." bug.
1218
1219
1220\S{cl-0.98.15} Version 0.98.15
1221
1222\b Rdoff changes (?).
1223
1224\b Fix fixes to memory leaks.
1225
1226
1227\S{cl-0.98.14} Version 0.98.14
1228
1229\b Fix memory leaks.
1230
1231
1232\S{cl-0.98.13} Version 0.98.13
1233
1234\b There was no 0.98.13
1235
1236
1237\S{cl-0.98.12} Version 0.98.12
1238
1239\b Update optimization (new function of "-O1")
1240
1241\b Changes to test/bintest.asm (?).
1242
1243
1244\S{cl-0.98.11} Version 0.98.11
1245
1246\b Optimization changes.
1247
1248\b Ndisasm fixed.
1249
1250
1251\S{cl-0.98.10} Version 0.98.10
1252
1253\b There was no 0.98.10
1254
1255
1256\S{cl-0.98.09} Version 0.98.09
1257
1258\b Add multiple sections support to "-f bin".
1259
1260\b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
1261
1262\b Add "-v" as an alias to the "-r" switch.
1263
1264\b Remove "#ifdef" from Tasm compatibility options.
1265
1266\b Remove redundant size-overrides on "mov ds, ex", etc.
1267
1268\b Fixes to SSE2, other insns.dat (?).
1269
1270\b Enable uppercase "I" and "P" switches.
1271
1272\b Case insinsitive "seg" and "wrt".
1273
1274\b Update install.sh (?).
1275
1276\b Allocate tokens in blocks.
1277
1278\b Improve "invalid effective address" messages.
1279
1280
1281\S{cl-0.98.08} Version 0.98.08
1282
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001283\b Add "\c{%strlen}" and "\c{%substr}" macro operators
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001284
1285\b Fixed broken c16.mac.
1286
1287\b Unterminated string error reported.
1288
1289\b Fixed bugs as per 0.98bf
1290
1291
1292\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
1293
1294Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
1295
1296\b More closely compatible with 0.98 when -O0 is implied
H. Peter Anvinab5bd052010-07-25 12:43:30 -07001297or specified. Not strictly identical, since backward
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001298branches in range of short offsets are recognized, and signed
1299byte values with no explicit size specification will be
1300assembled as a single byte.
1301
1302\b More forgiving with the PUSH instruction. 0.98 requires
1303a size to be specified always. 0.98.09b will imply the size
1304from the current BITS setting (16 or 32).
1305
1306\b Changed definition of the optimization flag:
1307
1308 -O0 strict two-pass assembly, JMP and Jcc are
1309 handled more like 0.98, except that back-
1310 ward JMPs are short, if possible.
1311
1312 -O1 strict two-pass assembly, but forward
1313 branches are assembled with code guaranteed
1314 to reach; may produce larger code than
1315 -O0, but will produce successful assembly
1316 more often if branch offset sizes are not
1317 specified.
1318
1319 -O2 multi-pass optimization, minimize branch
1320 offsets; also will minimize signed immed-
1321 iate bytes, overriding size specification.
1322
1323 -O3 like -O2, but more passes taken, if needed
1324
1325
1326\S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01
1327
1328\b Added Stepane Denis' SSE2 instructions to a *working*
1329 version of the code - some earlier versions were based on
1330 broken code - sorry 'bout that. version "0.98.07"
1331
1332
133301/28/01
1334
1335
1336\b Cosmetic modifications to nasm.c, nasm.h,
1337 AUTHORS, MODIFIED
1338
1339
1340\S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01
1341
1342
1343\b - Add "metalbrain"s jecxz bug fix in insns.dat
1344 - alter nasmdoc.src to match - version "0.98.06f"
1345
1346
1347\S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01
1348
1349
1350\b Removed the "outforms.h" file - it appears to be
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001351 someone's old backup of "outform.h". version "0.98.06e"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001352
135301/09/01
1354
1355\b fbk - finally added the fix for the "multiple %includes bug",
1356 known since 7/27/99 - reported originally (?) and sent to
1357 us by Austin Lunnen - he reports that John Fine had a fix
1358 within the day. Here it is...
1359
1360\b Nelson Rush resigns from the group. Big thanks to Nelson for
1361 his leadership and enthusiasm in getting these changes
1362 incorporated into Nasm!
1363
1364\b fbk - [list +], [list -] directives - ineptly implemented, should
1365 be re-written or removed, perhaps.
1366
1367\b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
1368 as well - testing might be desirable...
1369
137008/07/00
1371
1372\b James Seter - -postfix, -prefix command line switches.
1373
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001374\b Yuri Zaporozhets - rdoff utility changes.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001375
1376
1377\S{cl-0.98p1} Version 0.98p1
1378
1379\b GAS-like palign (Panos Minos)
1380
1381\b FIXME: Someone, fill this in with details
1382
1383
1384\S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed)
1385
1386\b Fixed - elf and aoutb bug - shared libraries
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001387 - multiple "%include" bug in "-f obj"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001388 - jcxz, jecxz bug
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001389 - unrecognized option bug in ndisasm
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001390
1391\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
1392
1393\b Added signed byte optimizations for the 0x81/0x83 class
1394of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
1395when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also
1396optimization of signed byte form of 'PUSH imm' and 'IMUL
1397reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.
1398
1399\b Added multi-pass JMP and Jcc offset optimization. Offsets
1400on forward references will preferentially use the short form,
1401without the need to code a specific size (short or near) for
1402the branch. Added instructions for 'Jcc label' to use the
1403form 'Jnotcc $+3/JMP label', in cases where a short offset
1404is out of bounds. If compiling for a 386 or higher CPU, then
1405the 386 form of Jcc will be used instead.
1406
1407This feature is controlled by a new command-line switch: "O",
1408(upper case letter O). "-O0" reverts the assembler to no
1409extra optimization passes, "-O1" allows up to 5 extra passes,
1410and "-O2"(default), allows up to 10 extra optimization passes.
1411
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001412\b Added a new directive: 'cpu XXX', where XXX is any of:
H. Peter Anvin04156cd2008-07-14 02:45:57 -040014138086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
1414Katmai. All are case insensitive. All instructions will
1415be selected only if they apply to the selected cpu or lower.
1416Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
1417
1418\b Added to 'standard.mac', the "use16" and "use32" forms of
1419the "bits 16/32" directive. This is nothing new, just conforms
1420to a lot of other assemblers. (minor)
1421
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001422\b Changed label allocation from 320/32 (10000 labels @ 200K+)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001423to 32/37 (1000 labels); makes running under DOS much easier.
1424Since additional label space is allocated dynamically, this
1425should have no effect on large programs with lots of labels.
1426The 37 is a prime, believed to be better for hashing. (minor)
1427
1428
1429\S{cl-0.98.03} Version 0.98.03
1430
1431"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for
1432historical reasons: 0.98.02 was trashed." --John Coffman
1433<johninsd@san.rr.com>, 27-Jul-2000
1434
1435\b Kendall Bennett's SciTech MGL changes
1436
1437\b Note that you must define "TASM_COMPAT" at compile-time
1438to get the Tasm Ideal Mode compatibility.
1439
1440\b All changes can be compiled in and out using the TASM_COMPAT macros,
1441and when compiled without TASM_COMPAT defined we get the exact same
1442binary as the unmodified 0.98 sources.
1443
1444\b standard.mac, macros.c: Added macros to ignore TASM directives before
1445first include
1446
1447\b nasm.h: Added extern declaration for tasm_compatible_mode
1448
1449\b nasm.c: Added global variable tasm_compatible_mode
1450
1451\b Added command line switch for TASM compatible mode (-t)
1452
1453\b Changed version command line to reflect when compiled with TASM additions
1454
1455\b Added response file processing to allow all arguments on a single
1456line (response file is @resp rather than -@resp for NASM format).
1457
1458\b labels.c: Changes islocal() macro to support TASM style @@local labels.
1459
1460\b Added islocalchar() macro to support TASM style @@local labels.
1461
1462\b parser.c: Added support for TASM style memory references (ie: mov
1463[DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
1464
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001465\b preproc.c: Added new directives, \c{%arg}, \c{%local}, \c{%stacksize} to directives
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001466table
1467
1468\b Added support for TASM style directives without a leading % symbol.
1469
1470\b Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
1471
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001472\b A new keyword \c{%xdefine} and its case-insensitive counterpart \c{%ixdefine}.
1473They work almost the same way as \c{%define} and \c{%idefine} but expand
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001474the definition immediately, not on the invocation. Something like a cross
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001475between \c{%define} and \c{%assign}. The "x" suffix stands for "eXpand", so
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001476"xdefine" can be deciphered as "expand-and-define". Thus you can do
1477things like this:
1478
1479\c %assign ofs 0
1480\c
1481\c %macro arg 1
1482\c %xdefine %1 dword [esp+ofs]
1483\c %assign ofs ofs+4
1484\c %endmacro
1485
1486\b Changed the place where the expansion of %$name macros are expanded.
1487Now they are converted into ..@ctxnum.name form when detokenizing, so
1488there are no quirks as before when using %$name arguments to macros,
1489in macros etc. For example:
1490
1491\c %macro abc 1
1492\c %define %1 hello
1493\c %endm
1494\c
1495\c abc %$here
1496\c %$here
1497
1498 Now last line will be expanded into "hello" as expected. This also allows
1499 for lots of goodies, a good example are extended "proc" macros included
1500 in this archive.
1501
1502\b Added a check for "cstk" in smacro_defined() before calling get_ctx() -
1503 this allows for things like:
1504
1505\c %ifdef %$abc
1506\c %endif
1507
1508 to work without warnings even in no context.
1509
1510\b Added a check for "cstk" in %if*ctx and %elif*ctx directives -
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001511 this allows to use \c{%ifctx} without excessive warnings. If there is
1512 no active context, \c{%ifctx} goes through "false" branch.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001513
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001514\b Removed "user error: " prefix with \c{%error} directive: it just clobbers the
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001515 output and has absolutely no functionality. Besides, this allows to write
1516 macros that does not differ from built-in functions in any way.
1517
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001518\b Added expansion of string that is output by \c{%error} directive. Now you
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001519 can do things like:
1520
1521\c %define hello(x) Hello, x!
1522\c
1523\c %define %$name andy
1524\c %error "hello(%$name)"
1525
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001526 Same happened with \c{%include} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001527
1528\b Now all directives that expect an identifier will try to expand and
1529 concatenate everything without whitespaces in between before usage.
1530 For example, with "unfixed" nasm the commands
1531
1532\c %define %$abc hello
1533\c %define __%$abc goodbye
1534\c __%$abc
1535
1536 would produce "incorrect" output: last line will expand to
1537
1538\c hello goodbyehello
1539
1540 Not quite what you expected, eh? :-) The answer is that preprocessor
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001541 treats the \c{%define} construct as if it would be
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001542
1543\c %define __ %$abc goodbye
1544
1545 (note the white space between __ and %$abc). After my "fix" it
1546 will "correctly" expand into
1547
1548\c goodbye
1549
1550 as expected. Note that I use quotes around words "correct", "incorrect"
1551 etc because this is rather a feature not a bug; however current behaviour
1552 is more logical (and allows more advanced macro usage :-).
1553
1554 Same change was applied to:
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001555 \c{%push},\c{%macro},\c{%imacro},\c{%define},\c{%idefine},\c{%xdefine},\c{%ixdefine},
1556 \c{%assign},\c{%iassign},\c{%undef}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001557
1558\b A new directive [WARNING {+|-}warning-id] have been added. It works only
1559 if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
1560
1561\b A new warning type: macro-selfref. By default this warning is disabled;
1562 when enabled NASM warns when a macro self-references itself; for example
1563 the following source:
1564
1565\c [WARNING macro-selfref]
1566\c
1567\c %macro push 1-*
1568\c %rep %0
1569\c push %1
1570\c %rotate 1
1571\c %endrep
1572\c %endmacro
1573\c
1574\c push eax,ebx,ecx
1575
1576 will produce a warning, but if we remove the first line we won't see it
1577 anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
1578 eats such constructs without warnings at all).
1579
1580\b Added a "error" routine to preprocessor which always will set ERR_PASS1
1581 bit in severity_code. This removes annoying repeated errors on first
1582 and second passes from preprocessor.
1583
1584\b Added the %+ operator in single-line macros for concatenating two
1585 identifiers. Usage example:
1586
1587\c %define _myfunc _otherfunc
1588\c %define cextern(x) _ %+ x
1589\c cextern (myfunc)
1590
1591 After first expansion, third line will become "_myfunc". After this
1592 expansion is performed again so it becomes "_otherunc".
1593
1594\b Now if preprocessor is in a non-emitting state, no warning or error
1595 will be emitted. Example:
1596
1597\c %if 1
1598\c mov eax,ebx
1599\c %else
1600\c put anything you want between these two brackets,
1601\c even macro-parameter references %1 or local
1602\c labels %$zz or macro-local labels %%zz - no
1603\c warning will be emitted.
1604\c %endif
1605
1606\b Context-local variables on expansion as a last resort are looked up
1607 in outer contexts. For example, the following piece:
1608
1609\c %push outer
1610\c %define %$a [esp]
1611\c
1612\c %push inner
1613\c %$a
1614\c %pop
1615\c %pop
1616
1617 will expand correctly the fourth line to [esp]; if we'll define another
1618 %$a inside the "inner" context, it will take precedence over outer
1619 definition. However, this modification has been applied only to
1620 expand_smacro and not to smacro_define: as a consequence expansion
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001621 looks in outer contexts, but \c{%ifdef} won't look in outer contexts.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001622
1623 This behaviour is needed because we don't want nested contexts to
1624 act on already defined local macros. Example:
1625
1626\c %define %$arg1 [esp+4]
1627\c test eax,eax
1628\c if nz
1629\c mov eax,%$arg1
1630\c endif
1631
1632 In this example the "if" mmacro enters into the "if" context, so %$arg1
1633 is not valid anymore inside "if". Of course it could be worked around
1634 by using explicitely %$$arg1 but this is ugly IMHO.
1635
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001636\b Fixed memory leak in \c{%undef}. The origline wasn't freed before
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001637 exiting on success.
1638
1639\b Fixed trap in preprocessor when line expanded to empty set of tokens.
1640 This happens, for example, in the following case:
1641
1642\c #define SOMETHING
1643\c SOMETHING
1644
1645
1646\S{cl-0.98} Version 0.98
1647
1648All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
1649
1650\b The documentation comment delimiter is \# not #.
1651
1652\b Allow EQU definitions to refer to external labels; reported by
1653 Pedro Gimeno.
1654
1655\b Re-enable support for RDOFF v1; reported by Pedro Gimeno.
1656
1657\b Updated License file per OK from Simon and Julian.
1658
1659
1660\S{cl-0.98p9} Version 0.98p9
1661
1662\b Update documentation (although the instruction set reference will
1663 have to wait; I don't want to hold up the 0.98 release for it.)
1664
1665\b Verified that the NASM implementation of the PEXTRW and PMOVMSKB
1666 instructions is correct. The encoding differs from what the Intel
1667 manuals document, but the Pentium III behaviour matches NASM, not
1668 the Intel manuals.
1669
1670\b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
1671 Stefan Hoffmeister.
1672
1673\b Resurrect the -s option, which was removed when changing the
1674 diagnostic output to stdout.
1675
1676
1677\S{cl-0.98p8} Version 0.98p8
1678
1679\b Fix for "DB" when NASM is running on a bigendian machine.
1680
1681\b Invoke insns.pl once for each output script, making Makefile.in
1682 legal for "make -j".
1683
1684\b Improve the Unix configure-based makefiles to make package
1685 creation easier.
1686
1687\b Included an RPM .spec file for building RPM (RedHat Package Manager)
1688 packages on Linux or Unix systems.
1689
1690\b Fix Makefile dependency problems.
1691
1692\b Change src/rdsrc.pl to include sectioning information in info
1693 output; required for install-info to work.
1694
1695\b Updated the RDOFF distribution to version 2 from Jules; minor
1696 massaging to make it compile in my environment.
1697
1698\b Split doc files that can be built by anyone with a Perl interpreter off
1699 into a separate archive.
1700
1701\b "Dress rehearsal" release!
1702
1703
1704\S{cl-0.98p7} Version 0.98p7
1705
1706\b Fixed opcodes with a third byte-sized immediate argument to not
1707 complain if given "byte" on the immediate.
1708
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001709\b Allow \c{%undef} to remove single-line macros with arguments. This
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001710 matches the behaviour of #undef in the C preprocessor.
1711
1712\b Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
1713 compatibility with most C compilers and preprocessors. This allows
1714 Makefile options to be shared between cc and nasm, for example.
1715
1716\b Minor cleanups.
1717
1718\b Went through the list of Katmai instructions and hopefully fixed the
1719 (rather few) mistakes in it.
1720
1721\b (Hopefully) fixed a number of disassembler bugs related to ambiguous
1722 instructions (disambiguated by -p) and SSE instructions with REP.
1723
1724\b Fix for bug reported by Mark Junger: "call dword 0x12345678" should
1725 work and may add an OSP (affected CALL, JMP, Jcc).
1726
1727\b Fix for environments when "stderr" isn't a compile-time constant.
1728
1729
1730\S{cl-0.98p6} Version 0.98p6
1731
1732
1733\b Took officially over coordination of the 0.98 release; so drop
1734 the p3.x notation. Skipped p4 and p5 to avoid confusion with John
1735 Fine's J4 and J5 releases.
1736
1737\b Update the documentation; however, it still doesn't include
1738 documentation for the various new instructions. I somehow wonder if
1739 it makes sense to have an instruction set reference in the assembler
1740 manual when Intel et al have PDF versions of their manuals online.
1741
1742\b Recognize "idt" or "centaur" for the -p option to ndisasm.
1743
1744\b Changed error messages back to stderr where they belong, but add an
1745 -E option to redirect them elsewhere (the DOS shell cannot redirect
1746 stderr.)
1747
1748\b -M option to generate Makefile dependencies (based on code from Alex
1749 Verstak.)
1750
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001751\b \c{%undef} preprocessor directive, and -u option, that undefines a
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001752 single-line macro.
1753
1754\b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
1755 Chuck Crayne.
1756
1757\b Various minor bugfixes (reported by):
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001758 - Dangling \c{%s} in preproc.c (Martin Junker)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001759
1760\b THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am
1761 on a trip and didn't bring the Katmai instruction reference, so I
1762 can't work on them right now.
1763
1764\b Updated the License file per agreement with Simon and Jules to
1765 include a GPL distribution clause.
1766
1767
1768\S{cl-0.98p3.7} Version 0.98p3.7
1769
1770\b (Hopefully) fixed the canned Makefiles to include the outrdf2 and
1771 zoutieee modules.
1772
1773\b Renamed changes.asm to changed.asm.
1774
1775
1776\S{cl-0.98p3.6} Version 0.98p3.6
1777
1778\b Fixed a bunch of instructions that were added in 0.98p3.5 which had
1779 memory operands, and the address-size prefix was missing from the
1780 instruction pattern.
1781
1782
1783\S{cl-0.98p3.5} Version 0.98p3.5
1784
1785\b Merged in changes from John S. Fine's 0.98-J5 release. John's based
1786 0.98-J5 on my 0.98p3.3 release; this merges the changes.
1787
1788\b Expanded the instructions flag field to a long so we can fit more
1789 flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
1790 such.
1791
1792\b Fix the "PRIV" flag on a bunch of instructions, and create new
1793 "PROT" flag for protected-mode-only instructions (orthogonal to if
1794 the instruction is privileged!) and new "SMM" flag for SMM-only
1795 instructions.
1796
1797\b Added AMD-only SYSCALL and SYSRET instructions.
1798
1799\b Make SSE actually work, and add new Katmai MMX instructions.
1800
1801\b Added a -p (preferred vendor) option to ndisasm so that it can
1802 distinguish e.g. Cyrix opcodes also used in SSE. For example:
1803
1804\c ndisasm -p cyrix aliased.bin
1805\c 00000000 670F514310 paddsiw mm0,[ebx+0x10]
1806\c 00000005 670F514320 paddsiw mm0,[ebx+0x20]
1807\c ndisasm -p intel aliased.bin
1808\c 00000000 670F514310 sqrtps xmm0,[ebx+0x10]
1809\c 00000005 670F514320 sqrtps xmm0,[ebx+0x20]
1810
1811\b Added a bunch of Cyrix-specific instructions.
1812
1813
1814\S{cl-0.98p3.4} Version 0.98p3.4
1815
1816\b Made at least an attempt to modify all the additional Makefiles (in
1817 the Mkfiles directory). I can't test it, but this was the best I
1818 could do.
1819
1820\b DOS DJGPP+"Opus Make" Makefile from John S. Fine.
1821
1822\b changes.asm changes from John S. Fine.
1823
1824
1825\S{cl-0.98p3.3} Version 0.98p3.3
1826
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001827\b Patch from Conan Brink to allow nesting of \c{%rep} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001828
1829\b If we're going to allow INT01 as an alias for INT1/ICEBP (one of
1830 Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
1831 as well.
1832
1833\b Updated changes.asm to include the latest changes.
1834
1835\b Tried to clean up the <CR>s that had snuck in from a DOS/Windows
1836 environment into my Unix environment, and try to make sure than
1837 DOS/Windows users get them back.
1838
1839\b We would silently generate broken tools if insns.dat wasn't sorted
1840 properly. Change insns.pl so that the order doesn't matter.
1841
1842\b Fix bug in insns.pl (introduced by me) which would cause conditional
1843 instructions to have an extra "cc" in disassembly, e.g. "jnz"
1844 disassembled as "jccnz".
1845
1846
1847\S{cl-0.98p3.2} Version 0.98p3.2
1848
1849\b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
1850 http://www.csoft.net/cz/johnfine/
1851
1852\b Changed previous "spotless" Makefile target (appropriate for distribution)
1853 to "distclean", and added "cleaner" target which is same as "clean"
1854 except deletes files generated by Perl scripts; "spotless" is union.
1855
1856\b Removed BASIC programs from distribution. Get a Perl interpreter
1857 instead (see below.)
1858
1859\b Calling this "pre-release 3.2" rather than "p3-hpa2" because of
1860 John's contributions.
1861
1862\b Actually link in the IEEE output format (zoutieee.c); fix a bunch of
1863 compiler warnings in that file. Note I don't know what IEEE output
1864 is supposed to look like, so these changes were made "blind".
1865
1866
1867\S{cl-0.98p3-hpa} Version 0.98p3-hpa
1868
1869\b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
1870 buildable version for Unix systems (Makefile.in updates, etc.)
1871
1872\b Changed insns.pl to create the instruction tables in nasm.h and
1873 names.c, so that a new instruction can be added by adding it *only*
1874 to insns.dat.
1875
1876\b Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
1877 FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
1878 guarantee will never be used; one of them is documented as UD2 in
1879 Intel documentation, the other one just as "Undefined Opcode" --
1880 calling it UD1 seemed to make sense.)
1881
1882\b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
1883 characters long. Now MAX_SYMBOL is derived from insns.dat.
1884
1885\b A note on the BASIC programs included: forget them. insns.bas is
1886 already out of date. Get yourself a Perl interpreter for your
1887 platform of choice at
1888 \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}.
1889
1890
1891\S{cl-0.98p3} Version 0.98 pre-release 3
1892
1893\b added response file support, improved command line handling, new layout
1894help screen
1895
1896\b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
1897related bugs, updated Wishlist; 0.98 Prerelease 3.
1898
1899
1900\S{cl-0.98p2} Version 0.98 pre-release 2
1901
1902\b fixed bug in outcoff.c to do with truncating section names longer
1903than 8 characters, referencing beyond end of string; 0.98 pre-release 2
1904
1905
1906\S{cl-0.98p1} Version 0.98 pre-release 1
1907
1908\b Fixed a bug whereby STRUC didn't work at all in RDF.
1909
1910\b Fixed a problem with group specification in PUBDEFs in OBJ.
1911
1912\b Improved ease of adding new output formats. Contribution due to
1913Fox Cutter.
1914
1915\b Fixed a bug in relocations in the `bin' format: was showing up when
1916a relocatable reference crossed an 8192-byte boundary in any output
1917section.
1918
1919\b Fixed a bug in local labels: local-label lookups were inconsistent
1920between passes one and two if an EQU occurred between the definition
1921of a global label and the subsequent use of a local label local to
1922that global.
1923
1924\b Fixed a seg-fault in the preprocessor (again) which happened when
1925you use a blank line as the first line of a multi-line macro
1926definition and then defined a label on the same line as a call to
1927that macro.
1928
1929\b Fixed a stale-pointer bug in the handling of the NASM environment
1930variable. Thanks to Thomas McWilliams.
1931
1932\b ELF had a hard limit on the number of sections which caused
1933segfaults when transgressed. Fixed.
1934
1935\b Added ability for ndisasm to read from stdin by using `-' as the
1936filename.
1937
1938\b ndisasm wasn't outputting the TO keyword. Fixed.
1939
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001940\b Fixed error cascade on bogus expression in \c{%if} - an error in
1941evaluation was causing the entire \c{%if} to be discarded, thus creating
1942trouble later when the \c{%else} or \c{%endif} was encountered.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001943
1944\b Forward reference tracking was instruction-granular not operand-
1945granular, which was causing 286-specific code to be generated
1946needlessly on code of the form `shr word [forwardref],1'. Thanks to
1947Jim Hague for sending a patch.
1948
1949\b All messages now appear on stdout, as sending them to stderr serves
1950no useful purpose other than to make redirection difficult.
1951
1952\b Fixed the problem with EQUs pointing to an external symbol - this
1953now generates an error message.
1954
1955\b Allowed multiple size prefixes to an operand, of which only the first
1956is taken into account.
1957
1958\b Incorporated John Fine's changes, including fixes of a large number
1959of preprocessor bugs, some small problems in OBJ, and a reworking of
1960label handling to define labels before their line is assembled, rather
1961than after.
1962
1963\b Reformatted a lot of the source code to be more readable. Included
1964'coding.txt' as a guideline for how to format code for contributors.
1965
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001966\b Stopped nested \c{%reps} causing a panic - they now cause a slightly more
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001967friendly error message instead.
1968
1969\b Fixed floating point constant problems (patch by Pedro Gimeno)
1970
1971\b Fixed the return value of insn_size() not being checked for -1, indicating
1972an error.
1973
1974\b Incorporated 3Dnow! instructions.
1975
1976\b Fixed the 'mov eax, eax + ebx' bug.
1977
1978\b Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
1979
1980\b Incorporated John Fine's command line parsing changes
1981
1982\b Incorporated David Lindauer's OMF debug support
1983
1984\b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size
1985specification warning when sizes agree).
1986
1987
1988\H{cl-0.9x} NASM 0.9 Series
1989
1990Revisions before 0.98.
1991
1992
1993\S{cl-0.97} Version 0.97 released December 1997
1994
1995\b This was entirely a bug-fix release to 0.96, which seems to have got
1996cursed. Silly me.
1997
1998\b Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
1999fail. Caused by an error in the `MOV EAX,<segment>' support.
2000
2001\b ndisasm hung at EOF when compiled with lcc on Linux because lcc on
2002Linux somehow breaks feof(). ndisasm now does not rely on feof().
2003
2004\b A heading in the documentation was missing due to a markup error in
2005the indexing. Fixed.
2006
2007\b Fixed failure to update all pointers on realloc() within extended-
2008operand code in parser.c. Was causing wrong behaviour and seg faults
2009on lines such as `dd 0.0,0.0,0.0,0.0,...'
2010
2011\b Fixed a subtle preprocessor bug whereby invoking one multi-line
2012macro on the first line of the expansion of another, when the second
2013had been invoked with a label defined before it, didn't expand the
H. Peter Anvinab5bd052010-07-25 12:43:30 -07002014inner macro.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002015
2016\b Added internal.doc back in to the distribution archives - it was
2017missing in 0.96 *blush*
2018
2019\b Fixed bug causing 0.96 to be unable to assemble its own test files,
2020specifically objtest.asm. *blush again*
2021
2022\b Fixed seg-faults and bogus error messages caused by mismatching
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002023\c{%rep} and \c{%endrep} within multi-line macro definitions.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002024
2025\b Fixed a problem with buffer overrun in OBJ, which was causing
2026corruption at ends of long PUBDEF records.
2027
2028\b Separated DOS archives into main-program and documentation to reduce
2029download size.
2030
2031
2032\S{cl-0.96} Version 0.96 released November 1997
2033
2034\b Fixed a bug whereby, if `nasm sourcefile' would cause a filename
2035collision warning and put output into `nasm.out', then `nasm
2036sourcefile -o outputfile' still gave the warning even though the
2037`-o' was honoured.
2038Fixed name pollution under Digital UNIX: one of its header files
2039defined R_SP, which broke the enum in nasm.h.
2040
2041\b Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
2042two-operand forms; NDISASM didn't recognise the longer register
2043forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
2044flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
2045size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
2046undocumented because the Intel Architecture reference documents
2047them.
2048
2049\b Fixed a problem with the local-label mechanism, whereby strange
2050types of symbol (EQUs, auto-defined OBJ segment base symbols)
2051interfered with the `previous global label' value and screwed up
2052local labels.
2053
2054\b Fixed a bug whereby the stub preprocessor didn't communicate with
2055the listing file generator, so that the -a and -l options in
2056conjunction would produce a useless listing file.
2057
2058\b Merged `os2' object file format back into `obj', after discovering
2059that `obj' _also_ shouldn't have a link pass separator in a module
2060containing a non-trivial MODEND. Flat segments are now declared
2061using the FLAT attribute. `os2' is no longer a valid object format
2062name: use `obj'.
2063
2064\b Removed the fixed-size temporary storage in the evaluator. Very very
2065long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
2066so) should now no longer crash NASM.
2067
2068\b Fixed a bug involving segfaults on disassembly of MMX instructions,
2069by changing the meaning of one of the operand-type flags in nasm.h.
2070This may cause other apparently unrelated MMX problems; it needs to
2071be tested thoroughly.
2072
2073\b Fixed some buffer overrun problems with large OBJ output files.
2074Thanks to DJ Delorie for the bug report and fix.
2075
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002076\b Made preprocess-only mode actually listen to the \c{%line} markers as it
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002077prints them, so that it can report errors more sanely.
2078
2079\b Re-designed the evaluator to keep more sensible track of expressions
2080involving forward references: can now cope with previously-nightmare
2081situations such as:
2082
2083\c mov ax,foo | bar
2084\c foo equ 1
2085\c bar equ 2
2086
2087\b Added the ALIGN and ALIGNB standard macros.
2088
2089\b Added PIC support in ELF: use of WRT to obtain the four extra
2090relocation types needed.
2091
2092\b Added the ability for output file formats to define their own
2093extensions to the GLOBAL, COMMON and EXTERN directives.
2094
2095\b Implemented common-variable alignment, and global-symbol type and
2096size declarations, in ELF.
2097
2098\b Implemented NEAR and FAR keywords for common variables, plus
2099far-common element size specification, in OBJ.
2100
2101\b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
2102default WRT specification (either a segment or a group).
2103
2104\b Transformed the Unix NASM archive into an auto-configuring package.
2105
2106\b Added a sanity-check for people applying SEG to things which are
2107already segment bases: this previously went unnoticed by the SEG
2108processing and caused OBJ-driver panics later.
2109
2110\b Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
2111type references: OBJ doesn't directly support dword-size segment
2112base fixups, but as long as the low two bytes of the constant term
2113are zero, a word-size fixup can be generated instead and it will
2114work.
2115
2116\b Added the ability to specify sections' alignment requirements in
2117Win32 object files and pure binary files.
2118
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002119\b Added preprocess-time expression evaluation: the \c{%assign} (and
2120\c{%iassign}) directive and the bare \c{%if} (and \c{%elif}) conditional. Added
2121relational operators to the evaluator, for use only in \c{%if}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002122constructs: the standard relationals = < > <= >= <> (and C-like
2123synonyms == and !=) plus low-precedence logical operators &&, ^^ and
2124||.
2125
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002126\b Added a preprocessor repeat construct: \c{%rep} / \c{%exitrep} / \c{%endrep}.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002127
2128\b Added the __FILE__ and __LINE__ standard macros.
2129
2130\b Added a sanity check for number constants being greater than
21310xFFFFFFFF. The warning can be disabled.
2132
2133\b Added the %0 token whereby a variadic multi-line macro can tell how
2134many parameters it's been given in a specific invocation.
2135
2136\b Added \c{%rotate}, allowing multi-line macro parameters to be cycled.
2137
2138\b Added the `*' option for the maximum parameter count on multi-line
2139macros, allowing them to take arbitrarily many parameters.
2140
2141\b Added the ability for the user-level forms of EXTERN, GLOBAL and
2142COMMON to take more than one argument.
2143
2144\b Added the IMPORT and EXPORT directives in OBJ format, to deal with
2145Windows DLLs.
2146
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002147\b Added some more preprocessor \c{%if} constructs: \c{%ifidn} / \c{%ifidni} (exact
2148textual identity), and \c{%ifid} / \c{%ifnum} / \c{%ifstr} (token type testing).
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002149
2150\b Added the ability to distinguish SHL AX,1 (the 8086 version) from
2151SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
2152be 1).
2153
2154\b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
2155with PIC shared library features.
2156
2157\b Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
2158FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
2159otherwise accepted standard. The previous behaviour, though it was a
2160deliberate feature, was a deliberate feature based on a
2161misunderstanding. Apologies for the inconvenience.
2162
2163\b Improved the flexibility of ABSOLUTE: you can now give it an
2164expression rather than being restricted to a constant, and it can
2165take relocatable arguments as well.
2166
2167\b Added the ability for a variable to be declared as EXTERN multiple
2168times, and the subsequent definitions are just ignored.
2169
2170\b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
2171alone on a line (without a following instruction).
2172
2173\b Improved sanity checks on whether the arguments to EXTERN, GLOBAL
2174and COMMON are valid identifiers.
2175
2176\b Added misc/exebin.mac to allow direct generation of .EXE files by
2177hacking up an EXE header using DB and DW; also added test/binexe.asm
2178to demonstrate the use of this. Thanks to Yann Guidon for
2179contributing the EXE header code.
2180
2181\b ndisasm forgot to check whether the input file had been successfully
2182opened. Now it does. Doh!
2183
2184\b Added the Cyrix extensions to the MMX instruction set.
2185
2186\b Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
2187assembled differently. This is important since [ESI+EBP] and
2188[EBP+ESI] have different default base segment registers.
2189
2190\b Added support for the PharLap OMF extension for 4096-byte segment
2191alignment.
2192
2193
2194\S{cl-0.95 released July 1997} Version 0.95 released July 1997
2195
2196\b Fixed yet another ELF bug. This one manifested if the user relied on
2197the default segment, and attempted to define global symbols without
2198first explicitly declaring the target segment.
2199
2200\b Added makefiles (for NASM and the RDF tools) to build Win32 console
2201apps under Symantec C++. Donated by Mark Junker.
2202
2203\b Added `macros.bas' and `insns.bas', QBasic versions of the Perl
2204scripts that convert `standard.mac' to `macros.c' and convert
2205`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
2206Junker.
2207
2208\b Changed the diassembled forms of the conditional instructions so
2209that JB is now emitted as JC, and other similar changes. Suggested
2210list by Ulrich Doewich.
2211
2212\b Added `@' to the list of valid characters to begin an identifier
2213with.
2214
2215\b Documentary changes, notably the addition of the `Common Problems'
2216section in nasm.doc.
2217
2218\b Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
2219
2220\b Fixed a bug in perm_copy() in labels.c which was causing exceptions
2221in cleanup_labels() on some systems.
2222
2223\b Positivity sanity check in TIMES argument changed from a warning to
2224an error following a further complaint.
2225
2226\b Changed the acceptable limits on byte and word operands to allow
2227things like `~10111001b' to work.
2228
2229\b Fixed a major problem in the preprocessor which caused seg-faults if
2230macro definitions contained blank lines or comment-only lines.
2231
2232\b Fixed inadequate error checking on the commas separating the
2233arguments to `db', `dw' etc.
2234
2235\b Fixed a crippling bug in the handling of macros with operand counts
2236defined with a `+' modifier.
2237
2238\b Fixed a bug whereby object file formats which stored the input file
2239name in the output file (such as OBJ and COFF) weren't doing so
2240correctly when the output file name was specified on the command
2241line.
2242
2243\b Removed [INC] and [INCLUDE] support for good, since they were
2244obsolete anyway.
2245
2246\b Fixed a bug in OBJ which caused all fixups to be output in 16-bit
2247(old-format) FIXUPP records, rather than putting the 32-bit ones in
2248FIXUPP32 (new-format) records.
2249
2250\b Added, tentatively, OS/2 object file support (as a minor variant on
2251OBJ).
2252
2253\b Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
2254
2255\b Removed a spurious second fclose() on the output file.
2256
2257\b Added the `-s' command line option to redirect all messages which
2258would go to stderr (errors, help text) to stdout instead.
2259
2260\b Added the `-w' command line option to selectively suppress some
2261classes of assembly warning messages.
2262
2263\b Added the `-p' pre-include and `-d' pre-define command-line options.
2264
2265\b Added an include file search path: the `-i' command line option.
2266
2267\b Fixed a silly little preprocessor bug whereby starting a line with a
2268`%!' environment-variable reference caused an `unknown directive'
2269error.
2270
2271\b Added the long-awaited listing file support: the `-l' command line
2272option.
2273
2274\b Fixed a problem with OBJ format whereby, in the absence of any
2275explicit segment definition, non-global symbols declared in the
2276implicit default segment generated spurious EXTDEF records in the
2277output.
2278
2279\b Added the NASM environment variable.
2280
2281\b From this version forward, Win32 console-mode binaries will be
2282included in the DOS distribution in addition to the 16-bit binaries.
2283Added Makefile.vc for this purpose.
2284
2285\b Added `return 0;' to test/objlink.c to prevent compiler warnings.
2286
2287\b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
2288
2289\b Added an alternative memory-reference syntax in which prefixing an
2290operand with `&' is equivalent to enclosing it in square brackets,
2291at the request of Fox Cutter.
2292
2293\b Errors in pass two now cause the program to return a non-zero error
2294code, which they didn't before.
2295
2296\b Fixed the single-line macro cycle detection, which didn't work at
2297all on macros with no parameters (caused an infinite loop). Also
2298changed the behaviour of single-line macro cycle detection to work
2299like cpp, so that macros like `extrn' as given in the documentation
2300can be implemented.
2301
2302\b Fixed the implementation of WRT, which was too restrictive in that
2303you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
2304a relocatable reference.
2305
2306
2307\S{cl-0.94 released April 1997} Version 0.94 released April 1997
2308
2309
2310\b Major item: added the macro processor.
2311
2312\b Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
2313reorganised CMPXCHG instruction into early-486 and Pentium forms.
2314Thanks to Thobias Jones for the information.
2315
2316\b Fixed two more stupid bugs in ELF, which were causing `ld' to
2317continue to seg-fault in a lot of non-trivial cases.
2318
2319\b Fixed a seg-fault in the label manager.
2320
2321\b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
2322the only option for BCD loads/stores in any case.
2323
2324\b Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
2325anyone bothers to provide it. Previously they complained unless no
2326keyword at all was present.
2327
2328\b Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
2329vestige of a bug that I thought had been fixed in 0.92. This was
2330fixed, hopefully for good this time...
2331
2332\b Another minor phase error (insofar as a phase error can _ever_ be
2333minor) fixed, this one occurring in code of the form
2334
2335\c rol ax,forward_reference
2336\c forward_reference equ 1
2337
2338\b The number supplied to TIMES is now sanity-checked for positivity,
2339and also may be greater than 64K (which previously didn't work on
234016-bit systems).
2341
2342\b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
2343
2344\b Added the INCBIN pseudo-opcode.
2345
2346\b Due to the advent of the preprocessor, the [INCLUDE] and [INC]
2347directives have become obsolete. They are still supported in this
2348version, with a warning, but won't be in the next.
2349
2350\b Fixed a bug in OBJ format, which caused incorrect object records to
2351be output when absolute labels were made global.
2352
2353\b Updates to RDOFF subdirectory, and changes to outrdf.c.
2354
2355
2356\S{cl-0.93 released January 1997} Version 0.93 released January 1997
2357
2358This release went out in a great hurry after semi-crippling bugs
2359were found in 0.92.
2360
2361\b Really \e{did} fix the stack overflows this time. *blush*
2362
2363\b Had problems with EA instruction sizes changing between passes, when
2364an offset contained a forward reference and so 4 bytes were
2365allocated for the offset in pass one; by pass two the symbol had
2366been defined and happened to be a small absolute value, so only 1
2367byte got allocated, causing instruction size mismatch between passes
2368and hence incorrect address calculations. Fixed.
2369
2370\b Stupid bug in the revised ELF section generation fixed (associated
2371string-table section for .symtab was hard-coded as 7, even when this
2372didn't fit with the real section table). Was causing `ld' to
2373seg-fault under Linux.
2374
2375\b Included a new Borland C makefile, Makefile.bc2, donated by Fox
2376Cutter <lmb@comtch.iea.com>.
2377
2378
2379\S{cl-0.92 released January 1997} Version 0.92 released January 1997
2380
2381\b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
2382fixed. This also affected the LCC driver.
2383
2384\b Fixed a bug regarding 32-bit effective addresses of the form
2385\c{[other_register+ESP]}.
2386
2387\b Documentary changes, notably documentation of the fact that Borland
2388Win32 compilers use `obj' rather than `win32' object format.
2389
2390\b Fixed the COMENT record in OBJ files, which was formatted
2391incorrectly.
2392
2393\b Fixed a bug causing segfaults in large RDF files.
2394
2395\b OBJ format now strips initial periods from segment and group
2396definitions, in order to avoid complications with the local label
2397syntax.
2398
2399\b Fixed a bug in disassembling far calls and jumps in NDISASM.
2400
2401\b Added support for user-defined sections in COFF and ELF files.
2402
2403\b Compiled the DOS binaries with a sensible amount of stack, to
2404prevent stack overflows on any arithmetic expression containing
2405parentheses.
2406
2407\b Fixed a bug in handling of files that do not terminate in a newline.
2408
2409
2410\S{cl-0.91 released November 1996} Version 0.91 released November 1996
2411
2412\b Loads of bug fixes.
2413
2414\b Support for RDF added.
2415
2416\b Support for DBG debugging format added.
2417
2418\b Support for 32-bit extensions to Microsoft OBJ format added.
2419
2420\b Revised for Borland C: some variable names changed, makefile added.
2421
2422\b LCC support revised to actually work.
2423
2424\b JMP/CALL NEAR/FAR notation added.
2425
2426\b `a16', `o16', `a32' and `o32' prefixes added.
2427
2428\b Range checking on short jumps implemented.
2429
2430\b MMX instruction support added.
2431
2432\b Negative floating point constant support added.
2433
2434\b Memory handling improved to bypass 64K barrier under DOS.
2435
2436\b \c{$} prefix to force treatment of reserved words as identifiers added.
2437
2438\b Default-size mechanism for object formats added.
2439
2440\b Compile-time configurability added.
2441
2442\b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels.
2443
2444\b \c{-e} and \c{-k} options in NDISASM added.
2445
2446
2447\S{cl-0.90 released October 1996} Version 0.90 released October 1996
2448
2449First release version. First support for object file output. Other
2450changes from previous version (0.3x) too numerous to document.