1 | 0.98.39
|
---|
2 | -------
|
---|
3 | * fix buffer overflow
|
---|
4 | * fix outas86's .bss handling
|
---|
5 | * "make spotless" no longer deletes config.h.in.
|
---|
6 | * %(el)if(n)idn insensitivity to string quotes difference (#809300).
|
---|
7 | * (nasm.c) __OUTPUT_FORMAT__ changed to string value instead of symbol.
|
---|
8 |
|
---|
9 | 0.98.38
|
---|
10 | -------
|
---|
11 | * Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
|
---|
12 | mkdep.pl to be able to generate completely pathless dependencies, as
|
---|
13 | required by OpenWatcom wmake (it supports path searches, but not
|
---|
14 | explicit paths.)
|
---|
15 | * Fix the STR instruction.
|
---|
16 | * Fix the ELF output format, which was broken under certain
|
---|
17 | circumstances due to the addition of stabs support.
|
---|
18 | * Quick-fix Borland format debug-info for -f obj
|
---|
19 | * Fix for %rep with no arguments (#560568)
|
---|
20 | * Fix concatenation of preprocessor function call (#794686)
|
---|
21 | * Fix long label causes coredump (#677841)
|
---|
22 | * Use autoheader as well as autoconf to keep configure from generating
|
---|
23 | ridiculously long command lines.
|
---|
24 | * Make sure that all of the formats which support debugging output
|
---|
25 | actually will suppress debugging output when -g not specified.
|
---|
26 |
|
---|
27 | 0.98.37
|
---|
28 | -------
|
---|
29 | * Paths given in "-I" switch searched for "incbin"ed as
|
---|
30 | well as "%include"ed files.
|
---|
31 | * Added stabs debugging for the ELF output format, patch from
|
---|
32 | Martin Wawro.
|
---|
33 | * Fix output/outbin.c to allow origin > 80000000h.
|
---|
34 | * Make -U switch work.
|
---|
35 | * Fix the use of relative offsets with explicit prefixes, e.g. "a32 loop foo".
|
---|
36 | * Remove "backslash()".
|
---|
37 | * Fix the SMSW and SLDT instructions.
|
---|
38 | * -O2 and -O3 are no longer aliases for -O10 and -O15. If you mean the
|
---|
39 | latter, please say so! :)
|
---|
40 |
|
---|
41 | 0.98.36
|
---|
42 | -------
|
---|
43 | * Update rdoff - librarian/archiver - common rec - docs!
|
---|
44 | * Fix signed/unsigned problems.
|
---|
45 | * Fix JMP FAR label and CALL FAR label.
|
---|
46 | * Add new multisection support - map files - fix align bug
|
---|
47 | * Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
|
---|
48 | * "Q" or "O" suffixes indicate octal
|
---|
49 | * Support Prescott new instructions (PNI).
|
---|
50 | * Cyrix XSTORE instruction.
|
---|
51 |
|
---|
52 | 0.98.35
|
---|
53 | -------
|
---|
54 | * Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
|
---|
55 | * Fix dependencies and compiler warnings.
|
---|
56 | * Add "const" in a number of places.
|
---|
57 | * Add -X option to specify error reporting format (use -Xvc to
|
---|
58 | integrate with Microsoft Visual Studio.)
|
---|
59 | * Minor changes for code legibility.
|
---|
60 | * Drop use of tmpnam() in rdoff (security fix.)
|
---|
61 |
|
---|
62 | 0.98.34
|
---|
63 | -------
|
---|
64 | * Correct additional address-size vs. operand-size confusions.
|
---|
65 | * Generate dependencies for all Makefiles automatically.
|
---|
66 | * Add support for unimplemented (but theoretically available)
|
---|
67 | registers such as tr0 and cr5. Segment registers 6 and 7 are called
|
---|
68 | segr6 and segr7 for the operations which they can be represented.
|
---|
69 | * Correct some disassembler bugs related to redundant address-size prefixes.
|
---|
70 | Some work still remains in this area.
|
---|
71 | * Correctly generate an error for things like "SEG eax".
|
---|
72 | * Add the JMPE instruction, enabled by "CPU IA64".
|
---|
73 | * Correct compilation on newer gcc/glibc platforms.
|
---|
74 | * Issue an error on things like "jmp far eax".
|
---|
75 |
|
---|
76 |
|
---|
77 | 0.98.33
|
---|
78 | -------
|
---|
79 |
|
---|
80 | * New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
|
---|
81 | round out the version-query macros. version.pl now understands
|
---|
82 | X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
|
---|
83 | X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
|
---|
84 | * New keyword "strict" to disable the optimization of specific
|
---|
85 | operands.
|
---|
86 | * Fix the handing of size overrides with JMP instructions
|
---|
87 | (instructions such as "jmp dword foo".)
|
---|
88 | * Fix the handling of "ABSOLUTE label", where "label" points into a
|
---|
89 | relocatable segment.
|
---|
90 | * Fix OBJ output format with lots of externs.
|
---|
91 | * More documentation updates.
|
---|
92 | * Add -Ov option to get verbose information about optimizations.
|
---|
93 | * Undo a braindead change which broke %elif directives.
|
---|
94 | * Makefile updates.
|
---|
95 |
|
---|
96 |
|
---|
97 | 0.98.32
|
---|
98 | -------
|
---|
99 |
|
---|
100 | * Fix NASM crashing when %macro directives were left unterminated.
|
---|
101 | * Lots of documentation updates.
|
---|
102 | * Complete rewrite of the PostScript/PDF documentation generator.
|
---|
103 | * The MS Visual C++ Makefile was updated and corrected.
|
---|
104 | * Recognize .rodata as a standard section name in ELF.
|
---|
105 | * Fix some obsolete Perl4-isms in Perl scripts.
|
---|
106 | * Fix configure.in to work with autoconf 2.5x.
|
---|
107 | * Fix a couple of "make cleaner" misses.
|
---|
108 | * Make the normal "./configure && make" work with Cygwin.
|
---|
109 |
|
---|
110 |
|
---|
111 | 0.98.31
|
---|
112 | -------
|
---|
113 |
|
---|
114 | * Correctly build in a separate object directory again.
|
---|
115 | * Derive all references to the version number from the version file.
|
---|
116 | * New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
|
---|
117 | * Lots of Makefile updates and bug fixes.
|
---|
118 | * New %ifmacro directive to test for multiline macros.
|
---|
119 | * Documentation updates.
|
---|
120 | * Fixes for 16-bit OBJ format output.
|
---|
121 | * Changed the NASM environment variable to NASMENV.
|
---|
122 |
|
---|
123 |
|
---|
124 | 0.98.30
|
---|
125 | -------
|
---|
126 |
|
---|
127 | * Changed doc files a lot: completely removed old READMExx and
|
---|
128 | Wishlist files, incorporating all information in CHANGES and TODO.
|
---|
129 | * I waited a long time to rename zoutieee.c to (original) outieee.c
|
---|
130 | * moved all output modules to output/ subdirectory.
|
---|
131 | * Added 'make strip' target to strip debug info from nasm & ndisasm.
|
---|
132 | * Added INSTALL file with installation instructions.
|
---|
133 | * Added -v option description to nasm man.
|
---|
134 | * Added dist makefile target to produce source distributions.
|
---|
135 | * 16-bit support for ELF output format (GNU extension, but useful.)
|
---|
136 |
|
---|
137 |
|
---|
138 | 0.98.28
|
---|
139 | -------
|
---|
140 |
|
---|
141 | * Fastcooked this for Debian's Woody release:
|
---|
142 | Frank applied the INCBIN bug patch to 0.98.25alt and called
|
---|
143 | it 0.98.28 to not confuse poor little apt-get.
|
---|
144 |
|
---|
145 |
|
---|
146 | 0.98.26
|
---|
147 | -------
|
---|
148 |
|
---|
149 | * Reorganised files even better from 0.98.25alt
|
---|
150 |
|
---|
151 |
|
---|
152 | 0.98.25alt
|
---|
153 | ----------
|
---|
154 |
|
---|
155 | * Prettified the source tree. Moved files to more reasonable places.
|
---|
156 | * Added findleak.pl script to misc/ directory.
|
---|
157 | * Attempted to fix doc.
|
---|
158 |
|
---|
159 | 0.98.25
|
---|
160 | -------
|
---|
161 |
|
---|
162 | * Line continuation character '\'
|
---|
163 | * Docs inadvertantly reverted - "dos packaging".
|
---|
164 |
|
---|
165 |
|
---|
166 | 0.98.24p1
|
---|
167 | ---------
|
---|
168 |
|
---|
169 | * FIXME: Someone, document this please.
|
---|
170 |
|
---|
171 |
|
---|
172 | 0.98.24
|
---|
173 | -------
|
---|
174 |
|
---|
175 | * Documentation - Ndisasm doc added to Nasm.doc.
|
---|
176 |
|
---|
177 |
|
---|
178 | 0.98.23
|
---|
179 | -------
|
---|
180 |
|
---|
181 | * Attempted to remove rdoff version1
|
---|
182 | * Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
|
---|
183 |
|
---|
184 |
|
---|
185 | 0.98.22
|
---|
186 | -------
|
---|
187 |
|
---|
188 | * Update rdoff2 - attempt to remove v1.
|
---|
189 |
|
---|
190 |
|
---|
191 | 0.98.21
|
---|
192 | -------
|
---|
193 |
|
---|
194 | * Optimization fixes.
|
---|
195 |
|
---|
196 |
|
---|
197 | 0.98.20
|
---|
198 | -------
|
---|
199 |
|
---|
200 | * Optimization fixes.
|
---|
201 |
|
---|
202 |
|
---|
203 | 0.98.19
|
---|
204 | -------
|
---|
205 |
|
---|
206 | * H. J. Lu's patch back out.
|
---|
207 |
|
---|
208 |
|
---|
209 | 0.98.18
|
---|
210 | -------
|
---|
211 |
|
---|
212 | * Added ".rdata" to "-f win32".
|
---|
213 |
|
---|
214 |
|
---|
215 | 0.98.17
|
---|
216 | -------
|
---|
217 |
|
---|
218 | * H. J. Lu's "bogus elf" patch. (Red Hat problem?)
|
---|
219 |
|
---|
220 |
|
---|
221 | 0.98.16
|
---|
222 | -------
|
---|
223 |
|
---|
224 | * Fix whitespace before "[section ..." bug.
|
---|
225 |
|
---|
226 | 0.98.15
|
---|
227 | -------
|
---|
228 |
|
---|
229 | * Rdoff changes (?).
|
---|
230 | * Fix fixes to memory leaks.
|
---|
231 |
|
---|
232 | 0.98.14
|
---|
233 | -------
|
---|
234 |
|
---|
235 | * Fix memory leaks.
|
---|
236 | * (there was no '.13)
|
---|
237 |
|
---|
238 | 0.98.12
|
---|
239 | -------
|
---|
240 |
|
---|
241 | * Update optimization (new function of "-O1")
|
---|
242 | * Changes to test/bintest.asm (?).
|
---|
243 |
|
---|
244 | 0.98.11
|
---|
245 | -------
|
---|
246 |
|
---|
247 | * Optimization changes.
|
---|
248 | * Ndisasm fixed.
|
---|
249 | * (there was no '.10)
|
---|
250 |
|
---|
251 | 0.98.09
|
---|
252 | -------
|
---|
253 |
|
---|
254 | * Add multiple sections support to "-f bin".
|
---|
255 | * Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
|
---|
256 | * Add "-v" as an alias to the "-r" switch.
|
---|
257 | * Remove "#ifdef" from Tasm compatibility options.
|
---|
258 | * Remove redundant size-overrides on "mov ds, ex", etc.
|
---|
259 | * Fixes to SSE2, other insns.dat (?).
|
---|
260 | * Enable uppercase "I" and "P" switches.
|
---|
261 | * Case insinsitive "seg" and "wrt".
|
---|
262 | * Update install.sh (?).
|
---|
263 | * Allocate tokens in blocks.
|
---|
264 | * Improve "invalid effective address" messages.
|
---|
265 |
|
---|
266 | 0.98.08
|
---|
267 | -------
|
---|
268 |
|
---|
269 | * Add "%strlen" and "%substr" macro operators
|
---|
270 | * Fixed broken c16.mac.
|
---|
271 | * Unterminated string error reported.
|
---|
272 | * Fixed bugs as per 0.98bf
|
---|
273 |
|
---|
274 |
|
---|
275 | 0.98.09b with John Coffman patches released 28-Oct-2001
|
---|
276 | -------------------------------------------------------
|
---|
277 |
|
---|
278 | Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
|
---|
279 |
|
---|
280 | * More closely compatible with 0.98 when -O0 is implied
|
---|
281 | or specified. Not strictly identical, since backward
|
---|
282 | branches in range of short offsets are recognized, and signed
|
---|
283 | byte values with no explicit size specification will be
|
---|
284 | assembled as a single byte.
|
---|
285 |
|
---|
286 | * More forgiving with the PUSH instruction. 0.98 requires
|
---|
287 | a size to be specified always. 0.98.09b will imply the size
|
---|
288 | from the current BITS setting (16 or 32).
|
---|
289 |
|
---|
290 | * Changed definition of the optimization flag:
|
---|
291 |
|
---|
292 | -O0 strict two-pass assembly, JMP and Jcc are
|
---|
293 | handled more like 0.98, except that back-
|
---|
294 | ward JMPs are short, if possible.
|
---|
295 |
|
---|
296 | -O1 strict two-pass assembly, but forward
|
---|
297 | branches are assembled with code guaranteed
|
---|
298 | to reach; may produce larger code than
|
---|
299 | -O0, but will produce successful assembly
|
---|
300 | more often if branch offset sizes are not
|
---|
301 | specified.
|
---|
302 |
|
---|
303 | -O2 multi-pass optimization, minimize branch
|
---|
304 | offsets; also will minimize signed immed-
|
---|
305 | iate bytes, overriding size specification.
|
---|
306 |
|
---|
307 | -O3 like -O2, but more passes taken, if needed
|
---|
308 |
|
---|
309 |
|
---|
310 | 0.98.07 released 01/28/01
|
---|
311 | -------------------------
|
---|
312 |
|
---|
313 | * Added Stepane Denis' SSE2 instructions to a *working*
|
---|
314 | version of the code - some earlier versions were based on
|
---|
315 | broken code - sorry 'bout that. version "0.98.07"
|
---|
316 |
|
---|
317 |
|
---|
318 | 01/28/01
|
---|
319 | --------
|
---|
320 |
|
---|
321 | * Cosmetic modifications to nasm.c, nasm.h,
|
---|
322 | AUTHORS, MODIFIED
|
---|
323 |
|
---|
324 |
|
---|
325 | 0.98.06f released 01/18/01
|
---|
326 | --------------------------
|
---|
327 |
|
---|
328 | * - Add "metalbrain"s jecxz bug fix in insns.dat
|
---|
329 | - alter nasmdoc.src to match - version "0.98.06f"
|
---|
330 |
|
---|
331 |
|
---|
332 | 0.98.06e released 01/09/01
|
---|
333 | --------------------------
|
---|
334 |
|
---|
335 | * Removed the "outforms.h" file - it appears to be
|
---|
336 | someone's old backup of "outform.h". version "0.98.06e"
|
---|
337 |
|
---|
338 |
|
---|
339 | 01/09/01
|
---|
340 | --------
|
---|
341 |
|
---|
342 | * fbk - finally added the fix for the "multiple %includes bug",
|
---|
343 | known since 7/27/99 - reported originally (?) and sent to
|
---|
344 | us by Austin Lunnen - he reports that John Fine had a fix
|
---|
345 | within the day. Here it is...
|
---|
346 |
|
---|
347 | * Nelson Rush resigns from the group. Big thanks to Nelson for
|
---|
348 | his leadership and enthusiasm in getting these changes
|
---|
349 | incorporated into Nasm!
|
---|
350 |
|
---|
351 | * fbk - [list +], [list -] directives - ineptly implemented, should
|
---|
352 | be re-written or removed, perhaps.
|
---|
353 |
|
---|
354 | * Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
|
---|
355 | as well - testing might be desirable...
|
---|
356 |
|
---|
357 |
|
---|
358 | 08/07/00
|
---|
359 | --------
|
---|
360 |
|
---|
361 | * James Seter - -postfix, -prefix command line switches.
|
---|
362 | * Yuri Zaporogets - rdoff utility changes.
|
---|
363 |
|
---|
364 |
|
---|
365 | 0.98p1
|
---|
366 | ------
|
---|
367 |
|
---|
368 | * GAS-like palign (Panos Minos)
|
---|
369 | * FIXME: Someone, fill this in with details
|
---|
370 |
|
---|
371 |
|
---|
372 | 0.98bf (bug-fixed)
|
---|
373 | ----------------------------------
|
---|
374 |
|
---|
375 | * Fixed - elf and aoutb bug - shared libraries
|
---|
376 | - multiple "%include" bug in "-f obj"
|
---|
377 | - jcxz, jecxz bug
|
---|
378 | - unrecognized option bug in ndisasm
|
---|
379 |
|
---|
380 | 0.98.03 with John Coffman's changes released 27-Jul-2000
|
---|
381 | --------------------------------------------------------
|
---|
382 |
|
---|
383 | * Added signed byte optimizations for the 0x81/0x83 class
|
---|
384 | of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
|
---|
385 | when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also
|
---|
386 | optimization of signed byte form of 'PUSH imm' and 'IMUL
|
---|
387 | reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.
|
---|
388 |
|
---|
389 | * Added multi-pass JMP and Jcc offset optimization. Offsets
|
---|
390 | on forward references will preferentially use the short form,
|
---|
391 | without the need to code a specific size (short or near) for
|
---|
392 | the branch. Added instructions for 'Jcc label' to use the
|
---|
393 | form 'Jnotcc $+3/JMP label', in cases where a short offset
|
---|
394 | is out of bounds. If compiling for a 386 or higher CPU, then
|
---|
395 | the 386 form of Jcc will be used instead.
|
---|
396 |
|
---|
397 | This feature is controlled by a new command-line switch: "O",
|
---|
398 | (upper case letter O). "-O0" reverts the assembler to no
|
---|
399 | extra optimization passes, "-O1" allows up to 5 extra passes,
|
---|
400 | and "-O2"(default), allows up to 10 extra optimization passes.
|
---|
401 |
|
---|
402 | * Added a new directive: 'cpu XXX', where XXX is any of:
|
---|
403 | 8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
|
---|
404 | Katmai. All are case insensitive. All instructions will
|
---|
405 | be selected only if they apply to the selected cpu or lower.
|
---|
406 | Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
|
---|
407 |
|
---|
408 | * Added to 'standard.mac', the "use16" and "use32" forms of
|
---|
409 | the "bits 16/32" directive. This is nothing new, just conforms
|
---|
410 | to a lot of other assemblers. (minor)
|
---|
411 |
|
---|
412 | * Changed label allocation from 320/32 (10000 labels @ 200K+)
|
---|
413 | to 32/37 (1000 labels); makes running under DOS much easier.
|
---|
414 | Since additional label space is allocated dynamically, this
|
---|
415 | should have no effect on large programs with lots of labels.
|
---|
416 | The 37 is a prime, believed to be better for hashing. (minor)
|
---|
417 |
|
---|
418 | * Integrated patchfile 0.98-0.98.01. I call this version
|
---|
419 | 0.98.03, for historical reasons: 0.98.02 was trashed.
|
---|
420 |
|
---|
421 | --John Coffman <[email protected]> 27-Jul-2000
|
---|
422 |
|
---|
423 |
|
---|
424 | Kendall Bennett's SciTech MGL changes
|
---|
425 | -------------------------------------
|
---|
426 | Note that you must define "TASM_COMPAT" at compile-time
|
---|
427 | to get the Tasm Ideal Mode compatibility.
|
---|
428 |
|
---|
429 | All changes can be compiled in and out using the TASM_COMPAT macros,
|
---|
430 | and when compiled without TASM_COMPAT defined we get the exact same
|
---|
431 | binary as the unmodified 0.98 sources.
|
---|
432 |
|
---|
433 | standard.mac, macros.c:
|
---|
434 | . Added macros to ignore TASM directives before first include
|
---|
435 |
|
---|
436 | nasm.h:
|
---|
437 | . Added extern declaration for tasm_compatible_mode
|
---|
438 |
|
---|
439 | nasm.c:
|
---|
440 | . Added global variable tasm_compatible_mode
|
---|
441 | . Added command line switch for TASM compatible mode (-t)
|
---|
442 | . Changed version command line to reflect when compiled with TASM additions
|
---|
443 | . Added response file processing to allow all arguments on a single
|
---|
444 | line (response file is @resp rather than -@resp for NASM format).
|
---|
445 |
|
---|
446 | labels.c:
|
---|
447 | . Changes islocal() macro to support TASM style @@local labels.
|
---|
448 | . Added islocalchar() macro to support TASM style @@local labels.
|
---|
449 |
|
---|
450 | parser.c:
|
---|
451 | . Added support for TASM style memory references (ie: mov [DWORD eax],10
|
---|
452 | rather than the NASM style mov DWORD [eax],10).
|
---|
453 |
|
---|
454 | preproc.c:
|
---|
455 | . Added new directives, %arg, %local, %stacksize to directives table
|
---|
456 | . Added support for TASM style directives without a leading % symbol.
|
---|
457 |
|
---|
458 | Integrated a block of changes from Andrew Zabolotny <[email protected]>:
|
---|
459 |
|
---|
460 | * A new keyword %xdefine and its case-insensitive counterpart %ixdefine.
|
---|
461 | They work almost the same way as %define and %idefine but expand
|
---|
462 | the definition immediately, not on the invocation. Something like a cross
|
---|
463 | between %define and %assign. The "x" suffix stands for "eXpand", so
|
---|
464 | "xdefine" can be deciphered as "expand-and-define". Thus you can do
|
---|
465 | things like this:
|
---|
466 |
|
---|
467 | %assign ofs 0
|
---|
468 |
|
---|
469 | %macro arg 1
|
---|
470 | %xdefine %1 dword [esp+ofs]
|
---|
471 | %assign ofs ofs+4
|
---|
472 | %endmacro
|
---|
473 |
|
---|
474 | * Changed the place where the expansion of %$name macros are expanded.
|
---|
475 | Now they are converted into [email protected] form when detokenizing, so
|
---|
476 | there are no quirks as before when using %$name arguments to macros,
|
---|
477 | in macros etc. For example:
|
---|
478 |
|
---|
479 | %macro abc 1
|
---|
480 | %define %1 hello
|
---|
481 | %endm
|
---|
482 |
|
---|
483 | abc %$here
|
---|
484 | %$here
|
---|
485 |
|
---|
486 | Now last line will be expanded into "hello" as expected. This also allows
|
---|
487 | for lots of goodies, a good example are extended "proc" macros included
|
---|
488 | in this archive.
|
---|
489 |
|
---|
490 | * Added a check for "cstk" in smacro_defined() before calling get_ctx() -
|
---|
491 | this allows for things like:
|
---|
492 |
|
---|
493 | %ifdef %$abc
|
---|
494 | %endif
|
---|
495 |
|
---|
496 | to work without warnings even in no context.
|
---|
497 |
|
---|
498 | * Added a check for "cstk" in %if*ctx and %elif*ctx directives -
|
---|
499 | this allows to use %ifctx without excessive warnings. If there is
|
---|
500 | no active context, %ifctx goes through "false" branch.
|
---|
501 |
|
---|
502 | * Removed "user error: " prefix with %error directive: it just clobbers the
|
---|
503 | output and has absolutely no functionality. Besides, this allows to write
|
---|
504 | macros that does not differ from built-in functions in any way.
|
---|
505 |
|
---|
506 | * Added expansion of string that is output by %error directive. Now you
|
---|
507 | can do things like:
|
---|
508 |
|
---|
509 | %define hello(x) Hello, x!
|
---|
510 |
|
---|
511 | %define %$name andy
|
---|
512 | %error "hello(%$name)"
|
---|
513 |
|
---|
514 | Same happened with %include directive.
|
---|
515 |
|
---|
516 | * Now all directives that expect an identifier will try to expand and
|
---|
517 | concatenate everything without whitespaces in between before usage.
|
---|
518 | For example, with "unfixed" nasm the commands
|
---|
519 |
|
---|
520 | %define %$abc hello
|
---|
521 | %define __%$abc goodbye
|
---|
522 | __%$abc
|
---|
523 |
|
---|
524 | would produce "incorrect" output: last line will expand to
|
---|
525 |
|
---|
526 | hello goodbyehello
|
---|
527 |
|
---|
528 | Not quite what you expected, eh? :-) The answer is that preprocessor
|
---|
529 | treats the %define construct as if it would be
|
---|
530 |
|
---|
531 | %define __ %$abc goodbye
|
---|
532 |
|
---|
533 | (note the white space between __ and %$abc). After my "fix" it
|
---|
534 | will "correctly" expand into
|
---|
535 |
|
---|
536 | goodbye
|
---|
537 |
|
---|
538 | as expected. Note that I use quotes around words "correct", "incorrect"
|
---|
539 | etc because this is rather a feature not a bug; however current behaviour
|
---|
540 | is more logical (and allows more advanced macro usage :-).
|
---|
541 |
|
---|
542 | Same change was applied to:
|
---|
543 | %push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine,
|
---|
544 | %assign,%iassign,%undef
|
---|
545 |
|
---|
546 | * A new directive [WARNING {+|-}warning-id] have been added. It works only
|
---|
547 | if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
|
---|
548 |
|
---|
549 | * A new warning type: macro-selfref. By default this warning is disabled;
|
---|
550 | when enabled NASM warns when a macro self-references itself; for example
|
---|
551 | the following source:
|
---|
552 |
|
---|
553 | [WARNING macro-selfref]
|
---|
554 |
|
---|
555 | %macro push 1-*
|
---|
556 | %rep %0
|
---|
557 | push %1
|
---|
558 | %rotate 1
|
---|
559 | %endrep
|
---|
560 | %endmacro
|
---|
561 |
|
---|
562 | push eax,ebx,ecx
|
---|
563 |
|
---|
564 | will produce a warning, but if we remove the first line we won't see it
|
---|
565 | anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
|
---|
566 | eats such constructs without warnings at all).
|
---|
567 |
|
---|
568 | * Added a "error" routine to preprocessor which always will set ERR_PASS1
|
---|
569 | bit in severity_code. This removes annoying repeated errors on first
|
---|
570 | and second passes from preprocessor.
|
---|
571 |
|
---|
572 | * Added the %+ operator in single-line macros for concatenating two
|
---|
573 | identifiers. Usage example:
|
---|
574 |
|
---|
575 | %define _myfunc _otherfunc
|
---|
576 | %define cextern(x) _ %+ x
|
---|
577 | cextern (myfunc)
|
---|
578 |
|
---|
579 | After first expansion, third line will become "_myfunc". After this
|
---|
580 | expansion is performed again so it becomes "_otherunc".
|
---|
581 |
|
---|
582 | * Now if preprocessor is in a non-emmitting state, no warning or error
|
---|
583 | will be emmitted. Example:
|
---|
584 |
|
---|
585 | %if 1
|
---|
586 | mov eax,ebx
|
---|
587 | %else
|
---|
588 | put anything you want between these two brackets,
|
---|
589 | even macro-parameter references %1 or local labels %$zz
|
---|
590 | or macro-local labels %%zz - no warning will be emmitted.
|
---|
591 | %endif
|
---|
592 |
|
---|
593 | * Context-local variables on expansion as a last resort are looked up
|
---|
594 | in outer contexts. For example, the following piece:
|
---|
595 |
|
---|
596 | %push outer
|
---|
597 | %define %$a [esp]
|
---|
598 |
|
---|
599 | %push inner
|
---|
600 | %$a
|
---|
601 | %pop
|
---|
602 | %pop
|
---|
603 |
|
---|
604 | will expand correctly the fourth line to [esp]; if we'll define another
|
---|
605 | %$a inside the "inner" context, it will take precedence over outer
|
---|
606 | definition. However, this modification has been applied only to
|
---|
607 | expand_smacro and not to smacro_define: as a consequence expansion
|
---|
608 | looks in outer contexts, but %ifdef won't look in outer contexts.
|
---|
609 |
|
---|
610 | This behaviour is needed because we don't want nested contexts to
|
---|
611 | act on already defined local macros. Example:
|
---|
612 |
|
---|
613 | %define %$arg1 [esp+4]
|
---|
614 | test eax,eax
|
---|
615 | if nz
|
---|
616 | mov eax,%$arg1
|
---|
617 | endif
|
---|
618 |
|
---|
619 | In this example the "if" mmacro enters into the "if" context, so %$arg1
|
---|
620 | is not valid anymore inside "if". Of course it could be worked around
|
---|
621 | by using explicitely %$$arg1 but this is ugly IMHO.
|
---|
622 |
|
---|
623 | * Fixed memory leak in %undef. The origline wasn't freed before
|
---|
624 | exiting on success.
|
---|
625 |
|
---|
626 | * Fixed trap in preprocessor when line expanded to empty set of tokens.
|
---|
627 | This happens, for example, in the following case:
|
---|
628 |
|
---|
629 | #define SOMETHING
|
---|
630 | SOMETHING
|
---|
631 |
|
---|
632 |
|
---|
633 | 0.98
|
---|
634 | ----
|
---|
635 |
|
---|
636 | All changes since NASM 0.98p3 have been produced by H. Peter Anvin <[email protected]>.
|
---|
637 |
|
---|
638 | * The documentation comment delimiter is \# not #.
|
---|
639 | * Allow EQU definitions to refer to external labels; reported by
|
---|
640 | Pedro Gimeno.
|
---|
641 | * Re-enable support for RDOFF v1; reported by Pedro Gimeno.
|
---|
642 | * Updated License file per OK from Simon and Julian.
|
---|
643 |
|
---|
644 |
|
---|
645 | 0.98p9
|
---|
646 | ------
|
---|
647 |
|
---|
648 | * Update documentation (although the instruction set reference will
|
---|
649 | have to wait; I don't want to hold up the 0.98 release for it.)
|
---|
650 | * Verified that the NASM implementation of the PEXTRW and PMOVMSKB
|
---|
651 | instructions is correct. The encoding differs from what the Intel
|
---|
652 | manuals document, but the Pentium III behaviour matches NASM, not
|
---|
653 | the Intel manuals.
|
---|
654 | * Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
|
---|
655 | Stefan Hoffmeister.
|
---|
656 | * Resurrect the -s option, which was removed when changing the
|
---|
657 | diagnostic output to stdout.
|
---|
658 |
|
---|
659 |
|
---|
660 | 0.98p8
|
---|
661 | ------
|
---|
662 |
|
---|
663 | * Fix for "DB" when NASM is running on a bigendian machine.
|
---|
664 | * Invoke insns.pl once for each output script, making Makefile.in
|
---|
665 | legal for "make -j".
|
---|
666 | * Improve the Unix configure-based makefiles to make package
|
---|
667 | creation easier.
|
---|
668 | * Included an RPM .spec file for building RPM (RedHat Package Manager)
|
---|
669 | packages on Linux or Unix systems.
|
---|
670 | * Fix Makefile dependency problems.
|
---|
671 | * Change src/rdsrc.pl to include sectioning information in info
|
---|
672 | output; required for install-info to work.
|
---|
673 | * Updated the RDOFF distribution to version 2 from Jules; minor
|
---|
674 | massaging to make it compile in my environment.
|
---|
675 | * Split doc files that can be built by anyone with a Perl interpreter off
|
---|
676 | into a separate archive.
|
---|
677 | * "Dress rehearsal" release!
|
---|
678 |
|
---|
679 |
|
---|
680 | 0.98p7
|
---|
681 | ------
|
---|
682 |
|
---|
683 | * Fixed opcodes with a third byte-sized immediate argument to not
|
---|
684 | complain if given "byte" on the immediate.
|
---|
685 | * Allow %undef to remove single-line macros with arguments. This
|
---|
686 | matches the behaviour of #undef in the C preprocessor.
|
---|
687 | * Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
|
---|
688 | compatibility with most C compilers and preprocessors. This allows
|
---|
689 | Makefile options to be shared between cc and nasm, for example.
|
---|
690 | * Minor cleanups.
|
---|
691 | * Went through the list of Katmai instructions and hopefully fixed the
|
---|
692 | (rather few) mistakes in it.
|
---|
693 | * (Hopefully) fixed a number of disassembler bugs related to ambiguous
|
---|
694 | instructions (disambiguated by -p) and SSE instructions with REP.
|
---|
695 | * Fix for bug reported by Mark Junger: "call dword 0x12345678" should
|
---|
696 | work and may add an OSP (affected CALL, JMP, Jcc).
|
---|
697 | * Fix for environments when "stderr" isn't a compile-time constant.
|
---|
698 |
|
---|
699 |
|
---|
700 | 0.98p6
|
---|
701 | ------
|
---|
702 |
|
---|
703 | * Took officially over coordination of the 0.98 release; so drop
|
---|
704 | the p3.x notation. Skipped p4 and p5 to avoid confusion with John
|
---|
705 | Fine's J4 and J5 releases.
|
---|
706 | * Update the documentation; however, it still doesn't include
|
---|
707 | documentation for the various new instructions. I somehow wonder if
|
---|
708 | it makes sense to have an instruction set reference in the assembler
|
---|
709 | manual when Intel et al have PDF versions of their manuals online.
|
---|
710 | * Recognize "idt" or "centaur" for the -p option to ndisasm.
|
---|
711 | * Changed error messages back to stderr where they belong, but add an
|
---|
712 | -E option to redirect them elsewhere (the DOS shell cannot redirect
|
---|
713 | stderr.)
|
---|
714 | * -M option to generate Makefile dependencies (based on code from Alex
|
---|
715 | Verstak.)
|
---|
716 | * %undef preprocessor directive, and -u option, that undefines a
|
---|
717 | single-line macro.
|
---|
718 | * OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
|
---|
719 | Chuck Crayne.
|
---|
720 | * Various minor bugfixes (reported by):
|
---|
721 | - Dangling %s in preproc.c (Martin Junker)
|
---|
722 | * THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am
|
---|
723 | on a trip and didn't bring the Katmai instruction reference, so I
|
---|
724 | can't work on them right now.
|
---|
725 | * Updated the License file per agreement with Simon and Jules to
|
---|
726 | include a GPL distribution clause.
|
---|
727 |
|
---|
728 |
|
---|
729 | 0.98p3.7
|
---|
730 | --------
|
---|
731 |
|
---|
732 | * (Hopefully) fixed the canned Makefiles to include the outrdf2 and
|
---|
733 | zoutieee modules.
|
---|
734 | * Renamed changes.asm to changed.asm.
|
---|
735 |
|
---|
736 |
|
---|
737 | 0.98p3.6
|
---|
738 | --------
|
---|
739 |
|
---|
740 | * Fixed a bunch of instructions that were added in 0.98p3.5 which had
|
---|
741 | memory operands, and the address-size prefix was missing from the
|
---|
742 | instruction pattern.
|
---|
743 |
|
---|
744 |
|
---|
745 | 0.98p3.5
|
---|
746 | --------
|
---|
747 |
|
---|
748 | * Merged in changes from John S. Fine's 0.98-J5 release. John's based
|
---|
749 | 0.98-J5 on my 0.98p3.3 release; this merges the changes.
|
---|
750 | * Expanded the instructions flag field to a long so we can fit more
|
---|
751 | flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
|
---|
752 | such.
|
---|
753 | * Fix the "PRIV" flag on a bunch of instructions, and create new
|
---|
754 | "PROT" flag for protected-mode-only instructions (orthogonal to if
|
---|
755 | the instruction is privileged!) and new "SMM" flag for SMM-only
|
---|
756 | instructions.
|
---|
757 | * Added AMD-only SYSCALL and SYSRET instructions.
|
---|
758 | * Make SSE actually work, and add new Katmai MMX instructions.
|
---|
759 | * Added a -p (preferred vendor) option to ndisasm so that it can
|
---|
760 | distinguish e.g. Cyrix opcodes also used in SSE. For example:
|
---|
761 |
|
---|
762 | ndisasm -p cyrix aliased.bin
|
---|
763 | 00000000 670F514310 paddsiw mm0,[ebx+0x10]
|
---|
764 | 00000005 670F514320 paddsiw mm0,[ebx+0x20]
|
---|
765 | ndisasm -p intel aliased.bin
|
---|
766 | 00000000 670F514310 sqrtps xmm0,[ebx+0x10]
|
---|
767 | 00000005 670F514320 sqrtps xmm0,[ebx+0x20]
|
---|
768 | * Added a bunch of Cyrix-specific instructions.
|
---|
769 |
|
---|
770 |
|
---|
771 | 0.98p3.4
|
---|
772 | --------
|
---|
773 |
|
---|
774 | * Made at least an attempt to modify all the additional Makefiles (in
|
---|
775 | the Mkfiles directory). I can't test it, but this was the best I
|
---|
776 | could do.
|
---|
777 | * DOS DJGPP+"Opus Make" Makefile from John S. Fine.
|
---|
778 | * changes.asm changes from John S. Fine.
|
---|
779 |
|
---|
780 |
|
---|
781 | 0.98p3.3
|
---|
782 | --------
|
---|
783 |
|
---|
784 | * Patch from Conan Brink to allow nesting of %rep directives.
|
---|
785 | * If we're going to allow INT01 as an alias for INT1/ICEBP (one of
|
---|
786 | Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
|
---|
787 | as well.
|
---|
788 | * Updated changes.asm to include the latest changes.
|
---|
789 | * Tried to clean up the <CR>s that had snuck in from a DOS/Windows
|
---|
790 | environment into my Unix environment, and try to make sure than
|
---|
791 | DOS/Windows users get them back.
|
---|
792 | * We would silently generate broken tools if insns.dat wasn't sorted
|
---|
793 | properly. Change insns.pl so that the order doesn't matter.
|
---|
794 | * Fix bug in insns.pl (introduced by me) which would cause conditional
|
---|
795 | instructions to have an extra "cc" in disassembly, e.g. "jnz"
|
---|
796 | disassembled as "jccnz".
|
---|
797 |
|
---|
798 |
|
---|
799 | 0.98p3.2
|
---|
800 | --------
|
---|
801 |
|
---|
802 | * Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
|
---|
803 | http://www.csoft.net/cz/johnfine/
|
---|
804 | * Changed previous "spotless" Makefile target (appropriate for distribution)
|
---|
805 | to "distclean", and added "cleaner" target which is same as "clean"
|
---|
806 | except deletes files generated by Perl scripts; "spotless" is union.
|
---|
807 | * Removed BASIC programs from distribution. Get a Perl interpreter
|
---|
808 | instead (see below.)
|
---|
809 | * Calling this "pre-release 3.2" rather than "p3-hpa2" because of
|
---|
810 | John's contributions.
|
---|
811 | * Actually link in the IEEE output format (zoutieee.c); fix a bunch of
|
---|
812 | compiler warnings in that file. Note I don't know what IEEE output
|
---|
813 | is supposed to look like, so these changes were made "blind".
|
---|
814 |
|
---|
815 |
|
---|
816 | 0.98p3-hpa
|
---|
817 | ----------
|
---|
818 |
|
---|
819 | * Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
|
---|
820 | buildable version for Unix systems (Makefile.in updates, etc.)
|
---|
821 | * Changed insns.pl to create the instruction tables in nasm.h and
|
---|
822 | names.c, so that a new instruction can be added by adding it *only*
|
---|
823 | to insns.dat.
|
---|
824 | * Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
|
---|
825 | FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
|
---|
826 | guarantee will never be used; one of them is documented as UD2 in
|
---|
827 | Intel documentation, the other one just as "Undefined Opcode" --
|
---|
828 | calling it UD1 seemed to make sense.)
|
---|
829 | * MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
|
---|
830 | characters long. Now MAX_SYMBOL is derived from insns.dat.
|
---|
831 | * A note on the BASIC programs included: forget them. insns.bas is
|
---|
832 | already out of date. Get yourself a Perl interpreter for your
|
---|
833 | platform of choice at:
|
---|
834 |
|
---|
835 | http://www.cpan.org/ports/index.html
|
---|
836 |
|
---|
837 |
|
---|
838 | 0.98 pre-release 3
|
---|
839 | -------------------
|
---|
840 |
|
---|
841 | added response file support, improved command line handling, new layout
|
---|
842 | help screen
|
---|
843 |
|
---|
844 | fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
|
---|
845 | related bugs, updated Wishlist; 0.98 Prerelease 3.
|
---|
846 |
|
---|
847 |
|
---|
848 | 0.98 pre-release 2
|
---|
849 | -------------------
|
---|
850 |
|
---|
851 | fixed bug in outcoff.c to do with truncating section names longer
|
---|
852 | than 8 characters, referencing beyond end of string; 0.98 pre-release 2
|
---|
853 |
|
---|
854 |
|
---|
855 | 0.98 pre-released May 1999
|
---|
856 | --------------------------
|
---|
857 |
|
---|
858 | Fixed a bug whereby STRUC didn't work at all in RDF.
|
---|
859 |
|
---|
860 | Fixed a problem with group specification in PUBDEFs in OBJ.
|
---|
861 |
|
---|
862 | Improved ease of adding new output formats. Contribution due to
|
---|
863 | Fox Cutter.
|
---|
864 |
|
---|
865 | Fixed a bug in relocations in the `bin' format: was showing up when
|
---|
866 | a relocatable reference crossed an 8192-byte boundary in any output
|
---|
867 | section.
|
---|
868 |
|
---|
869 | Fixed a bug in local labels: local-label lookups were inconsistent
|
---|
870 | between passes one and two if an EQU occurred between the definition
|
---|
871 | of a global label and the subsequent use of a local label local to
|
---|
872 | that global.
|
---|
873 |
|
---|
874 | Fixed a seg-fault in the preprocessor (again) which happened when
|
---|
875 | you use a blank line as the first line of a multi-line macro
|
---|
876 | definition and then defined a label on the same line as a call to
|
---|
877 | that macro.
|
---|
878 |
|
---|
879 | Fixed a stale-pointer bug in the handling of the NASM environment
|
---|
880 | variable. Thanks to Thomas McWilliams.
|
---|
881 |
|
---|
882 | ELF had a hard limit on the number of sections which caused
|
---|
883 | segfaults when transgressed. Fixed.
|
---|
884 |
|
---|
885 | Added ability for ndisasm to read from stdin by using `-' as the
|
---|
886 | filename.
|
---|
887 |
|
---|
888 | ndisasm wasn't outputting the TO keyword. Fixed.
|
---|
889 |
|
---|
890 | Fixed error cascade on bogus expression in %if - an error in
|
---|
891 | evaluation was causing the entire %if to be discarded, thus creating
|
---|
892 | trouble later when the %else or %endif was encountered.
|
---|
893 |
|
---|
894 | Forward reference tracking was instruction-granular not operand-
|
---|
895 | granular, which was causing 286-specific code to be generated
|
---|
896 | needlessly on code of the form `shr word [forwardref],1'. Thanks to
|
---|
897 | Jim Hague for sending a patch.
|
---|
898 |
|
---|
899 | All messages now appear on stdout, as sending them to stderr serves
|
---|
900 | no useful purpose other than to make redirection difficult.
|
---|
901 |
|
---|
902 | Fixed the problem with EQUs pointing to an external symbol - this
|
---|
903 | now generates an error message.
|
---|
904 |
|
---|
905 | Allowed multiple size prefixes to an operand, of which only the first
|
---|
906 | is taken into account.
|
---|
907 |
|
---|
908 | Incorporated John Fine's changes, including fixes of a large number
|
---|
909 | of preprocessor bugs, some small problems in OBJ, and a reworking of
|
---|
910 | label handling to define labels before their line is assembled, rather
|
---|
911 | than after.
|
---|
912 |
|
---|
913 | Reformatted a lot of the source code to be more readable. Included
|
---|
914 | 'coding.txt' as a guideline for how to format code for contributors.
|
---|
915 |
|
---|
916 | Stopped nested %reps causing a panic - they now cause a slightly more
|
---|
917 | friendly error message instead.
|
---|
918 |
|
---|
919 | Fixed floating point constant problems (patch by Pedro Gimeno)
|
---|
920 |
|
---|
921 | Fixed the return value of insn_size() not being checked for -1, indicating
|
---|
922 | an error.
|
---|
923 |
|
---|
924 | Incorporated 3D now instructions.
|
---|
925 |
|
---|
926 | Fixed the 'mov eax, eax + ebx' bug.
|
---|
927 |
|
---|
928 | Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
|
---|
929 |
|
---|
930 | Incorporated John Fine's command line parsing changes
|
---|
931 |
|
---|
932 | Incorporated David Lindauer's OMF debug support
|
---|
933 |
|
---|
934 | Made changes for LCC 4.0 support (__NASM_CDecl__, removed register size
|
---|
935 | specification warning when sizes agree).
|
---|
936 |
|
---|
937 | Released NASM 0.98 Pre-release 1
|
---|
938 |
|
---|
939 |
|
---|
940 | 0.97 released December 1997
|
---|
941 | ---------------------------
|
---|
942 |
|
---|
943 | This was entirely a bug-fix release to 0.96, which seems to have got
|
---|
944 | cursed. Silly me.
|
---|
945 |
|
---|
946 | Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
|
---|
947 | fail. Caused by an error in the `MOV EAX,<segment>' support.
|
---|
948 |
|
---|
949 | ndisasm hung at EOF when compiled with lcc on Linux because lcc on
|
---|
950 | Linux somehow breaks feof(). ndisasm now does not rely on feof().
|
---|
951 |
|
---|
952 | A heading in the documentation was missing due to a markup error in
|
---|
953 | the indexing. Fixed.
|
---|
954 |
|
---|
955 | Fixed failure to update all pointers on realloc() within extended-
|
---|
956 | operand code in parser.c. Was causing wrong behaviour and seg faults
|
---|
957 | on lines such as `dd 0.0,0.0,0.0,0.0,...'
|
---|
958 |
|
---|
959 | Fixed a subtle preprocessor bug whereby invoking one multi-line
|
---|
960 | macro on the first line of the expansion of another, when the second
|
---|
961 | had been invoked with a label defined before it, didn't expand the
|
---|
962 | inner macro.
|
---|
963 |
|
---|
964 | Added internal.doc back in to the distribution archives - it was
|
---|
965 | missing in 0.96 *blush*
|
---|
966 |
|
---|
967 | Fixed bug causing 0.96 to be unable to assemble its own test files,
|
---|
968 | specifically objtest.asm. *blush again*
|
---|
969 |
|
---|
970 | Fixed seg-faults and bogus error messages caused by mismatching
|
---|
971 | %rep and %endrep within multi-line macro definitions.
|
---|
972 |
|
---|
973 | Fixed a problem with buffer overrun in OBJ, which was causing
|
---|
974 | corruption at ends of long PUBDEF records.
|
---|
975 |
|
---|
976 | Separated DOS archives into main-program and documentation to reduce
|
---|
977 | download size.
|
---|
978 |
|
---|
979 |
|
---|
980 | 0.96 released November 1997
|
---|
981 | ---------------------------
|
---|
982 |
|
---|
983 | Fixed a bug whereby, if `nasm sourcefile' would cause a filename
|
---|
984 | collision warning and put output into `nasm.out', then `nasm
|
---|
985 | sourcefile -o outputfile' still gave the warning even though the
|
---|
986 | `-o' was honoured.
|
---|
987 |
|
---|
988 | Fixed name pollution under Digital UNIX: one of its header files
|
---|
989 | defined R_SP, which broke the enum in nasm.h.
|
---|
990 |
|
---|
991 | Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
|
---|
992 | two-operand forms; NDISASM didn't recognise the longer register
|
---|
993 | forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
|
---|
994 | flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
|
---|
995 | size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
|
---|
996 | undocumented because the Intel Architecture reference documents
|
---|
997 | them.
|
---|
998 |
|
---|
999 | Fixed a problem with the local-label mechanism, whereby strange
|
---|
1000 | types of symbol (EQUs, auto-defined OBJ segment base symbols)
|
---|
1001 | interfered with the `previous global label' value and screwed up
|
---|
1002 | local labels.
|
---|
1003 |
|
---|
1004 | Fixed a bug whereby the stub preprocessor didn't communicate with
|
---|
1005 | the listing file generator, so that the -a and -l options in
|
---|
1006 | conjunction would produce a useless listing file.
|
---|
1007 |
|
---|
1008 | Merged `os2' object file format back into `obj', after discovering
|
---|
1009 | that `obj' _also_ shouldn't have a link pass separator in a module
|
---|
1010 | containing a non-trivial MODEND. Flat segments are now declared
|
---|
1011 | using the FLAT attribute. `os2' is no longer a valid object format
|
---|
1012 | name: use `obj'.
|
---|
1013 |
|
---|
1014 | Removed the fixed-size temporary storage in the evaluator. Very very
|
---|
1015 | long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
|
---|
1016 | so) should now no longer crash NASM.
|
---|
1017 |
|
---|
1018 | Fixed a bug involving segfaults on disassembly of MMX instructions,
|
---|
1019 | by changing the meaning of one of the operand-type flags in nasm.h.
|
---|
1020 | This may cause other apparently unrelated MMX problems; it needs to
|
---|
1021 | be tested thoroughly.
|
---|
1022 |
|
---|
1023 | Fixed some buffer overrun problems with large OBJ output files.
|
---|
1024 | Thanks to DJ Delorie for the bug report and fix.
|
---|
1025 |
|
---|
1026 | Made preprocess-only mode actually listen to the %line markers as it
|
---|
1027 | prints them, so that it can report errors more sanely.
|
---|
1028 |
|
---|
1029 | Re-designed the evaluator to keep more sensible track of expressions
|
---|
1030 | involving forward references: can now cope with previously-nightmare
|
---|
1031 | situations such as
|
---|
1032 | mov ax,foo | bar
|
---|
1033 | foo equ 1
|
---|
1034 | bar equ 2
|
---|
1035 |
|
---|
1036 | Added the ALIGN and ALIGNB standard macros.
|
---|
1037 |
|
---|
1038 | Added PIC support in ELF: use of WRT to obtain the four extra
|
---|
1039 | relocation types needed.
|
---|
1040 |
|
---|
1041 | Added the ability for output file formats to define their own
|
---|
1042 | extensions to the GLOBAL, COMMON and EXTERN directives.
|
---|
1043 |
|
---|
1044 | Implemented common-variable alignment, and global-symbol type and
|
---|
1045 | size declarations, in ELF.
|
---|
1046 |
|
---|
1047 | Implemented NEAR and FAR keywords for common variables, plus
|
---|
1048 | far-common element size specification, in OBJ.
|
---|
1049 |
|
---|
1050 | Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
|
---|
1051 | default WRT specification (either a segment or a group).
|
---|
1052 |
|
---|
1053 | Transformed the Unix NASM archive into an auto-configuring package.
|
---|
1054 |
|
---|
1055 | Added a sanity-check for people applying SEG to things which are
|
---|
1056 | already segment bases: this previously went unnoticed by the SEG
|
---|
1057 | processing and caused OBJ-driver panics later.
|
---|
1058 |
|
---|
1059 | Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
|
---|
1060 | type references: OBJ doesn't directly support dword-size segment
|
---|
1061 | base fixups, but as long as the low two bytes of the constant term
|
---|
1062 | are zero, a word-size fixup can be generated instead and it will
|
---|
1063 | work.
|
---|
1064 |
|
---|
1065 | Added the ability to specify sections' alignment requirements in
|
---|
1066 | Win32 object files and pure binary files.
|
---|
1067 |
|
---|
1068 | Added preprocess-time expression evaluation: the %assign (and
|
---|
1069 | %iassign) directive and the bare %if (and %elif) conditional. Added
|
---|
1070 | relational operators to the evaluator, for use only in %if
|
---|
1071 | constructs: the standard relationals = < > <= >= <> (and C-like
|
---|
1072 | synonyms == and !=) plus low-precedence logical operators &&, ^^ and
|
---|
1073 | ||.
|
---|
1074 |
|
---|
1075 | Added a preprocessor repeat construct: %rep / %exitrep / %endrep.
|
---|
1076 |
|
---|
1077 | Added the __FILE__ and __LINE__ standard macros.
|
---|
1078 |
|
---|
1079 | Added a sanity check for number constants being greater than
|
---|
1080 | 0xFFFFFFFF. The warning can be disabled.
|
---|
1081 |
|
---|
1082 | Added the %0 token whereby a variadic multi-line macro can tell how
|
---|
1083 | many parameters it's been given in a specific invocation.
|
---|
1084 |
|
---|
1085 | Added %rotate, allowing multi-line macro parameters to be cycled.
|
---|
1086 |
|
---|
1087 | Added the `*' option for the maximum parameter count on multi-line
|
---|
1088 | macros, allowing them to take arbitrarily many parameters.
|
---|
1089 |
|
---|
1090 | Added the ability for the user-level forms of EXTERN, GLOBAL and
|
---|
1091 | COMMON to take more than one argument.
|
---|
1092 |
|
---|
1093 | Added the IMPORT and EXPORT directives in OBJ format, to deal with
|
---|
1094 | Windows DLLs.
|
---|
1095 |
|
---|
1096 | Added some more preprocessor %if constructs: %ifidn / %ifidni (exact
|
---|
1097 | textual identity), and %ifid / %ifnum / %ifstr (token type testing).
|
---|
1098 |
|
---|
1099 | Added the ability to distinguish SHL AX,1 (the 8086 version) from
|
---|
1100 | SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
|
---|
1101 | be 1).
|
---|
1102 |
|
---|
1103 | Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
|
---|
1104 | with PIC shared library features.
|
---|
1105 |
|
---|
1106 | Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
|
---|
1107 | FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
|
---|
1108 | otherwise accepted standard. The previous behaviour, though it was a
|
---|
1109 | deliberate feature, was a deliberate feature based on a
|
---|
1110 | misunderstanding. Apologies for the inconvenience.
|
---|
1111 |
|
---|
1112 | Improved the flexibility of ABSOLUTE: you can now give it an
|
---|
1113 | expression rather than being restricted to a constant, and it can
|
---|
1114 | take relocatable arguments as well.
|
---|
1115 |
|
---|
1116 | Added the ability for a variable to be declared as EXTERN multiple
|
---|
1117 | times, and the subsequent definitions are just ignored.
|
---|
1118 |
|
---|
1119 | We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
|
---|
1120 | alone on a line (without a following instruction).
|
---|
1121 |
|
---|
1122 | Improved sanity checks on whether the arguments to EXTERN, GLOBAL
|
---|
1123 | and COMMON are valid identifiers.
|
---|
1124 |
|
---|
1125 | Added misc/exebin.mac to allow direct generation of .EXE files by
|
---|
1126 | hacking up an EXE header using DB and DW; also added test/binexe.asm
|
---|
1127 | to demonstrate the use of this. Thanks to Yann Guidon for
|
---|
1128 | contributing the EXE header code.
|
---|
1129 |
|
---|
1130 | ndisasm forgot to check whether the input file had been successfully
|
---|
1131 | opened. Now it does. Doh!
|
---|
1132 |
|
---|
1133 | Added the Cyrix extensions to the MMX instruction set.
|
---|
1134 |
|
---|
1135 | Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
|
---|
1136 | assembled differently. This is important since [ESI+EBP] and
|
---|
1137 | [EBP+ESI] have different default base segment registers.
|
---|
1138 |
|
---|
1139 | Added support for the PharLap OMF extension for 4096-byte segment
|
---|
1140 | alignment.
|
---|
1141 |
|
---|
1142 |
|
---|
1143 | 0.95 released July 1997
|
---|
1144 | -----------------------
|
---|
1145 |
|
---|
1146 | Fixed yet another ELF bug. This one manifested if the user relied on
|
---|
1147 | the default segment, and attempted to define global symbols without
|
---|
1148 | first explicitly declaring the target segment.
|
---|
1149 |
|
---|
1150 | Added makefiles (for NASM and the RDF tools) to build Win32 console
|
---|
1151 | apps under Symantec C++. Donated by Mark Junker.
|
---|
1152 |
|
---|
1153 | Added `macros.bas' and `insns.bas', QBasic versions of the Perl
|
---|
1154 | scripts that convert `standard.mac' to `macros.c' and convert
|
---|
1155 | `insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
|
---|
1156 | Junker.
|
---|
1157 |
|
---|
1158 | Changed the diassembled forms of the conditional instructions so
|
---|
1159 | that JB is now emitted as JC, and other similar changes. Suggested
|
---|
1160 | list by Ulrich Doewich.
|
---|
1161 |
|
---|
1162 | Added `@' to the list of valid characters to begin an identifier
|
---|
1163 | with.
|
---|
1164 |
|
---|
1165 | Documentary changes, notably the addition of the `Common Problems'
|
---|
1166 | section in nasm.doc.
|
---|
1167 |
|
---|
1168 | Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
|
---|
1169 |
|
---|
1170 | Fixed a bug in perm_copy() in labels.c which was causing exceptions
|
---|
1171 | in cleanup_labels() on some systems.
|
---|
1172 |
|
---|
1173 | Positivity sanity check in TIMES argument changed from a warning to
|
---|
1174 | an error following a further complaint.
|
---|
1175 |
|
---|
1176 | Changed the acceptable limits on byte and word operands to allow
|
---|
1177 | things like `~10111001b' to work.
|
---|
1178 |
|
---|
1179 | Fixed a major problem in the preprocessor which caused seg-faults if
|
---|
1180 | macro definitions contained blank lines or comment-only lines.
|
---|
1181 |
|
---|
1182 | Fixed inadequate error checking on the commas separating the
|
---|
1183 | arguments to `db', `dw' etc.
|
---|
1184 |
|
---|
1185 | Fixed a crippling bug in the handling of macros with operand counts
|
---|
1186 | defined with a `+' modifier.
|
---|
1187 |
|
---|
1188 | Fixed a bug whereby object file formats which stored the input file
|
---|
1189 | name in the output file (such as OBJ and COFF) weren't doing so
|
---|
1190 | correctly when the output file name was specified on the command
|
---|
1191 | line.
|
---|
1192 |
|
---|
1193 | Removed [INC] and [INCLUDE] support for good, since they were
|
---|
1194 | obsolete anyway.
|
---|
1195 |
|
---|
1196 | Fixed a bug in OBJ which caused all fixups to be output in 16-bit
|
---|
1197 | (old-format) FIXUPP records, rather than putting the 32-bit ones in
|
---|
1198 | FIXUPP32 (new-format) records.
|
---|
1199 |
|
---|
1200 | Added, tentatively, OS/2 object file support (as a minor variant on
|
---|
1201 | OBJ).
|
---|
1202 |
|
---|
1203 | Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
|
---|
1204 |
|
---|
1205 | Removed a spurious second fclose() on the output file.
|
---|
1206 |
|
---|
1207 | Added the `-s' command line option to redirect all messages which
|
---|
1208 | would go to stderr (errors, help text) to stdout instead.
|
---|
1209 |
|
---|
1210 | Added the `-w' command line option to selectively suppress some
|
---|
1211 | classes of assembly warning messages.
|
---|
1212 |
|
---|
1213 | Added the `-p' pre-include and `-d' pre-define command-line options.
|
---|
1214 |
|
---|
1215 | Added an include file search path: the `-i' command line option.
|
---|
1216 |
|
---|
1217 | Fixed a silly little preprocessor bug whereby starting a line with a
|
---|
1218 | `%!' environment-variable reference caused an `unknown directive'
|
---|
1219 | error.
|
---|
1220 |
|
---|
1221 | Added the long-awaited listing file support: the `-l' command line
|
---|
1222 | option.
|
---|
1223 |
|
---|
1224 | Fixed a problem with OBJ format whereby, in the absence of any
|
---|
1225 | explicit segment definition, non-global symbols declared in the
|
---|
1226 | implicit default segment generated spurious EXTDEF records in the
|
---|
1227 | output.
|
---|
1228 |
|
---|
1229 | Added the NASM environment variable.
|
---|
1230 |
|
---|
1231 | From this version forward, Win32 console-mode binaries will be
|
---|
1232 | included in the DOS distribution in addition to the 16-bit binaries.
|
---|
1233 | Added Makefile.vc for this purpose.
|
---|
1234 |
|
---|
1235 | Added `return 0;' to test/objlink.c to prevent compiler warnings.
|
---|
1236 |
|
---|
1237 | Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
|
---|
1238 |
|
---|
1239 | Added an alternative memory-reference syntax in which prefixing an
|
---|
1240 | operand with `&' is equivalent to enclosing it in square brackets,
|
---|
1241 | at the request of Fox Cutter.
|
---|
1242 |
|
---|
1243 | Errors in pass two now cause the program to return a non-zero error
|
---|
1244 | code, which they didn't before.
|
---|
1245 |
|
---|
1246 | Fixed the single-line macro cycle detection, which didn't work at
|
---|
1247 | all on macros with no parameters (caused an infinite loop). Also
|
---|
1248 | changed the behaviour of single-line macro cycle detection to work
|
---|
1249 | like cpp, so that macros like `extrn' as given in the documentation
|
---|
1250 | can be implemented.
|
---|
1251 |
|
---|
1252 | Fixed the implementation of WRT, which was too restrictive in that
|
---|
1253 | you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
|
---|
1254 | a relocatable reference.
|
---|
1255 |
|
---|
1256 |
|
---|
1257 | 0.94 released April 1997
|
---|
1258 | ------------------------
|
---|
1259 |
|
---|
1260 | Major item: added the macro processor.
|
---|
1261 |
|
---|
1262 | Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
|
---|
1263 | reorganised CMPXCHG instruction into early-486 and Pentium forms.
|
---|
1264 | Thanks to Thobias Jones for the information.
|
---|
1265 |
|
---|
1266 | Fixed two more stupid bugs in ELF, which were causing `ld' to
|
---|
1267 | continue to seg-fault in a lot of non-trivial cases.
|
---|
1268 |
|
---|
1269 | Fixed a seg-fault in the label manager.
|
---|
1270 |
|
---|
1271 | Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
|
---|
1272 | the only option for BCD loads/stores in any case.
|
---|
1273 |
|
---|
1274 | Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
|
---|
1275 | anyone bothers to provide it. Previously they complained unless no
|
---|
1276 | keyword at all was present.
|
---|
1277 |
|
---|
1278 | Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
|
---|
1279 | vestige of a bug that I thought had been fixed in 0.92. This was
|
---|
1280 | fixed, hopefully for good this time...
|
---|
1281 |
|
---|
1282 | Another minor phase error (insofar as a phase error can _ever_ be
|
---|
1283 | minor) fixed, this one occurring in code of the form
|
---|
1284 | rol ax,forward_reference
|
---|
1285 | forward_reference equ 1
|
---|
1286 |
|
---|
1287 | The number supplied to TIMES is now sanity-checked for positivity,
|
---|
1288 | and also may be greater than 64K (which previously didn't work on
|
---|
1289 | 16-bit systems).
|
---|
1290 |
|
---|
1291 | Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
|
---|
1292 |
|
---|
1293 | Added the INCBIN pseudo-opcode.
|
---|
1294 |
|
---|
1295 | Due to the advent of the preprocessor, the [INCLUDE] and [INC]
|
---|
1296 | directives have become obsolete. They are still supported in this
|
---|
1297 | version, with a warning, but won't be in the next.
|
---|
1298 |
|
---|
1299 | Fixed a bug in OBJ format, which caused incorrect object records to
|
---|
1300 | be output when absolute labels were made global.
|
---|
1301 |
|
---|
1302 | Updates to RDOFF subdirectory, and changes to outrdf.c.
|
---|
1303 |
|
---|
1304 |
|
---|
1305 | 0.93 released January 1997
|
---|
1306 | --------------------------
|
---|
1307 |
|
---|
1308 | This release went out in a great hurry after semi-crippling bugs
|
---|
1309 | were found in 0.92.
|
---|
1310 |
|
---|
1311 | Really _did_ fix the stack overflows this time. *blush*
|
---|
1312 |
|
---|
1313 | Had problems with EA instruction sizes changing between passes, when
|
---|
1314 | an offset contained a forward reference and so 4 bytes were
|
---|
1315 | allocated for the offset in pass one; by pass two the symbol had
|
---|
1316 | been defined and happened to be a small absolute value, so only 1
|
---|
1317 | byte got allocated, causing instruction size mismatch between passes
|
---|
1318 | and hence incorrect address calculations. Fixed.
|
---|
1319 |
|
---|
1320 | Stupid bug in the revised ELF section generation fixed (associated
|
---|
1321 | string-table section for .symtab was hard-coded as 7, even when this
|
---|
1322 | didn't fit with the real section table). Was causing `ld' to
|
---|
1323 | seg-fault under Linux.
|
---|
1324 |
|
---|
1325 | Included a new Borland C makefile, Makefile.bc2, donated by Fox
|
---|
1326 | Cutter <[email protected]>.
|
---|
1327 |
|
---|
1328 |
|
---|
1329 | 0.92 released January 1997
|
---|
1330 | --------------------------
|
---|
1331 |
|
---|
1332 | The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
|
---|
1333 | fixed. This also affected the LCC driver.
|
---|
1334 |
|
---|
1335 | Fixed a bug regarding 32-bit effective addresses of the form
|
---|
1336 | [other_register+ESP].
|
---|
1337 |
|
---|
1338 | Documentary changes, notably documentation of the fact that Borland
|
---|
1339 | Win32 compilers use `obj' rather than `win32' object format.
|
---|
1340 |
|
---|
1341 | Fixed the COMENT record in OBJ files, which was formatted
|
---|
1342 | incorrectly.
|
---|
1343 |
|
---|
1344 | Fixed a bug causing segfaults in large RDF files.
|
---|
1345 |
|
---|
1346 | OBJ format now strips initial periods from segment and group
|
---|
1347 | definitions, in order to avoid complications with the local label
|
---|
1348 | syntax.
|
---|
1349 |
|
---|
1350 | Fixed a bug in disassembling far calls and jumps in NDISASM.
|
---|
1351 |
|
---|
1352 | Added support for user-defined sections in COFF and ELF files.
|
---|
1353 |
|
---|
1354 | Compiled the DOS binaries with a sensible amount of stack, to
|
---|
1355 | prevent stack overflows on any arithmetic expression containing
|
---|
1356 | parentheses.
|
---|
1357 |
|
---|
1358 | Fixed a bug in handling of files that do not terminate in a newline.
|
---|
1359 |
|
---|
1360 |
|
---|
1361 | 0.91 released November 1996
|
---|
1362 | ---------------------------
|
---|
1363 |
|
---|
1364 | Loads of bug fixes.
|
---|
1365 | Support for RDF added.
|
---|
1366 | Support for DBG debugging format added.
|
---|
1367 | Support for 32-bit extensions to Microsoft OBJ format added.
|
---|
1368 | Revised for Borland C: some variable names changed, makefile added.
|
---|
1369 | LCC support revised to actually work.
|
---|
1370 | JMP/CALL NEAR/FAR notation added.
|
---|
1371 | `a16', `o16', `a32' and `o32' prefixes added.
|
---|
1372 | Range checking on short jumps implemented.
|
---|
1373 | MMX instruction support added.
|
---|
1374 | Negative floating point constant support added.
|
---|
1375 | Memory handling improved to bypass 64K barrier under DOS.
|
---|
1376 | $ prefix to force treatment of reserved words as identifiers added.
|
---|
1377 | Default-size mechanism for object formats added.
|
---|
1378 | Compile-time configurability added.
|
---|
1379 | `#', `@', `~' and `?' are now valid characters in labels.
|
---|
1380 | `-e' and `-k' options in NDISASM added.
|
---|
1381 |
|
---|
1382 |
|
---|
1383 | 0.90 released October 1996
|
---|
1384 | --------------------------
|
---|
1385 |
|
---|
1386 | First release version. First support for object file output. Other
|
---|
1387 | changes from previous version (0.3x) too numerous to document.
|
---|