Wednesday, September 08, 2010

  • Print
  • |
  • |
  • Reprints
  • |
  • RSS
  • |
 

Understanding Assembly Language for IA-32 and Intel 64 Architectures - Part 1: Basic overview and instruction set extensions

Part 1 of a look at assembly language for IA-32 and Intel 64 architectures offers a basic overview of the instruction sets and details on Streaming SIMD Extensions and Advanced Vector Extensions.

David Kreitzer and Max Domeika

Page 1 of 5

David Kreitzer and Max Domeika

Introduction
Assembly Language is a representation of the machine language that executes on a given architecture. Reading and understanding IA-32 and Intel® 64 architecture assembly languages are difficult tasks. Embedded software engineers are daunted by the sheer longevity of the instruction set and breadth that includes:

• 8-bit, 16-bit, 32-bit, and 64-bit general purpose register sets
• Variable length instructions
• Multiple instructions that perform the same action
• Aggressive compiler optimization
• New instructions and register sets
• x87 floating point

Regardless, there are times when an embedded software engineer needs to look at the disassembly of an application binary or the source code compiled into assembly to perform debugging or performance tuning. This paper equips the reader with the competence necessary to perform these actions.

First, architecture basics are detailed with information on the register sets, data types, and memory and instruction formats. Next, instruction set extensions are detailed, which include Intel® Streaming SIMD Extensions (Intel® SSE) and Intel® Advanced Vector Extensions (Intel® AVX). The third section shows how to effectively generate and read assembly language. The final section provides an analysis of a small C program compiled to assembly language.

Page 2: Basic Architecture
Page 3: Instruction Formats and Memory Addressing Modes
Page 4: Instruction Set Extensions
Page 5: Advanced Vector Extensions (AVX)

Page 1 2 3 4 5
Intel Embedded Design Center