Part II. NASM Syntax

The chapters in this part of the book document the NASM-compatible syntax accepted by the Yasm nasm parser and preprocessor.

Table of Contents

3. The NASM Language
3.1. Layout of a NASM Source Line
3.2. Pseudo-Instructions
3.2.1. DB and Friends: Declaring Initialized Data
3.2.2. RESB and Friends: Declaring Uninitialized Data
3.2.3. INCBIN: Including External Binary Files
3.2.4. EQU: Defining Constants
3.2.5. TIMES: Repeating Instructions or Data
3.3. Effective Addresses
3.3.1. 64-bit Displacements
3.3.2. RIP Relative Addressing
3.4. Immediate Operands
3.5. Constants
3.5.1. Numeric Constants
3.5.2. Character Constants
3.5.3. String Constants
3.5.4. Floating-Point Constants
3.6. Expressions
3.6.1. |: Bitwise OR Operator
3.6.2. ^: Bitwise XOR Operator
3.6.3. &: Bitwise AND Operator
3.6.4. << and >>: Bit Shift Operators
3.6.5. + and -: Addition and Subtraction Operators
3.6.6. *, /, //, % and %%: Multiplication and Division
3.6.7. Unary Operators: +, -, ~ and SEG
3.6.8. SEG and WRT
3.7. STRICT: Inhibiting Optimization
3.8. Critical Expressions
3.9. Local Labels
4. The NASM Preprocessor
4.1. Single-Line Macros
4.1.1. The Normal Way: %define
4.1.2. Enhancing %define: %xdefine
4.1.3. Concatenating Single Line Macro Tokens: %+
4.1.4. Undefining macros: %undef
4.1.5. Preprocessor Variables: %assign
4.2. String Handling in Macros
4.2.1. String Length: %strlen
4.2.2. Sub-strings: %substr
4.3. Multi-Line Macros
4.3.1. Overloading Multi-Line Macros
4.3.2. Macro-Local Labels
4.3.3. Greedy Macro Parameters
4.3.4. Default Macro Parameters
4.3.5. %0: Macro Parameter Counter
4.3.6. %rotate: Rotating Macro Parameters
4.3.7. Concatenating Macro Parameters
4.3.8. Condition Codes as Macro Parameters
4.3.9. Disabling Listing Expansion
4.4. Conditional Assembly
4.4.1. %ifdef: Testing Single-Line Macro Existence
4.4.2. %ifmacro: Testing Multi-Line Macro Existence
4.4.3. %ifctx: Testing the Context Stack
4.4.4. %if: Testing Arbitrary Numeric Expressions
4.4.5. %ifidn and %ifidni: Testing Exact Text Identity
4.4.6. %ifid, %ifnum, %ifstr: Testing Token Types
4.4.7. %error: Reporting User-Defined Errors
4.5. Preprocessor Loops
4.6. Including Other Files
4.7. The Context Stack
4.7.1. %push and %pop: Creating and Removing Contexts
4.7.2. Context-Local Labels
4.7.3. Context-Local Single-Line Macros
4.7.4. %repl: Renaming a Context
4.7.5. Example Use of the Context Stack: Block IFs
4.8. Standard Macros
4.8.1. __YASM_MAJOR__, etc: Yasm Version
4.8.2. __FILE__ and __LINE__: File Name and Line Number
4.8.3. __YASM_OBJFMT__ and __OUTPUT_FORMAT__: Output Object Format Keyword
4.8.4. STRUC and ENDSTRUC: Declaring Structure Data Types
4.8.5. ISTRUC, AT and IEND: Declaring Instances of Structures
4.8.6. ALIGN and ALIGNB: Data Alignment
5. NASM Assembler Directives
5.1. Specifying Target Processor Mode
5.1.1. BITS
5.1.2. USE16, USE32, and USE64
5.2. DEFAULT: Change the assembler defaults
5.3. Changing and Defining Sections
5.3.1. SECTION and SEGMENT
5.3.2. Standardized Section Names
5.3.3. The __SECT__ Macro
5.4. ABSOLUTE: Defining Absolute Labels
5.5. EXTERN: Importing Symbols
5.6. GLOBAL: Exporting Symbols
5.7. COMMON: Defining Common Data Areas
5.8. CPU: Defining CPU Dependencies