Introduction
  • Introduction
Getting Started
  • Setting Up the Development Environment
  • Coding : Simple Assembly program
  • Installing a Syntax Highlighter
x86 Processors & Computer Architectures
  • Evolution of Intel Processors
  • Harvard Architecture vs Von Neumann Architecture
The Computing Device
  • Logic Gates
  • From Transistors to Operating Systems
  • Number Systems
The Programmer's Model
  • Overview of x86 Data Types
  • Basic x86 Microcomputer Design
  • x86 Operating Modes
  • Overview of the x86 Registers
  • Coding : One Register to Rule Them All
  • Overview of the x86 Flags
  • Overview of the Floating Point Unit
  • Overview of x86 Memory Models
Introduction to x86 Assembly Language
  • Notice
  • Overview of x86 Integers
  • Introduction to Directives and Instructions
  • Simple x86 Assembly Template
  • Coding : Declaring Variables in Assembly
  • Dealing with Data
  • Endianness
  • Notice
  • Coding : Mixing C/C++ and Assembly
Data Transfer Instructions
  • Operand Types
  • Overview of the MOV Instruction
  • Understanding Direct - Offset Operands
  • Memory Addressing Modes
Arithmetic Instructions
  • Notice
  • The Increment and Decrement Instructions
  • The Addition and Subtraction Instructions
  • Data Operators and Directives
  • Coding : Summing Array Elements
  • Coding : Scanning an Array
  • Coding : Using Pointers and Typedef
Conditional Branching
  • The Jump and Loop Instructions
  • Logic Instructions
  • Condition Jump Instructions
  • Instruction Operands
The Nature of Mixing C/C++ and Assembly
  • Notice
  • Coding : Computing the Sum of an Array
  • Coding : Computing Signed Multiplication and Division
  • Coding : Understanding C/C++ Calling Conventions
  • Coding : Experimenting with different Addressing Modes
  • Coding : Declaring Global Variables in C/C++ and using them in Assembly
  • Coding : Experimenting with Conditional Codes
Working with Arrays
  • Coding : Iterating through Array Elements
  • Coding : Array Elements Square
  • Coding : Working with 2-Dimensional Arrays
  • Coding : Computing the Sum of Rows and Columns of a 2-Dimensional Array
Working with Strings
  • Coding : Copying Strings from one Variable to another
  • Coding :Creating a Character Search Algorithm
Programming with the Floating -Point Unit (FPU) Registers
  • Overview of the x86 FPU
  • Overview of the FPU Instruction Set
  • Case Study - Temperature Conversion
  • Coding : Writing a temperature conversion program using the FPU
  • Coding : Developing the Sphere Computation Algorithm
  • Coding : Processing Floating-Point Arrays with FPU Instructions
  • Coding : Computing Min and Max of Single-Precision Floating Point Arrays
  • Coding : Developing Algorithms with x86 FPU Transcendental Instructions
  • Coding : Developing the Least Squares Algorithm
Programming with the x86 MMX Extensions
  • Introduction to MMX
  • Overview of the MMX Instruction Set
  • Coding : SIMD Arithmetic with Packed Data using MMX Registers (Part I)
  • Coding : SIMD Arithmetic with Packed Data using MMX Registers (Part II)
  • Coding : Shift Operations with Packed Data using MMX Registers
  • Coding : Understanding MMX Multiplication
Programming with the x86 SSE Extentsions
  • Introduction to SSE
  • Overview of the SSE Instruction Set
  • Coding : Understanding SSE Floating-Point Arithmetic
  • Coding : Developing the Sphere Algorithm using SSE Instructions
  • Coding : SSE Packed Integer Arithmetic
Programming with the x86 Advanced Vector (AVX) Extensions
  • History of AVX
  • The AVX Execution Environment
  • Coding : Understanding AVX Floating Point Arithmetic
  • Coding : Understanding AVX Packed Integer Arithmetic
Closing
  • Closing Remarks