| 
     
     
         
 
 
  
 
  
 
  
 
  
 
  
 
  
 
          | 
     
     
         | 
          
          
          
          Updated: 
          
11 December 1998
          
          
          
          | 
      
 
 
VAX MACRO and Instruction Set Reference Manual
DEC
Decrement
Format
 opcode dif.mx 
Condition Codes
  
    | 
      N|| <--- dif LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dif EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow};
     | 
    
       
     | 
  
  
    | 
      C|| <--- {borrow into most significant bit};
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      97
     | 
    
      DECB
     | 
    
      Decrement Byte
     | 
  
  
    | 
      B7
     | 
    
      DECW
     | 
    
      Decrement Word
     | 
  
  
    | 
      D7
     | 
    
      DECL
     | 
    
      Decrement Long
     | 
  
Description
One is subtracted from the difference operand, and the difference 
operand is replaced by the result.
Notes
  - Integer overflow occurs if the largest negative integer is 
  decremented. On overflow, the difference operand is replaced by the 
  largest positive integer.
  
 - DECx dif is equivalent to SUBx 
  S^#1, dif, but is 1 byte shorter.
 
DIV
Divide
Format
 2operand: opcode divr.rx, quo.mx 
 3operand: opcode divr.rx, divd.rx, quo.wx 
Condition Codes
  
    | 
      N|| <--- quo LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- quo EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow} OR {divr EQL 0};
     | 
    
       
     | 
  
  
    | 
      C|| <--- 0;
     | 
    
       
     | 
  
Exceptions
  - integer overflow
  
 - divide by zero
 
Opcodes
  
    | 
      86
     | 
    
      DIVB2
     | 
    
      Divide Byte 2 Operand
     | 
  
  
    | 
      87
     | 
    
      DIVB3
     | 
    
      Divide Byte 3 Operand
     | 
  
  
    | 
      A6
     | 
    
      DIVW2
     | 
    
      Divide Word 2 Operand
     | 
  
  
    | 
      A7
     | 
    
      DIVW3
     | 
    
      Divide Word 3 Operand
     | 
  
  
    | 
      C6
     | 
    
      DIVL2
     | 
    
      Divide Long 2 Operand
     | 
  
  
    | 
      C7
     | 
    
      DIVL3
     | 
    
      Divide Long 3 Operand
     | 
  
Description
In 2 operand format, the quotient operand is divided by the divisor 
operand, and the quotient operand is replaced by the result. In 3 
operand format, the dividend operand is divided by the divisor operand, 
and the quotient operand is replaced by the result.
Notes
  - Division is performed so that the remainder has the same sign as 
  the dividend; that is, the result is truncated toward zero. (Note that 
  a remainder of zero is not saved.)
  
 - Integer overflow occurs only if the largest negative integer is 
  divided by --1. On overflow, operands are affected as in note 3 
  following.
  
 - If the divisor operand is zero, then in 2 operand format the 
  quotient operand is not affected; in 3 operand format the quotient 
  operand is replaced by the dividend operand.
 
EDIV
Extended Divide
Format
 opcode divr.rl, divd.rq, quo.wl, rem.wl 
Condition Codes
  
    | 
      N|| <--- quo LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- quo EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow} OR {divr EQL 0};
     | 
    
       
     | 
  
  
    | 
      C|| <--- 0;
     | 
    
       
     | 
  
Exceptions
  - integer overflow
  
 - divide by zero
 
Opcodes
Description
The dividend operand is divided by the divisor operand, the quotient 
operand is replaced by the quotient, and the remainder operand is 
replaced by the remainder.
Notes
  - The division is performed such that the remainder operand (unless 
  it is zero) has the same sign as the dividend operand.
  
 - On overflow, the operands are affected as in note 3, following.
  
 - If the divisor operand is zero, then the quotient operand is 
  replaced by bits 31:0 of the dividend operand, and the remainder 
  operand is replaced by zero.
 
EMUL
Extended Multiply
Format
 opcode mulr.rl, muld.rl, add.rl, prod.wq 
Condition Codes
  
    | 
      N|| <--- prod LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- prod EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      C|| <--- 0;
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      7A
     | 
    
      EMUL
     | 
    
      Extended Multiply
     | 
  
Description
The multiplicand operand is multiplied by the multiplier operand, 
giving a double-length result. The addend operand is sign extended to 
double length and added to the result. The product operand is replaced 
by the final result.
INC
Increment
Format
 opcode sum.mx 
