# EOR

Instruction EOR[S] Logically Exclusive OR two values Data processing All -

## EOR[S] : bitwise Exclusive OR

EOR will perform a logical, bitwise, Exclusive OR between the two operands, placing the result in the destination register; this is useful for inverting certain bits. Operand 1 is a register, operand 2 can be a register, shifted register, or an immediate value (which may be shifted. If the S bit is set (ANDS), the N and Z flags are set according to the result, the C flag is set according to the shift (if used), and the V flag remains unaltered.

EOR is useful for inverting bits in a bitfield. For each bit, EORing with 1 will invert the bit, and EORing with 0 will leave it as it was.

This instruction is the same as the one called XOR on some other platforms.

### Syntax

```  EOR<suffix>  <dest>, <op 1>, <op 2>
```

### Function

```  dest = op_1 EOR op_2
```

EOR sets the result bit upon either, but not both of the input bits being the same.

Truth table:

op_1 bit op_2 bit Result bit
0 0 0
0 1 1
1 0 1
1 1 0

### Example

```  EOR  R0, R0, #3  ; Invert bits zero and one of R0.
EORS R0, R0, #3  ; As above, but also updates status flags
```

### Technical

The instruction bit pattern is as follows:

31 - 28 27 26 25 24 - 21 20 19 - 16 15 - 12 11 - 0
condition 0 0 I 0 0 0 1 S op_1 dest op_2/shift

Note: If the I bit is zero, and bits 4 and 7 are both one (with bits 5,6 zero), the instruction is MLA, not EOR.