The Story behind the Succinctly Series of Books
About the Author
Introduction
Assembly Language
Why Learn Assembly?
Intended Audience
Chapter 1 Assembly in Visual Studio
Inline Assembly in 32-Bit Applications
Native Assembly Files in C++
Additional Steps for x64
64-bit Code Example
Chapter 2 Fundamentals
Skeleton of an x64 Assembly File
Skeleton of an x32 Assembly File
Comments
Destination and Source Operands
Segments
Labels
Anonymous Labels
Data Types
Little and Big Endian
Two’s and One’s Complement
Chapter 3 Memory Spaces
Registers
16-Bit Register Set
32-Bit Register Set
64-bit Register Set
Chapter 4 Addressing Modes
Registers Addressing Mode
Immediate Addressing Mode
Implied Addressing Mode
Memory Addressing Mode
Chapter 5 Data Segment
Scalar Data
Arrays
Arrays Declared with Commas
Duplicate Syntax for Larger Arrays
Getting Information about an Array
Defining Strings
Typedef
Structures and Unions
Structures of Structures
Unions
Records
Constants Using Equates To
Macros
Chapter 6 C Calling Convention
The Stack
Scratch versus Non-Scratch Registers
Passing Parameters
Shadow Space
Chapter 7 Instruction Reference
CISC Instruction Sets
Parameter Format
Flags Register
Prefixes
Repeat Prefixes
Lock Prefix
x86 Data Movement Instructions
Move
Conditional Moves
Nontemporal Move
Move and Zero Extend
Move and Sign Extend
Move and Sign Extend Dword to Qword
Exchange
Translate Table
Sign Extend AL, AX, and EAX
Copy Sign of RAX across RDX
Push to Data to Stack
Pop Data from Stack
Push Flags Register
Pop Flags Register
Load Effective Address
Byte Swap
x86 Arithmetic Instructions
Addition and Subtraction
Add with Carry and Subtract with Borrow
Increment and Decrement
Negate
Compare
Multiply
Signed and Unsigned Division
x86 Boolean Instructions
Boolean And, Or, Xor
Boolean Not (Flip Every Bit)
Test Bits
Shift Right and Left
Rotate Left and Right
Rotate Left and Right Through the Carry Flag
Shift Double Left or Right
Bit Test
Bit Scan Forward and Reverse
Conditional Byte Set
Set and Clear the Carry or Direction Flags
Jumps
Call a Function
Return from Function
x86 String Instructions
Load String
Store String
Move String
Scan String
Compare String
x86 Miscellaneous Instructions
No Operation
Pause
Read Time Stamp Counter
Loop
CPUID
Chapter 8 SIMD Instruction Sets
SIMD Concepts
Saturating Arithmetic versus Wraparound Arithmetic
Packed/SIMD versus Scalar
MMX
Registers
Referencing Memory
Exit Multimedia State
Moving Data into MMX Registers
Move Quad-Word
Move Dword
Boolean Instructions
Shifting Bits
Arithmetic Instructions
Multiplication
Comparisons
Creating the Remaining Comparison Operators
Packing
Unpacking
SSE Instruction Sets
Introduction
AVX
Data Moving Instructions
Move Aligned Packed Doubles/Singles
Move Unaligned Packed Doubles/Singles
Arithmetic Instructions
Adding Floating Point Values
Subtracting Floating Point Values
Dividing Floating Point Values
Multiplying Floating Point Values
Square Root of Floating Point Values
Reciprocal of Single-Precision Floats
Reciprocal of Square Root of Single-Precision Floats
Boolean Operations
AND NOT Packed Doubles/Singles
AND Packed Doubles/Singles
OR Packed Doubles/Singles
XOR Packed Doubles/Singles
Comparison Instructions
Comparing Packed Doubles and Singles
Comparing Scalar Doubles and Singles
Comparing and Setting rFlags
Converting Data Types/Casting
Conversion Instructions
Selecting the Rounding Function
Conclusion
Recommended Reading