- Chapter 1
- Contents
- Index

# NASM - The Netwide Assembler

version 2.16.03

This manual documents NASM, the Netwide Assembler: an assembler targeting the Intel x86 series of processors, with portable source.

1. Chapter 1: Introduction
   1. Section 1.1: What Is NASM?
      1. Section 1.1.1: License
2. Chapter 2: Running NASM
   1. Section 2.1: NASM Command-Line Syntax
      1. Section 2.1.1: The `-o` Option: Output File Name
      2. Section 2.1.2: The `-f` Option: Output File Format
      3. Section 2.1.3: The `-l` Option: Generating a Listing File
      4. Section 2.1.4: The `-L` Option: Additional or Modified Listing Info
      5. Section 2.1.5: The `-M` Option: Generate Makefile Dependencies
      6. Section 2.1.6: The `-MG` Option: Generate Makefile Dependencies
      7. Section 2.1.7: The `-MF` Option: Set Makefile Dependency File
      8. Section 2.1.8: The `-MD` Option: Assemble and Generate Dependencies
      9. Section 2.1.9: The `-MT` Option: Dependency Target Name
      10. Section 2.1.10: The `-MQ` Option: Dependency Target Name (Quoted)
      11. Section 2.1.11: The `-MP` Option: Emit Phony Makefile Targets
      12. Section 2.1.12: The `-MW` Option: Watcom `make` quoting style
      13. Section 2.1.13: The `-F` Option: Debug Information Format
      14. Section 2.1.14: The `-g` Option: Enabling Debug Information.
      15. Section 2.1.15: The `-X` Option: Selecting an Error Reporting Format
      16. Section 2.1.16: The `-Z` Option: Send Errors to a File
      17. Section 2.1.17: The `-s` Option: Send Errors to `stdout`
      18. Section 2.1.18: The `-i` Option: Include File Search Directories
      19. Section 2.1.19: The `-p` Option: Pre-Include a File
      20. Section 2.1.20: The `-d` Option: Pre-Define a Macro
      21. Section 2.1.21: The `-u` Option: Undefine a Macro
      22. Section 2.1.22: The `-E` Option: Preprocess Only
      23. Section 2.1.23: The `-a` Option: Suppress Preprocessing
      24. Section 2.1.24: The `-O` Option: Multipass Optimization
      25. Section 2.1.25: The `-t` Option: TASM Compatibility Mode
      26. Section 2.1.26: The `-w` and `-W` Options: Enable or Disable Assembly Warnings
      27. Section 2.1.27: The `-v` Option: Display Version Info
      28. Section 2.1.28: The `--(g|l)prefix`, `--(g|l)postfix` Options.
      29. Section 2.1.29: The `--pragma` Option
      30. Section 2.1.30: The `--before` Option
      31. Section 2.1.31: The `--limit-X` Option
      32. Section 2.1.32: The `--keep-all` Option
      33. Section 2.1.33: The `--no-line` Option
      34. Section 2.1.34: The `--reproducible` Option
      35. Section 2.1.35: The `NASMENV` Environment Variable
   2. Section 2.2: Quick Start for MASM Users
      1. Section 2.2.1: NASM Is Case-Sensitive
      2. Section 2.2.2: NASM Requires Square Brackets For Memory References
      3. Section 2.2.3: NASM Doesn't Store Variable Types
      4. Section 2.2.4: NASM Doesn't `ASSUME`
      5. Section 2.2.5: NASM Doesn't Support Memory Models
      6. Section 2.2.6: Floating-Point Differences
      7. Section 2.2.7: Other Differences
      8. Section 2.2.8: MASM compatibility package
