Logical Instructions
The following instructions are going to perform logical operations between two fullword operands, a byte in storage and an immediate byte, or between two fields in storage.
A logical operation works on a bitwise level. Starting on the left, a bit from each operand has the logical operation performed and results in a boolean (true/false) value. This process proceeds until all of the bits have had the logical operation performed.
The possible logical operations are AND, OR, and EXCLUSIVE OR. Since these instructions work on a bit-wise level, a value of 0 is considered false and a value of 1 is considered true.
AND operation
AND Truth Table Oper 1 Oper 2 Bit Bit Result 0 0 0 When an AND operation is performed, 0 1 0 the result is 1 ONLY if both bits 1 0 0 are 1; otherwise the result is 0. 1 1 1
The AND operation is used to set bits to 0
AND a bit with 1, it stays the same. AND a bit with 0, it becomes 0
RX Format: label N R,D(X,B)
The fullword in the register and the fullword at D(X,B) are ANDed together. The result of the operation is placed in the register.
RR Format: label NR R1,R2
The fullword in the R1 and the fullword in R2 are ANDed together. The result of the operation is placed in R1.
SI Format: label NI D(B),byte
The byte located at D(B) and the immediate byte specified by byte are ANDed together. The result of the operation is placed at D(B).
SS Format: label NC D1(L,B1),D2(B2)
The L byte storage areas at D1(B1) and D2(B2) are ANDed together. The result of the operation is placed starting at D1(B1).
For all formats, if every bit of the result is 0, the condition code is set to 0; otherwise the condition code is set to 1.
AND Examples: Suppose that a storage area called BYTE contains X'C5'. In binary: BYTE 1 1 0 0 0 1 0 1 bit number 0 1 2 3 4 5 6 7 Execution of the instruction: NI BYTE,B'11111010' BYTE 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 0 RESULT 1 1 0 0 0 0 0 0 will change or "turn off" bits 5 and 7 in BYTE. BYTE now contains X'C0'. Suppose that register 5 contains 00 00 0A 07. Then execution of the instruction: N R5,=X'00000000' Register 5 0000 0000 0000 0000 0000 1010 0000 0111 X'00000000' 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 will zero out register 5. While execution of N R5,=X'FFFFFFFF' Register 5 0000 0000 0000 0000 0000 1010 0000 0111 X'FFFFFFFF' 1111 1111 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 0000 1010 0000 0111 will do nothing.
OR operation
OR Truth Table Oper 1 Oper 2 Bit Bit Result 0 0 0 When an OR operation is performed, 0 1 1 the result is 0 ONLY if both bits 1 0 1 are otherwise the result is 1. 1 1 1
The OR operation is used to set bits to 1
OR a bit with 0, it stays the same. OR a bit with 1, it becomes 1
RX Format: label O R,D(X,B)
The fullword in the register and the fullword at D(X,B) are ORed together. The result of the operation is placed in the register.
RR Format: label OR R1,R2
The fullword in the R1 and the fullword in R2 are ORed together. The result of the operation is placed in R1.
SI Format: label OI D(B),byte
The byte located at D(B) and the immediate byte specified by byte are ORed together. The result of the operation is placed at D(B).
SS Format: label OC D1(L,B1),D2(B2)
The L byte storage areas at D1(B1) and D2(B2) are ORed together. The result of the operation is placed starting at D1(B1).
For all formats, if every bit of the result is 0, the condition code is set to 0; otherwise the condition code is set to 1.
OR Examples: Suppose that a storage area called BYTE contains X'05'. In binary: BYTE 0 0 0 0 0 1 0 1 Execution of the instruction: OI BYTE,X'F0' BYTE 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 RESULT 1 1 1 1 0 1 0 1 will change or "turn on" bits 0 through 3 in BYTE. So BYTE now contains X'F5' (the character representation of 5). Suppose that NUM contains X'00378C'. Then execution of the instructions: UNPK NUMOUT(5),NUM(3) results in NUMOUT F0 F0 F3 F7 C8 OI NUMOUT+4,X'F0' NUMOUT+4 = C8 1100 1000 X'F0' 1111 0000 1111 1000 The contents of NUMOUT is now F0 F0 F3 F7 F8. Execution of O R5,=X'FFFFFFFF' Register 5 0000 0000 0000 0000 0000 1010 0000 0111 X'FFFFFFFF' 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 will change the contents of register 5 to all Fs. While execution of O R5,=X'00000000' Register 5 0000 0000 0000 0000 0000 1010 0000 0111 X'00000000' 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 0000 0111 will do nothing.
EXCLUSIVE OR (XOR) operation
XOR Truth Table Oper 1 Oper 2 Bit Bit Result 0 0 0 When an EXCLUSIVE OR operation is 0 1 1 performed, the result is 1 if both 1 0 1 bits are different; the result is 0 1 1 0 if both bits are the same.
The XOR operation is used to set bits to the opposite value.
XOR a bit with 0, it stays the same. XOR a bit with 1, it becomes the opposite value
RX Format: label X R,D(X,B)
The fullword in the register and the fullword at D(X,B) are XORed together. The result of the operation is placed in the register.
RR Format: label XR R1,R2
The fullword in the R1 and the fullword in R2 are XORed together. The result of the operation is placed in R1.
SI Format: label XI D(B),byte
The byte located at D(B) and the immediate byte specified by byte are XORed together. The result of the operation is placed at D(B).
SS Format: label XC D1(L,B1),D2(B2)
The L byte storage areas at D1(B1) and D2(B2) are XORed together. The result of the operation is placed starting at D1(B1).
For all formats, if every bit of the result is 0, the condition code is set to 0; otherwise the condition code is set to 1.
XOR Examples: Suppose that a storage area called FLD1 contains X'C2C3'. In binary: FLD1 1100 0010 1100 0011 Execution of the instruction: XC FLD1(2),FLD1 FLD1 1100 0010 1100 0011 FLD1 1100 0010 1100 0011 FLD1 RESULT 0000 0000 0000 0000 will set the field to all zeros. So, XORing a field against itself will set the field to all zeros. Suppose that R5 contains 00 00 0A 07 and R7 contains 00 34 00 67. Then execution of the instruction: XR R5,R7 Register 5 0000 0000 0000 0000 0000 1010 0000 0111 Register 7 0000 0000 0011 0100 0000 0000 0110 0111 0000 0000 0011 0100 0000 1010 0110 0000 Now R5 contains 00 34 0A 60 and R7 contains 00 34 00 67 Execution of: XR R7,R5 Register 7 0000 0000 0011 0100 0000 0000 0110 0111 Register 5 0000 0000 0011 0100 0000 1010 0110 0000 0000 0000 0000 0000 0000 1010 0000 0111 Now R5 contains 00 34 0A 60 and R7 contains 00 00 0A 07 Execution of: XR R5,R7 Register 5 0000 0000 0011 0100 0000 1010 0110 0000 Register 7 0000 0000 0000 0000 0000 1010 0000 0111 0000 0000 0011 0100 0000 0000 0110 0111 Now R5 contains 00 34 00 67 and R7 contains 00 00 0A 07 The three XR instructions swapped the contents of the two registers.