ARM: Introduction to ARM: Instruction Sets

by David Thomas on

Instruction Sets

Modern ARM processors have several instruction sets:

  • The fully-featured 32-bit ARM instruction set,
  • The more restricted, but space efficient, 16-bit Thumb instruction set,
  • The newer mixed 16/32-bit Thumb-2 instruction set,
  • Jazelle DBX for Java byte codes,
  • The NEON 64/128-bit SIMD instruction set,
  • The VFP vector floating point instruction set.

For the purposes of this course we are only interested in the ARM and Thumb instruction sets.


Thumb instructions are a 16-bit compressed form of the most commonly used ARM instructions. Instructions are (can be) dynamically decompressed in the instruction pipeline. Thumb increases code density (commonly by 25%) at the cost of reduced execution speed.

Java bytecodes are 8-bit instructions designed to be architecture-independent. Jazelle DBX transparently executes most bytecodes in hardware and some in highly optimised ARM code. This is due to a trade-off between hardware complexity (power consumption and silicon area) and speed.

Thumb-2 is the progression of Thumb (strictly it is Thumb v3). It improves performance whilst keeping the code density tight by allowing a mixture of 16- and 32-bit instructions.