3. Chapter 3: The NASM Language
   1. Section 3.1: Layout of a NASM Source Line
   2. Section 3.2: Pseudo-Instructions
      1. Section 3.2.1: `D` x: Declaring Initialized Data
      2. Section 3.2.2: `RESB` and Friends: Declaring Uninitialized Data
      3. Section 3.2.3: `INCBIN`: Including External Binary Files
      4. Section 3.2.4: `EQU`: Defining Constants
      5. Section 3.2.5: `TIMES`: Repeating Instructions or Data
   3. Section 3.3: Effective Addresses
   4. Section 3.4: Constants
      1. Section 3.4.1: Numeric Constants
      2. Section 3.4.2: Character Strings
      3. Section 3.4.3: Character Constants
      4. Section 3.4.4: String Constants
      5. Section 3.4.5: Unicode Strings
      6. Section 3.4.6: Floating-Point Constants
      7. Section 3.4.7: Packed BCD Constants
   5. Section 3.5: Expressions
      1. Section 3.5.1: `?` ... `:`: Conditional Operator
      2. Section 3.5.2: : `||`: Boolean OR Operator
      3. Section 3.5.3: : `^^`: Boolean XOR Operator
      4. Section 3.5.4: : `&&`: Boolean AND Operator
      5. Section 3.5.5: : Comparison Operators
      6. Section 3.5.6: `|`: Bitwise OR Operator
      7. Section 3.5.7: `^`: Bitwise XOR Operator
      8. Section 3.5.8: `&`: Bitwise AND Operator
      9. Section 3.5.9: Bit Shift Operators
      10. Section 3.5.10: `+` and `-`: Addition and Subtraction Operators
      11. Section 3.5.11: Multiplication, Division and Modulo
      12. Section 3.5.12: Unary Operators
   6. Section 3.6: `SEG` and `WRT`
   7. Section 3.7: `STRICT`: Inhibiting Optimization
   8. Section 3.8: Critical Expressions
   9. Section 3.9: Local Labels
