MVI is used to move a one byte immediate constant to a field in storage.  Operand 1 denotes the field in main storage, while the second operand is coded as a self-defining term that gets assembled as a one byte immediate constant (II2) in the second byte of the object code.  Only the first byte of Operand 1 is affected by the move. 

 

   As an example, consider the following code,

 

                    MVI  FIELDA,X’C1’

                    ...

             FIELDA DC   X’123456’

 

After execution, FIELDA contains X’C13456’.  Only the first byte of the field is altered by the immediate instruction.    

 

The following example illustrates how an MVI instruction might be processed by the assembler.

 

     LOC      OBJECT CODE

 

 000F12  92F4C044                   MVI    CUSTCODE,C’4’  

                                    ...

 001028                CUSTCODE     DS    CL1

 

In the example above, the op-code for MVI is x’92’,  the self-defining term C’4’ is assembled as the one byte hexadecimal constant x’F4’, and CUSTCODE is translated into the base/displacement address C044.

 

 

          Some Unrelated MVI’s:

 

   J        DC    C’ABC’

 

            MVI   J,C’X’  J = C’XBC’

            MVI   J,C’B’  J = C’BBC’

            MVI   J,C’5’  J = C’5BC’

            MVI   J,X’F5’ J = C’5BC’

            MVI   J,197   J = C’5BC’

            MVI   J,=C’5’ ASSEMBLY ERROR - OPERAND 2 NOT A SELF-DEFINING

                          TERM

            MVI   J(1),X’C5’  ASSEMBLY ERROR - LENGTH SPECIFICATION NOT

                              ALLOWED IN OPERAND 1