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