4. Chapter 4: The NASM Preprocessor
   1. Section 4.1: Preprocessor Expansions
      1. Section 4.1.1: Continuation Line Collapsing
      2. Section 4.1.2: Comment Removal
      3. Section 4.1.3: `%line` directives
      4. Section 4.1.4: Conditionals, Loops and Multi-Line Macro Definitions
      5. Section 4.1.5: Directives processing
      6. Section 4.1.6: Inline expansions and other directives
      7. Section 4.1.7: Multi-Line Macro Expansion
      8. Section 4.1.8: Detokenization
   2. Section 4.2: Single-Line Macros
      1. Section 4.2.1: The Normal Way: `%define`
      2. Section 4.2.2: Resolving `%define`: `%xdefine`
      3. Section 4.2.3: Macro Indirection: `%[...]`
      4. Section 4.2.4: Concatenating Single Line Macro Tokens: `%+`
      5. Section 4.2.5: The Macro Name Itself: `%?` and `%??`
      6. Section 4.2.6: The Single-Line Macro Name: `%*?` and `%*??`
      7. Section 4.2.7: Undefining Single-Line Macros: `%undef`
      8. Section 4.2.8: Preprocessor Variables: `%assign`
      9. Section 4.2.9: Defining Strings: `%defstr`
      10. Section 4.2.10: Defining Tokens: `%deftok`
      11. Section 4.2.11: Defining Aliases: `%defalias`
      12. Section 4.2.12: Conditional Comma Operator: `%,`
   3. Section 4.3: String Manipulation in Macros
      1. Section 4.3.1: Concatenating Strings: `%strcat`
      2. Section 4.3.2: String Length: `%strlen`
      3. Section 4.3.3: Extracting Substrings: `%substr`
   4. Section 4.4: Preprocessor Functions
      1. Section 4.4.1: `%abs()` Function
      2. Section 4.4.2: `%cond()` Function
      3. Section 4.4.3: `%count()` Function
      4. Section 4.4.4: `%eval()` Function
      5. Section 4.4.5: `%hex()` Function
      6. Section 4.4.6: `%is()` Family Functions
      7. Section 4.4.7: `%map()` Function
      8. Section 4.4.8: `%num()` Function
      9. Section 4.4.9: `%sel()` Function
      10. Section 4.4.10: `%str()` Function
      11. Section 4.4.11: `%strcat()` Function
      12. Section 4.4.12: `%strlen()` Function
      13. Section 4.4.13: `%substr()` Function
      14. Section 4.4.14: `%tok()` function
   5. Section 4.5: Multi-Line Macros: `%macro`
      1. Section 4.5.1: Overloading Multi-Line Macros
      2. Section 4.5.2: Macro-Local Labels
      3. Section 4.5.3: Greedy Macro Parameters
      4. Section 4.5.4: Macro Parameters Range
      5. Section 4.5.5: Default Macro Parameters
      6. Section 4.5.6: `%0`: Macro Parameter Counter
      7. Section 4.5.7: `%00`: Label Preceding Macro
      8. Section 4.5.8: `%rotate`: Rotating Macro Parameters
      9. Section 4.5.9: Concatenating Macro Parameters
      10. Section 4.5.10: Condition Codes as Macro Parameters
      11. Section 4.5.11: Disabling Listing Expansion
      12. Section 4.5.12: Undefining Multi-Line Macros: `%unmacro`
   6. Section 4.6: Conditional Assembly
      1. Section 4.6.1: `%ifdef`: Testing Single-Line Macro Existence
      2. Section 4.6.2: `%ifmacro`: Testing Multi-Line Macro Existence
      3. Section 4.6.3: `%ifctx`: Testing the Context Stack
      4. Section 4.6.4: `%if`: Testing Arbitrary Numeric Expressions
      5. Section 4.6.5: `%ifidn` and `%ifidni`: Testing Exact Text Identity
      6. Section 4.6.6: `%ifid`, `%ifnum`, `%ifstr`: Testing Token Types
      7. Section 4.6.7: `%iftoken`: Test for a Single Token
      8. Section 4.6.8: `%ifempty`: Test for Empty Expansion
      9. Section 4.6.9: `%ifenv`: Test If Environment Variable Exists
   7. Section 4.7: Preprocessor Loops: `%rep`
   8. Section 4.8: Source Files and Dependencies
      1. Section 4.8.1: `%include`: Including Other Files
      2. Section 4.8.2: `%pathsearch`: Search the Include Path
      3. Section 4.8.3: `%depend`: Add Dependent Files
      4. Section 4.8.4: `%use`: Include Standard Macro Package
   9. Section 4.9: The Context Stack
      1. Section 4.9.1: `%push` and `%pop`: Creating and Removing Contexts
      2. Section 4.9.2: Context-Local Labels
      3. Section 4.9.3: Context-Local Single-Line Macros
      4. Section 4.9.4: Context Fall-Through Lookup (deprecated)
      5. Section 4.9.5: `%repl`: Renaming a Context
      6. Section 4.9.6: Example Use of the Context Stack: Block IFs
   10. Section 4.10: Stack Relative Preprocessor Directives
       1. Section 4.10.1: `%arg` Directive
       2. Section 4.10.2: `%stacksize` Directive
       3. Section 4.10.3: `%local` Directive
   11. Section 4.11: Reporting User-Defined Errors: `%error`, `%warning`, `%fatal`
   12. Section 4.12: `%pragma`: Setting Options
       1. Section 4.12.1: Preprocessor Pragmas
   13. Section 4.13: Other Preprocessor Directives
       1. Section 4.13.1: `%line` Directive
       2. Section 4.13.2: `%!`variable: Read an Environment Variable.
       3. Section 4.13.3: `%clear`: Clear All Macro Definitions
5. Chapter 5: Standard Macros
   1. Section 5.1: NASM Version Macros
      1. Section 5.1.1: `__?NASM_VERSION_ID?__`: NASM Version ID
      2. Section 5.1.2: `__?NASM_VER?__`: NASM Version String
   2. Section 5.2: `__?FILE?__` and `__?LINE?__`: File Name and Line Number
   3. Section 5.3: `__?BITS?__`: Current Code Generation Mode
   4. Section 5.4: `__?OUTPUT_FORMAT?__`: Current Output Format
   5. Section 5.5: `__?DEBUG_FORMAT?__`: Current Debug Format
   6. Section 5.6: Assembly Date and Time Macros
   7. Section 5.7: `__?USE_`package`?__`: Package Include Test
   8. Section 5.8: `__?PASS?__`: Assembly Pass
   9. Section 5.9: Structure Data Types
      1. Section 5.9.1: `STRUC` and `ENDSTRUC`: Declaring Structure Data Types
      2. Section 5.9.2: `ISTRUC`, `AT` and `IEND`: Declaring Instances of Structures
   10. Section 5.10: Alignment Control
       1. Section 5.10.1: `ALIGN` and `ALIGNB`: Code and Data Alignment
       2. Section 5.10.2: `SECTALIGN`: Section Alignment
