The Netwide Assembler: NASM

Previous Chapter | Contents | Index

Appendix C: NASM Version History

C.1 NASM 2 Series

The NASM 2 series supports x86-64, and is the production version of NASM since 2007.

C.1.1 Version 2.12.01

C.1.2 Version 2.12

C.1.3 Version 2.11.09

C.1.4 Version 2.11.08

C.1.5 Version 2.11.07

C.1.6 Version 2.11.06

C.1.7 Version 2.11.05

C.1.8 Version 2.11.04

      vmovdqu32 [0xabcd]{k1}, zmm0

C.1.9 Version 2.11.03

C.1.10 Version 2.11.02

C.1.11 Version 2.11.01

     vblendvpd xmm2,xmm1,xmm0      ; Last operand is fixed xmm0 
     vblendvpd xmm2,xmm1           ; Implicit xmm0 omitted

C.1.12 Version 2.11

 - opmask 
     VDIVPD zmm0{k1}{z}, zmm1, zmm3  ; conditional vector operation 
                                     ; using opmask k1. 
                                     ; {z} is for zero-masking 
 - broadcasting 
     VDIVPS zmm4, zmm5, [rbx]{1to16} ; load single-precision float and 
                                     ; replicate it 16 times. 32 * 16 = 512 
 - embedded rounding 
     VCVTSI2SD xmm6, xmm7, {rz-sae}, rax ; round toward zero. note that it 
                                      ; is used as if a separate operand. 
                                      ; it comes after the last SIMD operand

     mov eax,[eax+8,ecx*4]   ; eax=base, ecx=index, 4=scale, 8=disp

This is expected to be most useful for the MPX instructions.

     mov eax,[nosplit eax]       ; eax as base register 
     mov eax,[nosplit eax*1]     ; eax as index register

C.1.13 Version 2.10.09

C.1.14 Version 2.10.08

C.1.15 Version 2.10.07

C.1.16 Version 2.10.06

C.1.17 Version 2.10.05

C.1.18 Version 2.10.04

   %define N 1e%++%+ 5 
           dd N, 1e+5

C.1.19 Version 2.10.03

XRELEASE MOV [absolute],AL

Previous versions would incorrectly generate F3 A2 for this instruction and issue a warning; correct behavior is to emit F3 88 05.

C.1.20 Version 2.10.02

C.1.21 Version 2.10.01

C.1.22 Version 2.10

     mov r32,imm32                   ;  5 bytes 
     mov r64,imm32                   ;  7 bytes 
     mov r64,imm64                   ; 10 bytes

To force a specific form, use the STRICT keyword, see section 3.7.

C.1.23 Version 2.09.10

C.1.24 Version 2.09.09

C.1.25 Version 2.09.08

C.1.26 Version 2.09.07

C.1.27 Version 2.09.06

C.1.28 Version 2.09.05

C.1.29 Version 2.09.04

C.1.30 Version 2.09.03

C.1.31 Version 2.09.02

C.1.32 Version 2.09.01

C.1.33 Version 2.09

C.1.34 Version 2.08.02

C.1.35 Version 2.08.01

C.1.36 Version 2.08

C.1.37 Version 2.07

C.1.38 Version 2.06

C.1.39 Version 2.05.01

C.1.40 Version 2.05

C.1.41 Version 2.04

C.1.42 Version 2.03.01

C.1.43 Version 2.03

C.1.44 Version 2.02

C.1.45 Version 2.01

C.1.46 Version 2.00

C.2 NASM 0.98 Series

The 0.98 series was the production versions of NASM from 1999 to 2007.

C.2.1 Version 0.98.39

C.2.2 Version 0.98.38

C.2.3 Version 0.98.37

C.2.4 Version 0.98.36

C.2.5 Version 0.98.35

C.2.6 Version 0.98.34

C.2.7 Version 0.98.33

C.2.8 Version 0.98.32

C.2.9 Version 0.98.31

C.2.10 Version 0.98.30

C.2.11 Version 0.98.28

C.2.12 Version 0.98.26

C.2.13 Version 0.98.25alt

C.2.14 Version 0.98.25

C.2.15 Version 0.98.24p1

C.2.16 Version 0.98.24

C.2.17 Version 0.98.23

C.2.18 Version 0.98.22

C.2.19 Version 0.98.21

C.2.20 Version 0.98.20

C.2.21 Version 0.98.19

C.2.22 Version 0.98.18

C.2.23 Version 0.98.17

C.2.24 Version 0.98.16

C.2.25 Version 0.98.15

C.2.26 Version 0.98.14

C.2.27 Version 0.98.13

C.2.28 Version 0.98.12

C.2.29 Version 0.98.11

C.2.30 Version 0.98.10

C.2.31 Version 0.98.09

C.2.32 Version 0.98.08

C.2.33 Version 0.98.09b with John Coffman patches released 28-Oct-2001

Changes from 0.98.07 release to 98.09b as of 28-Oct-2001

-O0 strict two-pass assembly, JMP and Jcc are handled more like 0.98, except that back- ward JMPs are short, if possible.

-O1 strict two-pass assembly, but forward branches are assembled with code guaranteed to reach; may produce larger code than -O0, but will produce successful assembly more often if branch offset sizes are not specified.

-O2 multi-pass optimization, minimize branch offsets; also will minimize signed immed- iate bytes, overriding size specification.

-O3 like -O2, but more passes taken, if needed

C.2.34 Version 0.98.07 released 01/28/01

01/28/01

C.2.35 Version 0.98.06f released 01/18/01

C.2.36 Version 0.98.06e released 01/09/01

01/09/01

08/07/00

C.2.37 Version 0.98p1

C.2.38 Version 0.98bf (bug-fixed)

C.2.39 Version 0.98.03 with John Coffman's changes released 27-Jul-2000

This feature is controlled by a new command-line switch: "O", (upper case letter O). "-O0" reverts the assembler to no extra optimization passes, "-O1" allows up to 5 extra passes, and "-O2"(default), allows up to 10 extra optimization passes.

C.2.40 Version 0.98.03

"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for historical reasons: 0.98.02 was trashed." --John Coffman <johninsd@san.rr.com>, 27-Jul-2000

     %assign ofs     0 

     %macro  arg     1 
             %xdefine %1 dword [esp+ofs] 
             %assign ofs ofs+4 
     %endmacro

     %macro  abc     1 
             %define %1 hello 
     %endm 

     abc     %$here 
     %$here

Now last line will be expanded into "hello" as expected. This also allows for lots of goodies, a good example are extended "proc" macros included in this archive.

     %ifdef %$abc 
     %endif

to work without warnings even in no context.