In ARMv6T2 and later, both ARM and Thumb instruction sets include:
MOVinstruction that can load any value in the range
0x0000FFFFinto a register
MOVTinstruction that can load any value in the range
0xFFFFinto the most significant half of a register, without altering the contents of the least significant half.
You can use these two instructions to construct any 32-bit
immediate value in a register. Alternatively, you can use the
The assembler generates the
pair for you.
You can also use the
MOV32 instruction to load
addresses into registers by using a label or any PC-relative expression
in place of an immediate value. The assembler puts a relocation
directive into the object file for the linker to resolve the address