| |||
| Home > Writing ARM and Thumb Assembly Language > Overview of the ARM architecture > ARM instruction set overview | |||
All ARM instructions are 32 bits long. Instructions are stored word-aligned, so the least significant two bits of instruction addresses are always zero in ARM state. Some instructions use the least significant bit to determine whether the code being branched to is Thumb code or ARM code.
See Chapter 4 ARM Instruction Reference for detailed information on the syntax of the ARM instruction set.
ARM instructions can be classified into a number of functional groups:
These instructions are used to:
branch backwards to form loops
branch forward in conditional structures
branch to subroutines
change the processor from ARM state to Thumb state.
These instructions operate on the general-purpose registers. They can perform operations such as addition, subtraction, or bitwise logic on the contents of two registers and place the result in a third register. They can also operate on the value in a single register, or on a value in a register and a constant supplied within the instruction (an immediate value).
Long multiply instructions (unavailable in some architectures) give a 64-bit result in two registers.
These instructions load or store the value of a single register from or to memory. They can load or store a 32-bit word or an 8-bit unsigned byte. In ARM architecture v4 and above they can also load or store a 16-bit unsigned halfword, or load and sign extend a 16-bit halfword or an 8-bit byte.
These instructions load or store any subset of the general-purpose registers from or to memory. Refer to Load and store multiple register instructions for a detailed description of these instructions.
These instructions move the contents of the CPSR or an SPSR to or from a general-purpose register.