6. Chapter 6: Standard Macro Packages
   1. Section 6.1: `altreg`: Alternate Register Names
   2. Section 6.2: `smartalign`: Smart `ALIGN` Macro
   3. Section 6.3: `fp`: Floating-point macros
   4. Section 6.4: `ifunc`: Integer functions
      1. Section 6.4.1: Integer logarithms
   5. Section 6.5: `masm`: MASM compatibility
7. Chapter 7: Assembler Directives
   1. Section 7.1: `BITS`: Target Processor Mode
      1. Section 7.1.1: `USE16` & `USE32`: Aliases for BITS
   2. Section 7.2: `DEFAULT`: Change the assembler defaults
      1. Section 7.2.1: `REL` & `ABS`: RIP-relative addressing
      2. Section 7.2.2: `BND` & `NOBND`: `BND` prefix
   3. Section 7.3: `SECTION` or `SEGMENT`: Changing and Defining Sections
      1. Section 7.3.1: The `__?SECT?__` Macro
   4. Section 7.4: `ABSOLUTE`: Defining Absolute Labels
   5. Section 7.5: `EXTERN`: Importing Symbols from Other Modules
   6. Section 7.6: `REQUIRED`: Unconditionally Importing Symbols from Other Modules
   7. Section 7.7: `GLOBAL`: Exporting Symbols to Other Modules
   8. Section 7.8: `COMMON`: Defining Common Data Areas
   9. Section 7.9: `STATIC`: Local Symbols within Modules
   10. Section 7.10: `(G|L)PREFIX`, `(G|L)POSTFIX`: Mangling Symbols
   11. Section 7.11: `CPU`: Defining CPU Dependencies
   12. Section 7.12: `FLOAT`: Handling of floating-point constants
   13. Section 7.13: `[WARNING]`: Enable or disable warnings
8. Chapter 8: Output Formats
   1. Section 8.1: `bin`: Flat-Form Binary Output
      1. Section 8.1.1: `ORG`: Binary File Program Origin
      2. Section 8.1.2: `bin` Extensions to the `SECTION` Directive, `bin` extensions to}
      3. Section 8.1.3: Multisection Support for the `bin` Format
      4. Section 8.1.4: Map Files
   2. Section 8.2: `ith`: Intel Hex Output
   3. Section 8.3: `srec`: Motorola S-Records Output
   4. Section 8.4: `obj`: Microsoft OMF Object Files
      1. Section 8.4.1: `obj` Extensions to the `SEGMENT` Directive
      2. Section 8.4.2: `GROUP`: Defining Groups of Segments
      3. Section 8.4.3: `UPPERCASE`: Disabling Case Sensitivity in Output
      4. Section 8.4.4: `IMPORT`: Importing DLL Symbols
      5. Section 8.4.5: `EXPORT`: Exporting DLL Symbols
      6. Section 8.4.6: `..start`: Defining the Program Entry Point
      7. Section 8.4.7: `obj` Extensions to the `EXTERN` Directive
      8. Section 8.4.8: `obj` Extensions to the `COMMON` Directive
      9. Section 8.4.9: Embedded File Dependency Information
   5. Section 8.5: `win32`: Microsoft Win32 Object Files
      1. Section 8.5.1: `win32` Extensions to the `SECTION` Directive
      2. Section 8.5.2: `win32`: Safe Structured Exception Handling
      3. Section 8.5.3: Debugging formats for Windows
   6. Section 8.6: `win64`: Microsoft Win64 Object Files
      1. Section 8.6.1: `win64`: Writing Position-Independent Code
      2. Section 8.6.2: `win64`: Structured Exception Handling
   7. Section 8.7: `coff`: Common Object File Format
   8. Section 8.8: `macho32` and `macho64`: Mach Object File Format
      1. Section 8.8.1: `macho` extensions to the `SECTION` Directive
      2. Section 8.8.2: Thread Local Storage in Mach-O: `macho` special symbols and `WRT`
      3. Section 8.8.3: `macho` specific directive `subsections_via_symbols`
      4. Section 8.8.4: `macho` specific directive `no_dead_strip`
      5. Section 8.8.5: `macho` specific extensions to the `GLOBAL` Directive: `private_extern`
   9. Section 8.9: `elf32`, `elf64`, `elfx32`: Executable and Linkable Format Object Files
      1. Section 8.9.1: ELF specific directive `osabi`
      2. Section 8.9.2: ELF extensions to the `SECTION` Directive
      3. Section 8.9.3: Position-Independent Code: ELF Special Symbols and `WRT`
      4. Section 8.9.4: Thread Local Storage in ELF: `elf` Special Symbols and `WRT`
      5. Section 8.9.5: `elf` Extensions to the `GLOBAL` Directive
      6. Section 8.9.6: `elf` Extensions to the `EXTERN` Directive
      7. Section 8.9.7: `elf` Extensions to the `COMMON` Directive
      8. Section 8.9.8: 16-bit code and ELF
      9. Section 8.9.9: Debug formats and ELF
   10. Section 8.10: `aout`: Linux `a.out` Object Files
   11. Section 8.11: `aoutb`: NetBSD/FreeBSD/OpenBSD `a.out` Object Files
   12. Section 8.12: `as86`: Minix/Linux `as86` Object Files
   13. Section 8.13: `dbg`: Debugging Format
