| |||
| Home > ARM and Thumb Instructions > General data processing instructions > AND, ORR, EOR, BIC, and ORN | |||
Logical AND, OR, Exclusive OR, Bit Clear, and OR NOT.
op{S}{cond}Rd,Rn,Operand2
where:
opis one of:
ANDlogical AND.
ORRlogical OR.
EORlogical Exclusive OR.
BIClogical AND NOT.
ORNlogical OR NOT (Thumb-2 only).
Sis
an optional suffix. If S is specified, the
condition code flags are updated on the result of the operation
(see Conditional execution).
condis an optional condition code (see Conditional execution).
Rdis the destination register.
Rnis the register holding the first operand.
Operand2is a flexible second operand. See Flexible second operand for details of the options.
The AND, EOR, and ORR instructions
perform bitwise AND, Exclusive OR, and OR operations on the values
in and Rn.Operand2
The BIC (Bit Clear) instruction performs an AND
operation on the bits in with
the complements of the corresponding bits in the value of Rn.Operand2
The ORN Thumb-2 instruction performs an OR operation
on the bits in with
the complements of the corresponding bits in the value of Rn.Operand2
In certain circumstances, the assembler can substitute BIC for AND, AND for BIC, ORN for ORR,
or ORR for ORN. Be aware of this when
reading disassembly listings. See Instruction substitution for details.
You cannot use r15 for or
any operand in any of these instructions.Rd
All these uses of r15 in theseARM instructions are deprecated from ARMv7.
If you use r15 as ,
the value used is the address of the instruction plus 8.Rn
If you use r15 as :Rd
Execution branches to the address corresponding to the result.
If you use the S suffix,
the SPSR of the current mode is copied to the CPSR. You can use
this to return from exceptions (see Chapter 6 Handling
Processor Exceptions in the RealView Compilation Tools Developer Guide).
Do not use the S suffix when using
r15 as in User
mode or System mode. The effect of such an instruction is unpredictable,
but the assembler cannot warn you at assembly time.Rd
You cannot use r15 for any operand in any data processing instruction that has a register-controlled shift (see Flexible second operand).
If S is specified, these instructions:
update the N and Z flags according to the result
can update the C flag during the calculation of (see Flexible second operand)Operand2
do not affect the V flag.
The following forms of these instructions are available in Thumb code, and are 16-bit instructions when used in Thumb-2 code:
ANDS Rd, Rd, Rm and Rd must
both be Lo registers.Rm
EORS Rd, Rd, Rm and Rd must
both be Lo registers.Rm
ORRS Rd, Rd, Rm and Rd must
both be Lo registers.Rm
BICS Rd, Rd, Rm and Rd must
both be Lo registers.Rm
In the first three cases, it does not matter if you specify .
The instruction is the same.OPS Rd, Rm, Rd
AND r9,r2,#0xFF00
ORREQ r2,r0,r5
EORS r0,r0,r3,ROR r6
ANDS r9, r8, #0x19
EORS r7, r11, #0x18181818
BIC r0, r1, #0xab
ORN r7, r11, r14, ROR #4
ORNS r7, r11, r14, ASR #32