In ARM state:
MOV
can load any 8-bit immediate value, giving a range of0x0
-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-(
, wheren
+1)
is the value available inn
MOV
.In ARMv6T2 and later,
MOV
can load any 16-bit number, giving a range of0x0-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.
Binary | Decimal | Step | Hexadecimal | MVN valuea | Notes |
---|---|---|---|---|---|
000000000000000000000000abcdefgh | 0-255 | 1 | 0-0xFF | -1 to -256 | - |
0000000000000000000000abcdefgh00 | 0-1020 | 4 | 0-0x3FC | -4 to -1024 | - |
00000000000000000000abcdefgh0000 | 0-4080 | 16 | 0-0xFF0 | -16 to -4096 | - |
000000000000000000abcdefgh000000 | 0-16320 | 64 | 0-0x3FC0 | -64 to -16384 | - |
... | ... | ... | ... | ... | - |
abcdefgh000000000000000000000000 | 0-255 x 224 | 224 | 0-0xFF000000 | 1-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 |
Binary | Decimal | Step | Hexadecimal | MVN value | Notes |
---|---|---|---|---|---|
0000000000000000abcdefghijklmnop | 0-65535 | 1 | 0-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 inMVN
instructions.- b
These values are available in ARM state only. All the other values in this table are also available in 32-bit Thumb instructions.
- 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-(
, wheren
+1)
is the value available inn
MOV
.the 32-bit
MOV
instruction can load any 16-bit number, giving a range of0x0-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.
Binary | Decimal | Step | Hexadecimal | MVN valuea | Notes |
---|---|---|---|---|---|
000000000000000000000000abcdefgh | 0-255 | 1 | 0-0xFF | -1 to -256 | - |
00000000000000000000000abcdefgh0 | 0-510 | 2 | 0-0x1FE | -2 to -512 | - |
0000000000000000000000abcdefgh00 | 0-1020 | 4 | 0-0x3FC | -4 to -1024 | - |
... | ... | ... | ... | ... | - |
0abcdefgh00000000000000000000000 | 0-255 x 223 | 223 | 0-0x7F800000 | 1-256 x -223 | - |
abcdefgh000000000000000000000000 | 0-255 x 224 | 224 | 0-0xFF000000 | 1-256 x -224 | - |
abcdefghabcdefghabcdefghabcdefgh | (bit pattern) | - | 0xXYXYXYXY | 0xXYXYXYXY | - |
00000000abcdefgh00000000abcdefgh | (bit pattern) | - | 0x00XY00XY | 0xFFXYFFXY | - |
abcdefgh00000000abcdefgh00000000 | (bit pattern) | - | 0xXY00XY00 | 0xXYFFXYFF | - |
00000000000000000000abcdefghijkl | 0-4095 | 1 | 0-0xFFF | - | See b in Note |
Binary | Decimal | Step | Hexadecimal | MVN value | Notes |
---|---|---|---|---|---|
0000000000000000abcdefghijklmnop | 0-65535 | 1 | 0-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 inMVN
instructions.- b
These values are available directly as operands in
ADD
,SUB
, andMOV
instructions, but not inMVN
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.
- Concepts