Skip to main content
Engineering LibreTexts

3.8: Logical Operators

  • Page ID
    28489
  • \( \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.

    • Was this article helpful?