Load immediate values using MOV and MVN

In ARM state:

Table 8 shows the range of 8-bit values that can be loaded in a single ARM MOV or MVN instruction (for data processing operations). The value to load must be a multiple of the value shown in the Step column.

Table 9 shows the range of 16-bit values that can be loaded in a single MOV ARM instruction in ARMv6T2 and later.

Table 8. ARM state immediate values (8-bit)

BinaryDecimalStepHexadecimalMVN valueaNotes
000000000000000000000000abcdefgh0-25510-0xFF-1 to -256-
0000000000000000000000abcdefgh000-102040-0x3FC-4 to -1024-
00000000000000000000abcdefgh00000-4080160-0xFF0-16 to -4096-
000000000000000000abcdefgh0000000-16320640-0x3FC0-64 to -16384-
...............-
abcdefgh0000000000000000000000000-255 x 2242240-0xFF0000001-256 x -224-
cdefgh000000000000000000000000ab(bit pattern)--(bit pattern)See b in Note
efgh000000000000000000000000abcd(bit pattern)--(bit pattern)See b in Note
gh000000000000000000000000abcdef(bit pattern)--(bit pattern)See b in Note

Table 9. ARM state immediate values in MOV instructions

BinaryDecimalStepHexadecimalMVN valueNotes
0000000000000000abcdefghijklmnop0-6553510-0xFFFF-See c in Note

Note

These notes give extra information on Table 8 and Table 9.

a

The MVN values are only available directly as operands in MVN instructions.

b

These values are available in ARM state only. All the other values in this table are also available in 32-bit Thumb.

c

These values are only available in ARMv6T2 and later. They are not available directly as operands in other instructions.

In Thumb state in ARMv6T2 and later:

In architectures with Thumb, the 16-bit Thumb MOV instruction can load any immediate value in the range 0-255.

Table 10 shows the range of values that can be loaded in a single 32-bit Thumb MOV or MVN instruction (for data processing operations). The value to load must be a multiple of the value shown in the Step column.

Table 11 shows the range of 16-bit values that can be loaded by the MOV 32-bit Thumb instruction.

Table 10. 32-bit Thumb immediate values

BinaryDecimalStepHexadecimalMVN valueaNotes
000000000000000000000000abcdefgh0-25510-0xFF-1 to -256-
00000000000000000000000abcdefgh00-51020-0x1FE-2 to -512-
0000000000000000000000abcdefgh000-102040-0x3FC-4 to -1024-
...............-
0abcdefgh000000000000000000000000-255 x 2232230-0x7F8000001-256 x -223-
abcdefgh0000000000000000000000000-255 x 2242240-0xFF0000001-256 x -224-
abcdefghabcdefghabcdefghabcdefgh(bit pattern)-0xXYXYXYXY0xXYXYXYXY-
00000000abcdefgh00000000abcdefgh(bit pattern)-0x00XY00XY0xFFXYFFXY-
abcdefgh00000000abcdefgh00000000(bit pattern)-0xXY00XY000xXYFFXYFF-
00000000000000000000abcdefghijkl0-4095 10-0xFFF-See b in Note

Table 11. 32-bit Thumb immediate values in MOV instructions

BinaryDecimalStepHexadecimalMVN valueNotes
0000000000000000abcdefghijklmnop0-6553510-0xFFFF-See c in Note

Note

These notes give extra information on Table 10 and Table 11.

a

The MVN values are only available directly as operands in MVN instructions.

b

These values are available directly as operands in ADD, SUB, and MOV instructions, but not in MVN or any other data processing instructions.

c

These values are only available in MOV instructions.

In both ARM and Thumb, you do not have to decide whether to use MOV or MVN. The assembler uses whichever is appropriate. This is useful if the value is an assembly-time variable.

If you write an instruction with an immediate value that is not available, the assembler reports the error: Immediate n out of range for this operation.

Show/hideSee also

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0473C
Non-ConfidentialID080411