9. Chapter 9: Writing 16-bit Code (DOS, Windows 3/3.1)
   1. Section 9.1: Producing `.EXE` Files
      1. Section 9.1.1: Using the `obj` Format To Generate `.EXE` Files
      2. Section 9.1.2: Using the `bin` Format To Generate `.EXE` Files
   2. Section 9.2: Producing `.COM` Files
      1. Section 9.2.1: Using the `bin` Format To Generate `.COM` Files
      2. Section 9.2.2: Using the `obj` Format To Generate `.COM` Files
   3. Section 9.3: Producing `.SYS` Files
   4. Section 9.4: Interfacing to 16-bit C Programs
      1. Section 9.4.1: External Symbol Names
      2. Section 9.4.2: Memory Models
      3. Section 9.4.3: Function Definitions and Function Calls
      4. Section 9.4.4: Accessing Data Items
      5. Section 9.4.5: `c16.mac`: Helper Macros for the 16-bit C Interface
   5. Section 9.5: Interfacing to Borland Pascal Programs
      1. Section 9.5.1: The Pascal Calling Convention
      2. Section 9.5.2: Borland Pascal Segment Name Restrictions
      3. Section 9.5.3: Using `c16.mac` With Pascal Programs
10. Chapter 10: Writing 32-bit Code (Unix, Win32, DJGPP)
    1. Section 10.1: Interfacing to 32-bit C Programs
       1. Section 10.1.1: External Symbol Names
       2. Section 10.1.2: Function Definitions and Function Calls
       3. Section 10.1.3: Accessing Data Items
       4. Section 10.1.4: `c32.mac`: Helper Macros for the 32-bit C Interface
    2. Section 10.2: Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF Shared Libraries
       1. Section 10.2.1: Obtaining the Address of the GOT
       2. Section 10.2.2: Finding Your Local Data Items
       3. Section 10.2.3: Finding External and Common Data Items
       4. Section 10.2.4: Exporting Symbols to the Library User
       5. Section 10.2.5: Calling Procedures Outside the Library
       6. Section 10.2.6: Generating the Library File
11. Chapter 11: Mixing 16- and 32-bit Code
    1. Section 11.1: Mixed-Size Jumps
    2. Section 11.2: Addressing Between Different-Size Segments
    3. Section 11.3: Other Mixed-Size Instructions
12. Chapter 12: Writing 64-bit Code (Unix, Win64)
    1. Section 12.1: Register Names in 64-bit Mode
    2. Section 12.2: Immediates and Displacements in 64-bit Mode
    3. Section 12.3: Interfacing to 64-bit C Programs (Unix)
    4. Section 12.4: Interfacing to 64-bit C Programs (Win64)
13. Chapter 13: Troubleshooting
    1. Section 13.1: Common Problems
       1. Section 13.1.1: NASM Generates Inefficient Code
       2. Section 13.1.2: My Jumps are Out of Range
       3. Section 13.1.3: `ORG` Doesn't Work
       4. Section 13.1.4: `TIMES` Doesn't Work
