| |||
| Home > Writing ARM Assembly Language > Load immediates into registers | |||
ARM and Thumb instructions can only be 32-bits wide. You can
use the MOV and MVN instructions to load
a register with an immediate value supported by the instruction
set. Certain 32-bit values cannot be represented as an immediate
operand to a single 32-bit instruction. These values can be loaded
from memory in a single instruction.
In ARMv6T2 and later, you can load any 32-bit immediate value
into a register with two instructions, a MOV followed
by a MOVT. You can use a pseudo-instruction, MOV32,
to construct the instruction sequence for you.
You can also use the LDR pseudo-instruction to
load immediate values into a register.
You can include many commonly-used immediate values directly as operands within data processing instructions, without a separate load operation. The range of immediate values that you can include as operands in 16-bit Thumb instructions is much smaller.