# Appendix 2 - Logical Operators

This section explains the logic behind the various logical operators such as OR, XOR, AND. These operators basically compare the bits of two operands in various ways.

## Xor

Xor stands for eXclusive OR. Basically it compares bits in the
two operands with this in mind: "One or the other, but not
both". What this means is that when comparing 2 bits, if one
of them is 1, so long as the other is not also 1, the result will
be 1. However, if both are 1, the result is 0. And if both are 0,
the result is still 0, since both are the same.

This table may help. You'll see them throughout this section:

Bits of operand 1 | 1010 |

Bits of operand 2 | 1100 |

Result | 0110 |

I know it's a little out there, but that shows an example xor instruction. Following this logic though, we can see why XORing a register with itself produces a 0. For example, lets xor al when it contains 141

AL | 10001101 |

AL | 10001101 |

Result | 00000000 |

Because 0 xor 0 = 0, and 1 xor 1 = 0, there's no possible way
that XORing something with itself would not equal 0.

Another use is toggling a bit or bits in a number. Watch what
happens when we take the bit 0 and xor it 5 times:

0 xor 1 = 1 1 xor 1 = 0 0 xor 1 = 1 1 xor 1 = 0 0 xor 1 = 1

And so on. We can do the same with a whole number. Whichever bits you want toggled like we just did, XOR them with 1.

## And

The logic behind AND is that in the result, only bits matched with themselves will turn out. See this table for example:

Bits of operand 1 | 1010 |

Bits of operand 2 | 1100 |

Result | 1000 |

In the first bit, 1 was matched with itself, so the resulting bit is 1. However, 1 & 0 are not the same, so the result is 0.

## Or

This is called an "inclusive OR". It basically means "if one OR the other is 1, the result is 1". So, the only way for a bit in the result to be 0 is if both bits are 0 in the operands

Bits of operand 1 | 1010 |

Bits of operand 2 | 1100 |

Result | 1110 |

## Links

Quick links to all parts of these tutorialsAsm Tutorial: Learning Assmbly - part [1] [2] [3]

QBASIC Tutorial: Programming in (Q)BASIC - part [1] [2]