📚

Introduction to ARM Assembly Language

Sep 12, 2024

Lecture on ARM Assembly Language

Assembly Language Overview

  • Low-level programming language
  • Closest to machine language
  • Specific to computer architecture

ARM Assembly Language

  • Increasingly popular
  • Used in over 200 billion devices
  • Efficient interaction with hardware

Course Goals

  • Introduction to low-level programming concepts
  • Understanding ARM processor
  • Writing basic ARM assembly programs

Applications of ARM

  • Used in embedded devices
  • Found in Android and some iPhone devices
  • Used in new MacBooks

Importance of ARM Skills

  • Enables closer interaction with hardware
  • Allows efficient hardware-software communication

Course Content

  • Basic ARM instructions
  • Arithmetic and logical operations
  • Branching and loops in assembly
  • Hardware interaction
  • Troubleshooting ARM assembly

Development Environment

  • Using CPUlator emulator
  • Linux-based system usage in later parts

ARM Architectures

  • Focus on ARMv7
  • Discussing ARMv7 D1 SoC
  • Comparisons to other assembly languages like MIPS

Registers and Memory

  • Registers: Fast access, limited storage
    • R0-R6: General purpose
    • R7: System calls
    • SP: Stack pointer (addresses stack memory)
    • LR: Link register (stores function return address)
    • PC: Program counter (next instruction location)
  • Memory: Slower access, larger storage
    • Stack memory in RAM, used for complex data

Basic Assembly Program Structure

  • Starting point: .global _start, _start: label
  • Moving data into registers
  • System calls via R7 and SWI

Data Representation

  • Hexadecimal values and their bit representation
  • Little Endian vs. Big Endian in ARM

Addressing Types

  • Immediate: Constant value into register
  • Register Direct: Between registers
  • Register Indirect: From stack to register
  • Indirect with Offset: Adding offset to address
  • Pre/Post Increment: Adjust addresses before/after access

Arithmetic Operations

  • ADD, SUB, MUL: Addition, subtraction, multiplication
  • Sub with Flags (SUBS): Set flags in CPSR for negative results
  • ADC: Addition with carry

Logical Operations

  • AND, ORR, EOR: Bitwise and, or, exclusive or
  • MVN: Move negated value

Shifts and Rotations

  • Logical Shift Left (LSL): Multiply by 2
  • Logical Shift Right (LSR): Divide by 2
  • Rotate Right (ROR): Bits rotate around

Conditional Statements

  • CMP: Compare two registers
  • B: Branch if condition met (e.g. BGT, BLT, BEQ)

Loops in Assembly

  • Setting up loops with branch conditions
  • Example: Summing a list of numbers

Functions and Subroutines

  • BL: Branch with link, store return address
  • BX: Return to address in link register
  • PUSH/POP: Save/restore register values on stack

Hardware Interaction

  • Using emulators to simulate hardware devices
  • Understanding input (switches) and output (LEDs)

ARM in Linux Environment

  • Setting up ARM environment on Linux
  • Emulating ARM on non-ARM systems using QEMU
  • Writing "Hello World" in ARM assembly
  • Using GDB for debugging
  • System calls for output and program termination

Debugging with GDB

  • Setting breakpoints, inspecting registers and memory
  • Using GDB commands for stepping through instructions
  • Exploring memory contents with different formats

These notes cover the main ideas and topics discussed in the lecture about ARM assembly language and low-level programming concepts, including practical applications, course goals, and tools used for development and debugging.