14. Appendix A: List of Warning Classes
15. Appendix B: Ndisasm
    1. Section B.1: Introduction
    2. Section B.2: Running NDISASM
       1. Section B.2.1: Specifying the Input Origin
       2. Section B.2.2: Code Following Data: Synchronization
       3. Section B.2.3: Mixed Code and Data: Automatic (Intelligent) Synchronization
       4. Section B.2.4: Other Options
16. Appendix C: NASM Version History
    1. Section C.1: NASM 2 Series
       1. Section C.1.1: Version 2.16.03
       2. Section C.1.2: Version 2.16.02
       3. Section C.1.3: Version 2.16.01
       4. Section C.1.4: Version 2.16
       5. Section C.1.5: Version 2.15.05
       6. Section C.1.6: Version 2.15.04
       7. Section C.1.7: Version 2.15.03
       8. Section C.1.8: Version 2.15.02
       9. Section C.1.9: Version 2.15.01
       10. Section C.1.10: Version 2.15
       11. Section C.1.11: Version 2.14.03
       12. Section C.1.12: Version 2.14.02
       13. Section C.1.13: Version 2.14.01
       14. Section C.1.14: Version 2.14
       15. Section C.1.15: Version 2.13.03
       16. Section C.1.16: Version 2.13.02
       17. Section C.1.17: Version 2.13.01
       18. Section C.1.18: Version 2.13
       19. Section C.1.19: Version 2.12.02
       20. Section C.1.20: Version 2.12.01
       21. Section C.1.21: Version 2.12
       22. Section C.1.22: Version 2.11.09
       23. Section C.1.23: Version 2.11.08
       24. Section C.1.24: Version 2.11.07
       25. Section C.1.25: Version 2.11.06
       26. Section C.1.26: Version 2.11.05
       27. Section C.1.27: Version 2.11.04
       28. Section C.1.28: Version 2.11.03
       29. Section C.1.29: Version 2.11.02
       30. Section C.1.30: Version 2.11.01
       31. Section C.1.31: Version 2.11
       32. Section C.1.32: Version 2.10.09
       33. Section C.1.33: Version 2.10.08
       34. Section C.1.34: Version 2.10.07
       35. Section C.1.35: Version 2.10.06
       36. Section C.1.36: Version 2.10.05
       37. Section C.1.37: Version 2.10.04
       38. Section C.1.38: Version 2.10.03
       39. Section C.1.39: Version 2.10.02
       40. Section C.1.40: Version 2.10.01
       41. Section C.1.41: Version 2.10
       42. Section C.1.42: Version 2.09.10
       43. Section C.1.43: Version 2.09.09
       44. Section C.1.44: Version 2.09.08
       45. Section C.1.45: Version 2.09.07
       46. Section C.1.46: Version 2.09.06
       47. Section C.1.47: Version 2.09.05
       48. Section C.1.48: Version 2.09.04
       49. Section C.1.49: Version 2.09.03
       50. Section C.1.50: Version 2.09.02
       51. Section C.1.51: Version 2.09.01
       52. Section C.1.52: Version 2.09
       53. Section C.1.53: Version 2.08.02
       54. Section C.1.54: Version 2.08.01
       55. Section C.1.55: Version 2.08
       56. Section C.1.56: Version 2.07
       57. Section C.1.57: Version 2.06
       58. Section C.1.58: Version 2.05.01
       59. Section C.1.59: Version 2.05
       60. Section C.1.60: Version 2.04
       61. Section C.1.61: Version 2.03.01
       62. Section C.1.62: Version 2.03
       63. Section C.1.63: Version 2.02
       64. Section C.1.64: Version 2.01
       65. Section C.1.65: Version 2.00
    2. Section C.2: NASM 0.98 Series
       1. Section C.2.1: Version 0.98.39
       2. Section C.2.2: Version 0.98.38
       3. Section C.2.3: Version 0.98.37
       4. Section C.2.4: Version 0.98.36
       5. Section C.2.5: Version 0.98.35
       6. Section C.2.6: Version 0.98.34
       7. Section C.2.7: Version 0.98.33
       8. Section C.2.8: Version 0.98.32
       9. Section C.2.9: Version 0.98.31
       10. Section C.2.10: Version 0.98.30
       11. Section C.2.11: Version 0.98.28
       12. Section C.2.12: Version 0.98.26
       13. Section C.2.13: Version 0.98.25alt
       14. Section C.2.14: Version 0.98.25
       15. Section C.2.15: Version 0.98.24p1
       16. Section C.2.16: Version 0.98.24
       17. Section C.2.17: Version 0.98.23
       18. Section C.2.18: Version 0.98.22
       19. Section C.2.19: Version 0.98.21
       20. Section C.2.20: Version 0.98.20
       21. Section C.2.21: Version 0.98.19
       22. Section C.2.22: Version 0.98.18
       23. Section C.2.23: Version 0.98.17
       24. Section C.2.24: Version 0.98.16
       25. Section C.2.25: Version 0.98.15
       26. Section C.2.26: Version 0.98.14
       27. Section C.2.27: Version 0.98.13
       28. Section C.2.28: Version 0.98.12
       29. Section C.2.29: Version 0.98.11
       30. Section C.2.30: Version 0.98.10
       31. Section C.2.31: Version 0.98.09
       32. Section C.2.32: Version 0.98.08
       33. Section C.2.33: Version 0.98.09b with John Coffman patches released 28-Oct-2001
       34. Section C.2.34: Version 0.98.07 released 01/28/01
       35. Section C.2.35: Version 0.98.06f released 01/18/01
       36. Section C.2.36: Version 0.98.06e released 01/09/01
       37. Section C.2.37: Version 0.98p1
       38. Section C.2.38: Version 0.98bf (bug-fixed)
       39. Section C.2.39: Version 0.98.03 with John Coffman's changes released 27-Jul-2000
       40. Section C.2.40: Version 0.98.03
       41. Section C.2.41: Version 0.98
       42. Section C.2.42: Version 0.98p9
       43. Section C.2.43: Version 0.98p8
       44. Section C.2.44: Version 0.98p7
       45. Section C.2.45: Version 0.98p6
       46. Section C.2.46: Version 0.98p3.7
       47. Section C.2.47: Version 0.98p3.6
       48. Section C.2.48: Version 0.98p3.5
       49. Section C.2.49: Version 0.98p3.4
       50. Section C.2.50: Version 0.98p3.3
       51. Section C.2.51: Version 0.98p3.2
       52. Section C.2.52: Version 0.98p3-hpa
       53. Section C.2.53: Version 0.98 pre-release 3
       54. Section C.2.54: Version 0.98 pre-release 2
       55. Section C.2.55: Version 0.98 pre-release 1
    3. Section C.3: NASM 0.9 Series
       1. Section C.3.1: Version 0.97 released December 1997
       2. Section C.3.2: Version 0.96 released November 1997
       3. Section C.3.3: Version 0.95 released July 1997
       4. Section C.3.4: Version 0.94 released April 1997
       5. Section C.3.5: Version 0.93 released January 1997
       6. Section C.3.6: Version 0.92 released January 1997
       7. Section C.3.7: Version 0.91 released November 1996
       8. Section C.3.8: Version 0.90 released October 1996
