| |||
| 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 only).
Sis
an optional suffix. If S is specified, the
condition code flags are updated on the result of the operation.
condis an optional condition code.
Rdis the destination register.
Rnis the register holding the first operand.
Operand2is a flexible second operand.
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 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.
You cannot use PC (R15) for or
any operand in any of these instructions.Rd
You can use PC and SP in these ARM instructions but they are deprecated in ARMv6T2 and above.
If you use PC as ,
the value used is the address of the instruction plus 8.Rn
If you use PC as :Rd
Execution branches to the address corresponding to the result.
If you use the S suffix,
see the SUBS pc,lr instruction.
You cannot use PC for any operand in any data processing instruction that has a register-controlled shift.
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 Operand2
do not affect the V flag.
The following forms of these instructions are available in Thumb code, and are 16-bit instructions:
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, lr, ROR #4
ORNS r7, r11, lr, ASR #32
Developing Software for ARM Processors: