Writing ARM and Thumb Assembly Language
2-26 Copyright © 2000, 2001 ARM Limited. A ll rights reserved. ARM DUI 0068B
2.6.1 Direct loading with MOV and MVN
In ARM state, you can use the
MOV
and
MVN
instructions to load a range of 8-bit constant
values directly into a register :
MOV
can load any 8-bit constant value, giving a range of
0x0
to
0xFF
(0-255).
It can also rotate thes e values by any even number. Table 2-4 sh ows the range of
values that this provides.
MVN
can load the bitwis e complement of th ese values. The numeric al values are
-(n+1)
, where
n
are the values given in Table 2-4.
You do not need to calculate t he necessary rotatio n. The assembler pe rforms the
calculation for you.
You do not need to decide whether to use
MOV
or
MVN
. The assembler uses whichever is
appropriate. This is useful if the valu e is an assembly- time variable.
If you write an instruction with a constant that cannot be constructed, the assembler
reports the error:
Immediate n out of range for this operation
.
The range of values shown in Table2-4 can also be used as one of the operands in
data-processing operations. You cannot use their bitwise complements as operands, and
you cannot use them as operands in multiplication operations.
Table2-4 ARM-state immediate constants
Rotate Binary Decimal Step Hexadecimal
No rotate
000000000000000000000000xxxxxxxx
0-255 1
0-0xFF
Right, 30 bits
0000000000000000000000xxxxxxxx00
0-1020 4
0-0x3FC
Right, 28 bits
00000000000000000000xxxxxxxx0000
0-4080 16
0-0xFF0
Right, 26 bits
000000000000000000xxxxxxxx000000
0-16320 64
0-0x3FC0
... ... ... ...
Right, 8 bits
xxxxxxxx000000000000000000000000
0-255 x 224 224
0-0xFF000000
Right, 6 bits
xxxxxx000000000000000000000000xx
---
Right, 4 bits
xxxx000000000000000000000000xxxx
---
Right, 2 bits
xx000000000000000000000000xxxxxx
---