You copied the Doc URL to your clipboard.

Load immediate values using MOV and MVN

In A32 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.

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

Table 9 shows the range of 8-bit values that can be loaded in a single A32 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 10 shows the range of 16-bit values that can be loaded in a single MOV A32 instruction.

Table 9. A32 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 10. A32 state immediate values in MOV instructions
BinaryDecimalStepHexadecimalMVN valueNotes
0000000000000000abcdefghijklmnop0-6553510-0xFFFF-See c in Note

Note

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

a

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

b

These values are available in A32 state only. All the other values in this table are also available in 32-bit T32 instructions.

c

These values are not available directly as operands in other instructions.

In T32 state:

  • 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.

The 16-bit T32 MOV instruction can load any immediate value in the range 0-255.

Table 11 shows the range of values that can be loaded in a single 32-bit T32 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 12 shows the range of 16-bit values that can be loaded by the MOV 32-bit T32 instruction.

Table 11. 32-bit T32 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 12. 32-bit T32 immediate values in MOV instructions
BinaryDecimalStepHexadecimalMVN valueNotes
0000000000000000abcdefghijklmnop0-6553510-0xFFFF-See c in Note

Note

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

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 A32 and T32, you do not have to decide whether to use MOV or MVN. armasm 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, armasm reports the error: Immediate n out of range for this operation.