Condition Codes
  
    | 
      N|| <--- sum LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- sum EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow};
     | 
    
       
     | 
  
  
    | 
      C|| <--- {carry from most significant bit};
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      96
     | 
    
      INCB
     | 
    
      Increment Byte
     | 
  
  
    | 
      B6
     | 
    
      INCW
     | 
    
      Increment Word
     | 
  
  
    | 
      D6
     | 
    
      INCL
     | 
    
      Increment Long
     | 
  
Description
One is added to the sum operand and the sum operand is replaced by the 
result.
Notes
  - Arithmetic overflow occurs if the largest positive integer is 
  incremented. On overflow, the sum operand is replaced by the largest 
  negative integer.
  
 - INCx sum is equivalent to ADDx 
  S^#1, sum, but is 1 byte shorter.
 
MCOM
Move Complemented
Format
 opcode src.rx, dst.wx 
Condition Codes
  
    | 
      N|| <--- dst LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dst EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      C|| <--- C;
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      92
     | 
    
      MCOMB
     | 
    
      Move Complemented Byte
     | 
  
  
    | 
      B2
     | 
    
      MCOMW
     | 
    
      Move Complemented Word
     | 
  
  
    | 
      D2
     | 
    
      MCOML
     | 
    
      Move Complemented Long
     | 
  
Description
The destination operand is replaced by the one's complement of the 
source operand.
MNEG
Move Negated
Format
 opcode src.rx, dst.wx 
Condition Codes
  
    | 
      N|| <--- dst LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dst EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow};
     | 
    
       
     | 
  
  
    | 
      C|| <--- dst NEQ 0;
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      8E
     | 
    
      MNEGB
     | 
    
      Move Negated Byte
     | 
  
  
    | 
      AE
     | 
    
      MNEGW
     | 
    
      Move Negated Word
     | 
  
  
    | 
      CE
     | 
    
      MNEGL
     | 
    
      Move Negated Long
     | 
  
Description
The destination operand is replaced by the negative of the source 
operand.
Note
Integer overflow occurs if the source operand is the largest negative 
integer (which has no positive counterpart). On overflow, the 
destination operand is replaced by the source operand.
MOV
Move
Format
 opcode src.rx, dst.wx 
Condition Codes
  
    | 
      N|| <--- dst LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dst EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      C|| <--- C;
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      90
     | 
    
      MOVB
     | 
    
      Move Byte
     | 
  
  
    | 
      B0
     | 
    
      MOVW
     | 
    
      Move Word
     | 
  
  
    | 
      D0
     | 
    
      MOVL
     | 
    
      Move Long
     | 
  
  
    | 
      7D
     | 
    
      MOVQ
     | 
    
      Move Quad
     | 
  
  
    | 
      7DFD
     | 
    
      MOVO
     | 
    
      Move Octa
     | 
  
Description
The destination operand is replaced by the source operand.
MOVZ
Move Zero-Extended
Format
 opcode src.rx, dst.wy 
Condition Codes
  
    | 
      N|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dst EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      C|| <--- C;
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      9B
     | 
    
      MOVZBW
     | 
    
      Move Zero-Extended Byte to Word
     | 
  
  
    | 
      9A
     | 
    
      MOVZBL
     | 
    
      Move Zero-Extended Byte to Long
     | 
  
  
    | 
      3C
     | 
    
      MOVZWL
     | 
    
      Move Zero-Extended Word to Long
     | 
  
Description
For MOVZBW, bits 7:0 of the destination operand are replaced by the 
source operand; bits 15:8 are replaced by zero. For MOVZBL, bits 7:0 of 
the destination operand are replaced by the source operand; bits 31:8 
are replaced by zero. For MOVZWL, bits 15:0 of the destination operand 
are replaced by the source operand; bits 31:16 are replaced by zero.
MUL
Multiply
Format
 2operand: opcode mulr.rx, prod.mx 
 3operand: opcode mulr.rx, muld.rx, prod.wx 