17. Appendix D: Building NASM from Source
    1. Section D.1: Building from a Source Archive
    2. Section D.2: Building from the `git` Repository
    3. Section D.3: Building the documentation
18. Appendix E: Contact Information
    1. Section E.1: Website
       1. Section E.1.1: User Forums
       2. Section E.1.2: Development Community
    2. Section E.2: Reporting Bugs
19. Appendix F: Instruction List
    1. Section F.1: Introduction
       1. Section F.1.1: Special instructions (pseudo-ops)
       2. Section F.1.2: Conventional instructions
       3. Section F.1.3: Katmai Streaming SIMD instructions (SSE –– a.k.a. KNI, XMM, MMX2)
       4. Section F.1.4: Introduced in Deschutes but necessary for SSE support
       5. Section F.1.5: XSAVE group (AVX and extended state)
       6. Section F.1.6: Generic memory operations
       7. Section F.1.7: New MMX instructions introduced in Katmai
       8. Section F.1.8: AMD Enhanced 3DNow! (Athlon) instructions
       9. Section F.1.9: Willamette SSE2 Cacheability Instructions
       10. Section F.1.10: Willamette MMX instructions (SSE2 SIMD Integer Instructions)
       11. Section F.1.11: Willamette Streaming SIMD instructions (SSE2)
       12. Section F.1.12: Prescott New Instructions (SSE3)
       13. Section F.1.13: VMX/SVM Instructions
       14. Section F.1.14: Extended Page Tables VMX instructions
       15. Section F.1.15: SEV-SNP AMD instructions
       16. Section F.1.16: Tejas New Instructions (SSSE3)
       17. Section F.1.17: AMD SSE4A
       18. Section F.1.18: New instructions in Barcelona
       19. Section F.1.19: Penryn New Instructions (SSE4.1)
       20. Section F.1.20: Nehalem New Instructions (SSE4.2)
       21. Section F.1.21: Intel SMX
       22. Section F.1.22: Geode (Cyrix) 3DNow! additions
       23. Section F.1.23: Intel new instructions in ???
       24. Section F.1.24: Intel AES instructions
       25. Section F.1.25: Intel AVX AES instructions
       26. Section F.1.26: Intel instruction extension based on pub number 319433-030 dated October 2017
       27. Section F.1.27: Intel AVX instructions
       28. Section F.1.28: Intel Carry-Less Multiplication instructions (CLMUL)
       29. Section F.1.29: Intel AVX Carry-Less Multiplication instructions (CLMUL)
       30. Section F.1.30: Intel Fused Multiply-Add instructions (FMA)
       31. Section F.1.31: Intel post-32 nm processor instructions
       32. Section F.1.32: Supervisor Mode Access Prevention (SMAP)
       33. Section F.1.33: VIA (Centaur) security instructions
       34. Section F.1.34: AMD Lightweight Profiling (LWP) instructions
       35. Section F.1.35: AMD XOP and FMA4 instructions (SSE5)
       36. Section F.1.36: Intel AVX2 instructions
       37. Section F.1.37: Intel Transactional Synchronization Extensions (TSX)
       38. Section F.1.38: Intel BMI1 and BMI2 instructions, AMD TBM instructions
       39. Section F.1.39: Intel Memory Protection Extensions (MPX)
       40. Section F.1.40: Intel SHA acceleration instructions
       41. Section F.1.41: SM3
       42. Section F.1.42: SM4
       43. Section F.1.43: AVX no exception conversions
       44. Section F.1.44: AVX Vector Neural Network Instructions
       45. Section F.1.45: AVX Integer Fused Multiply-Add
       46. Section F.1.46: AVX-512 mask register instructions
       47. Section F.1.47: AVX-512 mask register instructions (aliases requiring explicit size support)
       48. Section F.1.48: AVX-512 instructions
       49. Section F.1.49: Intel memory protection keys for userspace (PKU aka PKEYs)
       50. Section F.1.50: Read Processor ID
       51. Section F.1.51: New memory instructions
       52. Section F.1.52: Processor trace write
       53. Section F.1.53: Instructions from the Intel Instruction Set Extensions,
       54. Section F.1.54: doc 319433-034 May 2018
       55. Section F.1.55: Galois field operations (GFNI)
       56. Section F.1.56: AVX512 Vector Bit Manipulation Instructions 2
       57. Section F.1.57: AVX512 VNNI
       58. Section F.1.58: AVX512 Bit Algorithms
       59. Section F.1.59: AVX512 4-iteration Multiply-Add
       60. Section F.1.60: AVX512 4-iteration Dot Product
       61. Section F.1.61: Intel Software Guard Extensions (SGX)
       62. Section F.1.62: Intel Control-Flow Enforcement Technology (CET)
       63. Section F.1.63: Instructions from ISE doc 319433-040, June 2020
       64. Section F.1.64: AVX512 Bfloat16 instructions
       65. Section F.1.65: AVX512 mask intersect instructions
       66. Section F.1.66: Intel Advanced Matrix Extensions (AMX)
       67. Section F.1.67: Intel AVX512-FP16 instructions
       68. Section F.1.68: RAO-INT weakly ordered atomic operations
       69. Section F.1.69: User interrupts
       70. Section F.1.70: Compare, exchange and add conditional
       71. Section F.1.71: Flexible Return and Exception Delivery
       72. Section F.1.72: WRMSRNS and MSRLIST instructions
       73. Section F.1.73: History reset
       74. Section F.1.74: Systematic names for the hinting nop instructions