# 3.8: Logical Operators

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$ $$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\kernel}{\mathrm{null}\,}$$ $$\newcommand{\range}{\mathrm{range}\,}$$ $$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$ $$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$ $$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$ $$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\kernel}{\mathrm{null}\,}$$ $$\newcommand{\range}{\mathrm{range}\,}$$ $$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$ $$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$ $$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$ $$\newcommand{\Span}{\mathrm{span}}$$$$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

Most programmers have seen logical operators in HLL for Boolean data types. As was covered earlier in this text, there are often two form of these operators, the logical (or short-circuiting) operators and the bitwise operators. MIPS only implements the bitwise operators, but they are called logical operators. Since all Boolean operations can be implemented with only 3 operations, the AND, OR, and NOT operations, this sections will present these 3 operations. In addition the XOR operation will be included for convenience because it is often easier to state a logical expression using XOR than to do so using AND, OR, and NOT. See the problems at the end of the chapter to see how to implement logical operations using these 4 basic logic operations.

The logic operators covered are:

• and operator, which has three formats. The first format is the only real format of this operator. The operator does a bit-wise AND of Rs and Rt and stores the result Rd register. The format and meaning of this operator is:  format: and Rd, Rs, Rt meaning: Rd <- Rs AND Rt

The second format of the and operator is a pseudo instruction. In this case the 3rd operator is immediate value, and so this is just a short hand for implementing the andi operator. The format, meaning, and translation of the pseudo operators is as follows:

 format: and Rt, Rs, Immediate meaning: Rt <- Rs AND Immediate translation: andi Rt, Rs, Immediate

The third format of the and operator is also a pseudo instruction, and strange in that only logical operators have this format. In this instruction, Rs and Rt are assumed to be the same register, and the 3rd operator is immediate value The format, meaning, and translation of the pseudo operators is as follows:

 format: and Rs, Immediate meaning: Rs <- Rs AND Immediate translation: andi Rs, Rs, Immediate
• andi operator. The operator does a bit-wise AND of Rs and an immediate value, and stores the result Rt register. The format and meaning of this operator is:  format: andi Rt, Rs, Immediate meaning: Rt <- Rs AND Immediate

The shorthand with a single register also applies to the andi instruction.

 format: andi Rs, Immediate meaning: Rs <- Rs AND Immediate translation: andi Rs, Rs, Immediate
• or operator, which has three formats. The first format is the only real format of this operator. The operator does a bit-wise OR of Rs and Rt and stores the result Rd register. The format and meaning of this operator is:  format: or Rd, Rs, Rt meaning: Rd <- Rs OR Rt

The second format of the and operator is a pseudo instruction. In this case the 3rd operator is immediate value, and so this is just a short hand for implementing the ori operator. The format, meaning, and translation of the pseudo operators is as follows:

 format: or Rt, Rs, Immediate meaning: Rt <- Rs OR Immediate translation: ori Rt, Rs, Immediate

The shorthand with a single register also applies to the or instruction.

 format: or Rs, Immediate meaning: Rs <- Rs OR Immediate translation: andi Rs, Rs, Immediate
• ori operator. The operator does a bit-wise OR of Rs and an immediate value, and stores the result Rt register. The format and meaning of this operator is:  format: ori Rt, Rs, Immediate meaning: Rt <- Rs OR Immediate

The shorthand with a single register also applies to the ori instruction.

 format: ori Rs, Immediate meaning: Rs <- Rs OR Immediate translation: ori Rs, Rs, Immediate
• xor operator, which has three formats. The first format is the only real format of this operator. The operator does a bit-wise OR of Rs and Rt and stores the result Rd register. The format and meaning of this operator is:  format: xor Rd, Rs, Rt meaning: Rd <- Rs XOR Rt

The second format of the and operator is a pseudo instruction. In this case the 3rd operator is immediate value, and so this is just a short hand for implementing the ori operator. The format, meaning, and translation of the pseudo operators is as follows:

 format: xor Rt, Rs, Immediate meaning: Rt <- Rs XOR Immediate translation: xori Rt, Rs, Immediate

The shorthand with a single register also applies to the or instruction.

 format: xor Rs, Immediate meaning: Rs <- Rs AND Immediate translation: xori Rs, Rs, Immediate
• ori operator. The operator does a bit-wise OR of Rs and an immediate value, and stores the result Rt register. The format and meaning of this operator is:  format: xori Rt, Rs, Immediate meaning: Rt <- Rs XOR Immediate

The shorthand with a single register also applies to the xori instruction.

 format: xori Rs, Immediate meaning: Rs <- Rs XOR Immediate translation: xori Rs, Rs, Immediate
• not operator. The operator does a bit-wise NOT (bit inversion) of Rs, and stores the result Rt register. The format and meaning of this operator is:  format: not Rs, Rt meaning: Rs <- NOT(Rt) translation: nor Rs, Rt, \$zero

In addition to the real operators, there are a number of pseudo sub operators, which use 32-bit immediate values. The 32-bit values are handled exactly as with the add instructions, with a sign extension out to 32 bits.

This page titled 3.8: Logical Operators is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by Charles W. Kann III.