NASM - The Netwide Assembler (original) (raw)

Appendix C: NASM Version History

C.1. NASM 3 Series

The NASM 3 series added support for the APX instruction encodings (extended GPRs), as well as preprocessor enhancements meant to make evolving code simpler.

It is the production version of NASM since 2025.

C.1.1. Version 3.01

C.1.2. Version 3.00

C.2. NASM 2 Series

The NASM 2 series added support for x86-64, and was the production versions of NASM from 2007 to 2025.

C.2.1. Version 2.16.03

This is a source build machinery and documentation update only. There are no functionality changes.

C.2.2. Version 2.16.02

C.2.3. Version 2.16.01

This is a documentation update release only. There are no functionality changes.

C.2.4. Version 2.16

C.2.5. Version 2.15.05

C.2.6. Version 2.15.04

C.2.7. Version 2.15.03

C.2.8. Version 2.15.02

C.2.9. Version 2.15.01

C.2.10. Version 2.15

C.2.11. Version 2.14.03

C.2.12. Version 2.14.02

C.2.13. Version 2.14.01

C.2.14. Version 2.14

C.2.15. Version 2.13.03

C.2.16. Version 2.13.02

C.2.17. Version 2.13.01

C.2.18. Version 2.13

C.2.19. Version 2.12.02

C.2.20. Version 2.12.01

C.2.21. Version 2.12

C.2.22. Version 2.11.09

C.2.23. Version 2.11.08

C.2.24. Version 2.11.07

C.2.25. Version 2.11.06

C.2.26. Version 2.11.05

C.2.27. Version 2.11.04

C.2.28. Version 2.11.03

C.2.29. Version 2.11.02

C.2.30. Version 2.11.01

C.2.31. Version 2.11

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

C.2.32. Version 2.10.09

C.2.33. Version 2.10.08

C.2.34. Version 2.10.07

C.2.35. Version 2.10.06

C.2.36. Version 2.10.05

C.2.37. Version 2.10.04

C.2.38. Version 2.10.03

C.2.39. Version 2.10.02

C.2.40. Version 2.10.01

C.2.41. Version 2.10

C.2.42. Version 2.09.10

C.2.43. Version 2.09.09

C.2.44. Version 2.09.08

C.2.45. Version 2.09.07

C.2.46. Version 2.09.06

C.2.47. Version 2.09.05

C.2.48. Version 2.09.04

C.2.49. Version 2.09.03

C.2.50. Version 2.09.02

C.2.51. Version 2.09.01

C.2.52. Version 2.09

C.2.53. Version 2.08.02

C.2.54. Version 2.08.01

C.2.55. Version 2.08

C.2.56. Version 2.07

C.2.57. Version 2.06

C.2.58. Version 2.05.01

C.2.59. Version 2.05

C.2.60. Version 2.04

C.2.61. Version 2.03.01

C.2.62. Version 2.03

C.2.63. Version 2.02

C.2.64. Version 2.01

C.2.65. Version 2.00

C.3. NASM 0.98 Series

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

C.3.1. Version 0.98.39

C.3.2. Version 0.98.38

C.3.3. Version 0.98.37

C.3.4. Version 0.98.36

C.3.5. Version 0.98.35

C.3.6. Version 0.98.34

C.3.7. Version 0.98.33

C.3.8. Version 0.98.32

C.3.9. Version 0.98.31

C.3.10. Version 0.98.30

C.3.11. Version 0.98.28

C.3.12. Version 0.98.26

C.3.13. Version 0.98.25alt

C.3.14. Version 0.98.25

C.3.15. Version 0.98.24p1

C.3.16. Version 0.98.24

C.3.17. Version 0.98.23

C.3.18. Version 0.98.22

C.3.19. Version 0.98.21

C.3.20. Version 0.98.20

C.3.21. Version 0.98.19

C.3.22. Version 0.98.18

C.3.23. Version 0.98.17

C.3.24. Version 0.98.16

C.3.25. Version 0.98.15

C.3.26. Version 0.98.14

C.3.27. Version 0.98.13

C.3.28. Version 0.98.12

C.3.29. Version 0.98.11

C.3.30. Version 0.98.10

C.3.31. Version 0.98.09

C.3.32. Version 0.98.08

C.3.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

C.3.34. Version 0.98.07 released 01/28/01

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

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

C.3.37. Version 0.98p1

C.3.38. Version 0.98bf (bug-fixed)

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

C.3.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

Same change was applied to:%push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine,%assign,%iassign,%undef

will produce a warning, but if we remove the first line we won't see it anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor eats such constructs without warnings at all).

After first expansion, third line will become "_myfunc". After this expansion is performed again so it becomes "_otherunc".

will expand correctly the fourth line to [esp]; if we'll define another %$a inside the "inner" context, it will take precedence over outer definition. However, this modification has been applied only to expand_smacro and not to smacro_define: as a consequence expansion looks in outer contexts, but %ifdef won't look in outer contexts.
This behaviour is needed because we don't want nested contexts to act on already defined local macros. Example:
%define %$arg1 [esp+4]
test eax,eax
if nz
mov eax,%$arg1
endif
In this example the "if" mmacro enters into the "if" context, so %$arg1 is not valid anymore inside "if". Of course it could be worked around by using explicitly %$$arg1 but this is ugly IMHO.

C.3.41. Version 0.98

All changes since NASM 0.98p3 have been produced by H. Peter Anvin hpa@zytor.com.

C.3.42. Version 0.98p9

C.3.43. Version 0.98p8

C.3.44. Version 0.98p7

C.3.45. Version 0.98p6

C.3.46. Version 0.98p3.7

C.3.47. Version 0.98p3.6

C.3.48. Version 0.98p3.5

C.3.49. Version 0.98p3.4

C.3.50. Version 0.98p3.3

C.3.51. Version 0.98p3.2

C.3.52. Version 0.98p3-hpa

C.3.53. Version 0.98 pre-release 3

C.3.54. Version 0.98 pre-release 2

C.3.55. Version 0.98 pre-release 1

C.4. NASM 0.90-0.97

Revisions before 0.98.

C.4.1. Version 0.97 released December 1997

C.4.2. Version 0.96 released November 1997

C.4.3. Version 0.95 released July 1997

C.4.4. Version 0.94 released April 1997

C.4.5. Version 0.93 released January 1997

This release went out in a great hurry after semi-crippling bugs were found in 0.92.

C.4.6. Version 0.92 released January 1997

C.4.7. Version 0.91 released November 1996

C.4.8. Version 0.90 released October 1996

First release version. First support for object file output. Other changes from previous version (0.3x) too numerous to document.