Section 3.11

Group 11

Function-number 110  [1011 000]

3-address:  x' = (x & ¬y) Ú (z & y)
2-address:  x' = (x & ¬y)

3-address:   Insert bit from z into x wherever y has a 1, leaving the bit in x unchanged wherever y has a 0.
2-address:   Wherever y has a 1 make the bit in x an 0, wherever y has an 0 leave the bit in x unchanged.

OVR cannot be set.

The word y is used as a mask or 'filter'.  The (x & ¬y) operation leaves the bits of x unchanged in those digit-positions where y has 0's and puts 0's in x wherever y has 1's.  In 2-address form, this is the result which is written into X.  In 3-address form, the process is continued by making the bit in x the same as that in z in those positions where y has 1's.  This result is then written into X.

There is no restriction on the number or positions of the 1-bits in y; y=048 and y = 148 yield the trivial cases x' = x and x' = z (or 0) respectively.

Function-number 111  [1011 001]

3-address:  x' = (x & ¬Y) Ú (z & Y)
2-address:  x' = (x & ¬Y)

Verbal description as for function-number 110 but with Y in place of y.  OVR cannot be set.

The mask Y is confined to the l.s. end of the word (15-bits if Y is not modified or replaced, 24-bits otherwise) but the arrangement of bits within this field is unrestricted.

Function-number 112  [1011 010]

3-address:  x' = (x & ¬pY) Ú (z & pY)
2-address:  x' = (x & ¬pY)

Verbal description as for 110 but with pY (content of pseudo-register) in place of y.  OVR cannot be set.

Function-number 113  [1011 011]

This function is illegal.

Function number 114  [1011 100]

3-address:  z' = y  y' = x
2-address:  x' = y  y' = x

The three address form copies x and y to Y and Z respectively; the two address form interchanges x and y.  The actual order of operations in the three address form is: read x, read y, write z', write y'.  Thus the instruction

                       114       A1       A2       A2
is equivalent to:  04       A2       A1

The most common use of the three address form is to search through a list where a pointer to the previous entry must be kept.  The instruction

                       114     (A1)      A1       A2

has the effect of putting the next pointer into A1, preserving the previous one in A2.

Function-number 115  [l011 10l]

3-address:  z' = x + (Y shifted cyclically right 6 places) with end around carry.
2-address:  as 3-address but with x' in place of z'.

Add the l.s. 6 bits of Y to the m.s. 6 bits of x and the rest of Y to xm with end around carry, writing the result to Z, 3-address, or to X, 2-address.  Note that the end-around carry continues until all carries have died down; e.g. if A1 contains the integer -1 then after the instruction 115 A1 64 it will contain the integer +1.  The instruction is chiefly used for stepping character modifiers as used with the 122 and 123 instructions (see section 3.12).  It cannot set overflow.

Function-number 116  [1011 110]

Add X, Y to the X and Y addresses of the next instruction before any replacement in that instruction.

Function-number 117  [1011 111]

Add X, Y to the X and Y addresses of the next instruction after any replacement in that instruction.

These two instructions are 'premodify' instructions - they are used to get complex forms of address modification which cannot be obtained with internal modification and replacement only.  The instructions may themselves be replaced and/or modified as usual.  The effective 24-bit X and Y addresses are formed in the arithmetic unit as usual; they are then held there until the next instruction has been extracted from the store, when they are added to the X and Y addresses of this instruction before replacement in the case of the 116 instruction, or after replacement for the 117 instruction.  Note that this addition takes place in the arithmetic unit only - the instruction as stored is not changed.

Example   Suppose A51 contains the address of a table B whose ith member (where i is contained in A63m) contains the address of a table C.  It is required to copy the jth member (where j is contained in A6lm) of C into A49.  Then:

  116Y  0     (A51)   A63
  117    0     (0)
  04     A49  (A61)

will have the desired effect.

The above description applies to both the two and three address forms of these instructions.  The instructions are basically two-address - in the three address form Z is ignored and may be used to hold a constant if required.

A string of 116 and 117 instructions followed by a substantive instruction are, in many ways, regarded as a single compound instruction by the microprogram - for example a program may not be interrupted in the middle of a string for external reasons; if it is interrupted because, for example, one of the addresses referred to is locked out, then the whole string will be repeated when the program is next entered.  In engineers' mode the maximum length of a string is 13; in programmers' mode a string longer than 13 causes entry to the Monitor Routine which interprets it correctly - thus in programmers' mode there is effectively no limit to the length of a string - but strings longer than 13 will take about 50 millisecs to execute.