Condition Codes
  
    | 
      N|| <--- prod LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- prod EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow};
     | 
    
       
     | 
  
  
    | 
      C|| <--- 0;
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      84
     | 
    
      MULB2
     | 
    
      Multiply Byte 2 Operand
     | 
  
  
    | 
      85
     | 
    
      MULB3
     | 
    
      Multiply Byte 3 Operand
     | 
  
  
    | 
      A4
     | 
    
      MULW2
     | 
    
      Multiply Word 2 Operand
     | 
  
  
    | 
      A5
     | 
    
      MULW3
     | 
    
      Multiply Word 3 Operand
     | 
  
  
    | 
      C4
     | 
    
      MULL2
     | 
    
      Multiply Long 2 Operand
     | 
  
  
    | 
      C5
     | 
    
      MULL3
     | 
    
      Multiply Long 3 Operand
     | 
  
Description
In 2 operand format, the product operand is multiplied by the 
multiplier operand, and the product operand is replaced by the low half 
of the double-length result. In 3 operand format, the multiplicand 
operand is multiplied by the multiplier operand, and the product 
operand is replaced by the low half of the double-length result.
Note
Integer overflow occurs if the high half of the double-length result is 
not equal to the sign extension of the low half of the double-length 
result.
PUSHL
Push Long
Format
 opcode src.rl 
Condition Codes
  
    | 
      N|| <--- src LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- src EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      C|| <--- C;
     | 
    
       
     | 
  
Exceptions
Opcodes
Description
The longword source operand is pushed on the stack.
Notes
  - PUSHL is equivalent to MOVL src, --(SP), but is 1 
  byte shorter.
  
 - POPL is not a VAX instruction. However, the assembler recognizes 
  the inclusion of POPL destination in a program, for which it 
  generates the code for MOVL (SP)+,destination.
 
ROTL
Rotate Long
Format
 opcode cnt.rb, src.rl, dst.wl 
Condition Codes
  
    | 
      N|| <--- dst LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dst EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- 0;
     | 
    
       
     | 
  
  
    | 
      C|| <--- C;
     | 
    
       
     | 
  
Exceptions
Opcodes
Description
The source operand is rotated logically by the number of bits specified 
by the count operand, and the destination operand is replaced by the 
result. The source operand is unaffected. A positive count operand 
rotates to the left. A negative count operand rotates to the right. A 
zero count operand replaces the destination operand with the source 
operand.
SBWC
Subtract with Carry
Format
 opcode sub.rl, dif.ml 
Condition Codes
  
    | 
      N|| <--- dif LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dif EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow};
     | 
    
       
     | 
  
  
    | 
      C|| <--- {borrow into most significant bit};
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      D9
     | 
    
      SBWC
     | 
    
      Subtract with carry
     | 
  
Description
The subtrahend operand and the contents of the condition code C-bit are 
subtracted from the difference operand, and the difference operand is 
replaced by the result.
Notes
  - On overflow, the difference operand is replaced by the low-order 
  bits of the true result.
  
 - The two subtractions in the operation are performed simultaneously.
 
SUB
Subtract
Format
 2operand: opcode sub.rx, dif.mx 
 3operand: opcode sub.rx, min.rx, dif.wx 
Condition Codes
  
    | 
      N|| <--- dif LSS 0;
     | 
    
       
     | 
  
  
    | 
      Z|| <--- dif EQL 0;
     | 
    
       
     | 
  
  
    | 
      V|| <--- {integer overflow};
     | 
    
       
     | 
  
  
    | 
      C|| <--- {borrow into most significant bit};
     | 
    
       
     | 
  
Exceptions
Opcodes
  
    | 
      82
     | 
    
      SUBB2
     | 
    
      Subtract Byte 2 Operand
     | 
  
  
    | 
      83
     | 
    
      SUBB3
     | 
    
      Subtract Byte 3 Operand
     | 
  
  
    | 
      A2
     | 
    
      SUBW2
     | 
    
      Subtract Word 2 Operand
     | 
  
  
    | 
      A3
     | 
    
      SUBW3
     | 
    
      Subtract Word 3 Operand
     | 
  
  
    | 
      C2
     | 
    
      SUBL2
     | 
    
      Subtract Long 2 Operand
     | 
  
  
    | 
      C3
     | 
    
      SUBL3
     | 
    
      Subtract Long 3 Operand
     | 
  
Description
In 2 operand format, the subtrahend operand is subtracted from the 
difference operand, and the difference operand is replaced by the 
result. In 3 operand format, the subtrahend operand is subtracted from 
the minuend operand, and the difference operand is replaced by the 
result.
Note
Integer overflow occurs if the input operands to the subtract are of 
different signs and the sign of the result is the sign of the 
subtrahend. On overflow, the difference operand is replaced by the 
low-order bits of the true result.