You copied the Doc URL to your clipboard.

Load immediate values using MOV and MVN

In ARM state:

  • MOV can load any 8-bit immediate value, giving a range of 0x0-0xFF (0-255).

    It can also rotate these values by any even number.

    These values are also available as immediate operands in many data processing operations, without being loaded in a separate instruction.

  • MVN can load the bitwise complements of these values. The numerical values are -(n+1), where n is the value available in MOV.

  • In ARMv6T2 and later, MOV can load any 16-bit number, giving a range of 0x0-0xFFFF (0-65535).

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:

  • the 32-bit MOV instruction can load:

    • any 8-bit immediate value, giving a range of 0x0-0xFF (0-255)

    • any 8-bit immediate value, shifted left by any number

    • any 8-bit pattern duplicated in all four bytes of a register

    • any 8-bit pattern duplicated in bytes 0 and 2, with bytes 1 and 3 set to 0

    • any 8-bit pattern duplicated in bytes 1 and 3, with bytes 0 and 2 set to 0.

    These values are also available as immediate operands in many data processing operations, without being loaded in a separate instruction.

  • the 32-bit MVN instruction can load the bitwise complements of these values. The numerical values are -(n+1), where n is the value available in MOV.

  • the 32-bit MOV instruction can load any 16-bit number, giving a range of 0x0-0xFFFF (0-65535). These values are not available as immediate operands in data processing operations.

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.

Was this page helpful? Yes No