When IBM brought out the /360 mainframe in 1964, one thing that took some getting your head around was processing Condition Codes.

Many operations set a “condition code” which indicated the result of the operation and which could be tested by a Branch-On-Condition instruction:

BC xx,yyyy = Branch to yyyy on Condition xx

Part of the problem was syntax – the term “Condition Code” had two meanings:

Hardware: The four 2-bit possibilities set by the previous operation

Assembler: The values assigned to those four possibilities for testing purposes.

2-bits Assigned

set values

00 = 8

01 = 4

10 = 2

11 = 1

In addition, the assigned values could be OR’d for testing.

BC 08,yyyy means Branch if 2-bits were 00

BC 04,yyyy means Branch if 2-bits were 01

BC 02,yyyy means Branch if 2-bits were 10

BC 01,yyyy means Branch if 2-bits were 11

BC 12,yyyy means Branch if 2-bits were 00 **or** 01

BC 10,yyyy means Branch if 2-bits were 00 **or** 10

BC 09,yyyy means Branch if 2-bits were 00 **or** 11

BC 07,yyyy means Branch if 2-bits were 01 **or** 10 **or** 11

Note: 08 and 07 are complimentary numbers re 15

Thus if BC 08 means Branch Equal, BC 07 means Branch Not Equal

The same is true of other complementary pairs; BC 12 vs BC 3; BC 9 vs BC 6, etc.

BC 15,yyyy means Branch if 2-bits were 00 **or** 01 **or** 10 **or** 11

And since that covers all possibilities, BC 15 means Absolute Branch

And BC 00,yyyy is a No-Op, since one of the 4 possibilities had to have been set.

There were many Assembler instructions which resolved to one of the 16 possible values

BZ = Branch Equal

BH = Branch High

BL = Branch Low

BNZ = Branch Not Equal

BNH = Branch Not High

BNL = Branch Not Low

BHE = Branch High or Equal

BLE = Branch Low or Equal

BZ = Branch Zero

BNZ = Branch Not Zero

BO = Branch Overflow

etc etc etc

Two binary bits = 4 possible hardware settings = 16 programmable conditions!