Introduction
  • Introduction
Introduction to ARM Assembly Language
  • The Computing Device
  • Number Systems
  • Assembly Tools
  • Translating Bits to Commands
  • Assembly Syntax
ARM Design Philosophy and RISC Architecture
  • The RISC Design Philosophy
  • The ARM Design Philosophy
  • Embedded Systems with ARM Processors
  • ARM Bus Technology and AMBA Bus Protocol
  • Memory
  • Peripherals
  • Von Neumann and Harvard architecture
  • Cache and Tightly Couple Memory
  • Memory Management extensions
  • Coprocessor extensions
Set up
  • Remotely accessing your Raspberry Pi by SSH
  • Remotely accessing your Raspberry Pi by Remote Desktop Connection
  • Installing CodeBlocks IDE on Raspberry Pi
The Programmer's Model
  • Data Types
  • ARM7TDMI Registers
  • ARM Cortex-M Registers
  • ARM Data Flow Model
  • The Pipeline
  • ARM Processor Family
  • ARM Cortex-A and Cortex-R
  • ARM Cortex-M
  • Section Summary
Assembler Rules and Directives
  • Structure of an Assembly Module
  • The ARM,Thumb and Thumb-2 Instruction Sets
  • Predefined Register Names
  • Frequently used Directives
  • GCC ARM Assembly Directives
  • Difference between Raspberry Pi Assembly code and Kiel ARM Assembly code
  • How to Assemble,Link and Run with Raspberry Pi Terminal
  • Debugging with GDB
  • Coding : Allocating space in memory with the SPACE Directive
  • Overview of Binary Operators
  • Coding : Swapping Register Content
  • Coding : Renaming Registers
Assemble,Link & Run in Raspberry Pi Terminal
  • Coding : Creating an Assembly program with the Raspberry Pi Terminal
  • Coding : Debugging an Assembly program with the Raspberry Pi Terminal
Load-Store Instructions
  • Memory Demarcations
  • Frequently used Load/Store Instructions (Part I)
  • Frequently used Load/Store Instructions (Part II)
  • Frequently used Load/Store Instructions (Part III)
  • Pre-Indexed Addressing
  • Post-Indexed Addressing
  • Endianness
  • Defining Memory Areas
Dealing with Constants and Literals
  • The Encoding of the MOV Instruction
  • The ARM Rotation Scheme
  • Loading Constants with the LDR Instruction
  • Loading Constants with the MOVW and MOVT Instructions
  • Loading Labels with ADR, ADRL and LDR Instructions
  • Coding : Solving a Simple Equation Method 1
  • Coding : Solving a Simple Equation Method 2 - Storing Constants in Memory
  • Coding : Solving a Simple Equation Method 3 - Using Register Relative Addressing
  • Coding : Solving a Simple Equation Method 4 - Compact Code
  • Coding : Cleaning up your project
  • Coding : Adding files to your project
Arithmetic and Logic Instructions
  • Flags
  • The N and V Flags
  • The Z and C Flags
  • Compare/Test Instructions
  • Overview of Boolean Operations
  • Coding : Experimenting with the CPSR Flags
  • Coding : Experimenting with the Carry Flag
  • Coding : Experimenting with the Carry and Overflow Flags
  • Introduction to Shifts and Rotations
  • Understanding Logical Shifts
  • Understanding Rotations
  • Some Shift and Rotate Examples
  • Overview Addition and Subtraction Instructions
  • Coding : Finding the Maximum Value in a Dataset
  • Coding : Adding Signed Data
  • Bit Manipulation Instructions
  • Overview of Saturated Math Instructions
  • Overview of Multiplication Instructions
  • Multiplying by Constants
  • Coding : Solving a More Complex Equation
  • Overview of the Division Instruction
  • Coding : Performing Division by Subtraction
  • Overview of DSP Instructions
  • Fractional Notation
  • Understanding Q Notation
Branch and Loop Instructions
  • Introduction to Branches and Loops
  • Branching
  • Compare and Branch