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