The Execute instruction causes the computer to execute a “target” instruction which is referenced in Operand 2 and which is typically placed out of the normal sequence of instructions, usually among a collection of DC’s or DS’s. After the target instruction is executed, control returns to the instruction following the EX instruction unless the target instruction was a branch.  If  the target instruction is a conditional branch, then control would resume at the address specified in the branch if the condition being tested is true.  If the target instruction is an unconditional branch, then execution would resume at the address specified in the branch instruction.  Typically, the target instruction is an MVC.

 

   If Operand 1 is not register zero, then the target instruction is temporarily modified before it is executed:  The rightmost byte of the register specified by Operand 1 (bits 24 - 31) is “OR-ed” into the second byte of the target instruction.  Usually the second byte contains x’00’ which means that the rightmost byte of Operand 1 is copied into the second byte of the target instruction just before the target instruction is executed.  In the case where the target is an MVC instruction, the second byte is the length byte (the number of bytes to be moved).  This means the length can be dynamically changed before executing the MVC instruction.  This is an important reason to use EX.

 

   If Operand 1 is register zero, then the target instruction is executed without modification.  Here is an example.  We execute the following instruction

      

        EX    R5,TARGET

 

 

   In the previous example the target instruction moves a field called “Y” to a field called “X”.  Notice that the length in operand 1 is explicitly zero.  By coding this we guarantee that the second byte that is assembled for the MVC instruction contains x’00’.  Before executing the target instruction, the length contained in the rightmost byte of register 5 (x’03’) is “Or-ed” into the second byte of the MVC instruction.  Since this byte is all binary 0’s, the “Or” works like a copy.  At run-time, the length byte contains x’03’ which causes 4 bytes to be moved into X. Remember that for MVC’s, the number of bytes in the object code is always 1 less than the number of bytes that the machine moves.

 

        Some Unrelated EXs

 

              R4 =  X’00000005’  

              R5 =  X’FFFFFF04’

              R6 =  X’00000034’

 

              Instruction                                              Object Code

 

   TARGET1    MVC   FIELDA(0),FIELDB         D2 00 C0 10 C0 20

   TARGET2    AP    FIELDC(0),FIELDD(0)      FA 00 C0 22 C0 34

   TARGET3    LR    R0,R0                    18 00

 

              EX    R4,TARGET1  MOVES 6 BYTES FROM FIELDB TO FIELDA

              EX    R5,TARGET1  MOVES 5 BYTES (ONLY RIGHTMOST BYTE OF R5

                                DETERMINES THE LENGTH)

              EX    R6,TARGET1  MOVE 53 BYTES (LENGTH IS IN HEX)

              EX    R6,TARGET2  THE SECOND BYTE OF AN AP CONTAINS TWO

                                LENGTHS.  FIELDD (5 BYTES) IS ADDED TO

                                FIELDC (4 BYTES).

              EX    R6,TARGET3  THE SECOND BYTE OF AN LR SPECIFIES 2

                                REGISTERS.  REGISTER 4 IS LOADED INTO

                                REGISTER 3.

 

1.  The standard use for an execute instruction is to support variable length moves.  The previous examples illustrate that instructions other than MVC can be executed but this should be carefully considered.  For instance, in executing an LR instruction, the registers can be selected dynamically.  This is probably not a wise choice and may result in a program that is very difficult to debug.

 

2.  When coding the target instruction, be sure and specify an explicit length of zero so the second byte of the machine code is x’00’.

 

3.  Place the target instruction in a place where it will never be executed except as the target of an EX instruction.  Most programmers put the target instructions among their DS’s and DC’s.

 

4.  While the target instruction can be any instruction except another EX instruction, you should limit the target instructions to MVC’s.