[comp.os.vms] Instruction set help file part 4 of 4

NED@YMIR.BITNET (Ned Freed) (08/06/87)

==Instruction set help file part 4==cut here==cut here==cut here==cut here==
                65FD  MULH3    Multiply H__floating 3 operand
.index ^Instructions, machine><MULH3
.if manual
.s 1
.endif manual
Notes:          The times above for all integer multiplies assume all
                operands are ones. If zeros are used, the times are:
                MULx2 - [780-1.60] or MULx3 - [780-1.80], x = B, W
                or L.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*MULP instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><MULP
.else manual
2 MULP
.endif manual
.nf
Purpose:        multiply one packed decimal string by a second,
                result placed in third
.if manual
.s 1
.endif manual
Format:         opcode mulrlen.rw,mulraddr.ab,muldlen.rw,
                       muldaddr.ab,prodlen.rw,prodaddr.ab
.if manual
.s 1
.endif manual
Operation:      {prod string} = {muld string} * {mulr string}
.if manual
.s 1
.endif manual
C. Codes:       N = {{prod string} LSS 0}, V = {decimal overflow},
                Z = {{prod string} EQL 0}, C = 0
.if manual
.s 1
.endif manual
Exceptions:     Reserved operand, decimal overflow
.if manual
.s 1
.endif manual
Opcode:         25    MULP     Multiply packed
                               [780-98.02, 750-105.05, 730-757.02]
                               [780F-98.03, 750F-105.05, 730F-746.83]
.if manual
.s 1
.endif manual
Description:    The multiplicand string muld specified by muldaddr
                and muldlen is multiplied by the multiplier string
                mulr specified by mulraddr and mulrlen. The product
                is placed in the string prod as specified by prodaddr
                and prodlen.
.if manual
.s 1
.endif manual
Notes:          After execution R0 = R2 = R4 = 0, R1 = address of
                the most significant digit of mulr, R3 = address
                of the most significant digit of muld and R5 =
                address of the most significant digit of prod. prod,
                the condition codes and R0-R6 are unpredictable if
                prod overlaps mulr or muld, mulr or muld contains an
                invalid nibble or a reserved operand abort occurs.
                The times for MULP shown above assume 7 digit
                operands; if 18 digit operands are used the times are:
                [780-397.88, 750-439.22, 730-3343.35]
                [780F-397.88, 750F-439.22, 730F-3299.22]
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*POLYx instructions\*
.restore
.send toc .endif global
.else manual
2 POLYx
.endif manual
.nf
Purpose:        allows fast calculation of math functions
.if manual
.s 1
.endif manual
Format:         opcode arg.x,degree.rw,tbladdr.ab
.if manual
.s 1
.endif manual
Operation:      result = Cdegree (first table entry)
                For degree times, loop
                  result = arg * result
                    Perform multiply and retain an extended
                    floating fraction of 31 bits (POLYF) or
                    63 bits (POLYD). The fraction is truncated
                    before normalization.
                  result = result + Cnext (next table entry)
                    Normalize, round and check for over/
                    underflow only after the combined multiply/
                    add sequence.
                  if overflow then trap.
                  if underflow then clear result, remember
                  underflow and continue looping.
.if manual
.s 1
.endif manual
C. Codes:       N = {R0 LSS 0}, Z = {R0 EQL 0},
                V = {floating overflow}, C = 0
.if manual
.s 1
.endif manual
Exceptions:     Floating overflow/underflow, reserved operand
.if manual
.s 1
.endif manual
Opcodes:        55    POLYF    Polynomial evaluation F__floating
.index ^Instructions, machine><POLYF
                               [780-38.59, 750-80.80, 730-269.50]
                               [780F-9.49, 750F-25.35, 730F-77.72]
                75    POLYD    Polynomial evaluation D__floating
.index ^Instructions, machine><POLYD
                               [780-131.65, 750-191.81, 730-504.43]
                               [780F-17.32, 750F-36.49, 730F-102.13]
                55FD  POLYG    Polynomial evaluation G__floating
.index ^Instructions, machine><POLYG
                               [780-153.17, 750-226.53, 730-496.63]
                               [780F-153.20, 750F-226.53, 730F-111.91]
                75FD  POLYH    Polynomial evaluation H__floating
.index ^Instructions, machine><POLYH
                               [780-579.34, 750-681.13, 730-1255.15]
                               [780F-579.68, 750F-681.13, 730F-415.34]
.if manual
.s 1
.endif manual
Notes:          The times shown assume a 4th order polynomial.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*POPR instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><POPR
.else manual
2 POPR
.endif manual
.nf
Purpose:        restore multiple registers from stack
.if manual
.s 1
.endif manual
Format:         opcode mask.rw
.if manual
.s 1
.endif manual
Operation:      Restore registers in order R14 .. R0
.if manual
.s 1
.endif manual
C. Codes:       Not affected
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         BA    POPR     Pop registers [780-4.20]
.if manual
.s 1
.endif manual
Description:    The contents of the registers whose number
                corresponds to set bits in the mask operand
                are replaced by longwords popped from the stack.
                R[n] is pushed if mask _<n_> is set. The mask is
                scanned from bit 14 to bit 0. Bit 15 is ignored.
.if manual
.s 1
.endif manual
Notes:          The time shown assumes R9 only was popped. If R0
                only is popped the time is [780-3.20]. If R0
                through R9 are popped the time is [780-7.80].
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*PROBEx instructions\*
.restore
.send toc .endif global
.else manual
2 PROBEx
.endif manual
.nf
Purpose:        probe accessibility - verify arguments
.if manual
.s 1
.endif manual
Format:         opcode mode.rb,len.rw,base.ab
.if manual
.s 1
.endif manual
Operation:      probe__mode = MAXU (mode_<1:0_>, PSL _<PRV__MOD_>);
                condition__codes = {{accessibility of base} AND
                {accessibilty of (base + ZEXT (len) - 1)} using
                probe__mode}
.if manual
.s 1
.endif manual
C. Codes:       N = 0, V = 0, C = 0,
                Z = {if {accessible} then 0 else 1}
.if manual
.s 1
.endif manual
Execeptions:    Translation not valid
.if manual
.s 1
.endif manual
Opcodes:        0C    PROBER   Probe read accessibility
.index ^Instructions, machine><PROBER
                0D    PROBEW   Probe write accessibility
.index ^Instructions, machine><PROBEW
.if manual
.s 1
.endif manual
Description:    The PROBE instruction checks the read or write
                accessibility of the first and last byte specified
                by base and the zero extended length -- the bytes
                in between are not checked. System software must
                check all the pages in between if they are to be
                accessed. The protection is checked against the
                larger of the modes specified in bits _<1:0_> of the
                mode operand and the previous mode field of the PSL.
                Note that probing with a mode operand of 0 is
                equivalent to probing the previous mode.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*PUSHAx instructions\*
.restore
.send toc .endif global
.else manual
2 PUSHAx
.endif manual
.nf
Purpose:        push address - calculate address of quantity
.if manual
.s 1
.endif manual
Format:         opcode src.ax
.if manual
.s 1
.endif manual
Operation:      -(SP) = src
.if manual
.s 1
.endif manual
C. Codes:       N = {result LSS 0}, Z = {result EQL 0}, V = 0, C = 0
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcodes:        9F    PUSHAB   Push address of byte [780-1.20]
.index ^Instructions, machine><PUSHAB
                3F    PUSHAW   Push address of word [780-1.20]
.index ^Instructions, machine><PUSHAW
                DF    PUSHAL   Push address of long [780-1.20]
.index ^Instructions, machine><PUSHAL
                7F    PUSHAQ   Push address of quad [780-1.20]
.index ^Instructions, machine><PUSHAQ
                7FFD  PUSHAO   Push address of octa
.index ^Instructions, machine><PUSHAO
                DF    PUSHAF   Push address of F__floating [780-1.20]
.index ^Instructions, machine><PUSHAF
                7F    PUSHAD   Push address of D__floating [780-1.20]
.index ^Instructions, machine><PUSHAD
                7F    PUSHAG   Push address of G__floating [780-1.20]
.index ^Instructions, machine><PUSHAG
                7FFD  PUSHAH   Push address of H__floating
.index ^Instructions, machine><PUSHAH
.if manual
.s 1
.endif manual
Description:    The address of src is pushed on the stack. The context
                in which src is evaluated is given by the data type of
                the instruction. The operand at the address of src is
                not referenced. PUSHAx is equivalent to
                MOVAx src,-(SP) but is shorter.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*PUSHL instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><PUSHL
.else manual
2 PUSHL
.endif manual
.nf
Purpose:        push source operand onto stack
.if manual
.s 1
.endif manual
Format:         opcode src.rl
.if manual
.s 1
.endif manual
Operation:      -(SP) = src
.if manual
.s 1
.endif manual
C. Codes:       N = {src LSS 0}, Z = {src EQL 0}, V = 0, C = C
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         DD    PUSHL    Push long [780-1.00]
.if manual
.s 1
.endif manual
Description:    The long word source operand is pushed on
                the stack.
.if manual
.s 1
.endif manual
Notes:          PUSHL is equivalent to MOVL src,-(SP), but is shorter.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*PUSHR instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><PUSHR
.else manual
2 PUSHR
.endif manual
.nf
Purpose:        save multiple registers on stack
.if manual
.s 1
.endif manual
Format:         opcode mask.rw
.if manual
.s 1
.endif manual
Operation:      Save registers in order R0 .. R14
.if manual
.s 1
.endif manual
C. Codes:       Not affected
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         BB    PUSHR    Push registers [780-4.00]
.if manual
.s 1
.endif manual
Description:    The contents of the registers whose number corresponds
                to set bits in the mask operand are pushed on the
                stack as longwords. R[n] is pushed if mask _<n_> is set.
                The mask is scanned from bit 14 to bit 0. Bit 15 is
                ignored.
.if manual
.s 1
.endif manual
Notes:          The time shown assumes R9 only is pushed. If R0
                only is pushed the time is [780-3.80]. If R0 through
                R9 are pushed the time is [780-16.20].
.if manual
.s 1
.endif manual
Example:        PUSHR    _#_^M_<R1,R6,R7_>     ;saves R1, R6 and R7
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*REI instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><REI
.else manual
2 REI
.endif manual
.nf
Purpose:        exit from an exception or interrupt service routine
                and control the return
.if manual
.s 1
.endif manual
Format:         opcode
.if manual
.s 1
.endif manual
Operation:      tmp1 = (SP)+; tmp2 = (SP)+;
                if {tmp2_<current__mode_> LSSU PSL_<current__mode_>} OR
                   {{tmp2_<IS_> EQLU 1} AND {PSL_<IS_> EQLU 0}} OR
                   {{tmp2_<IS_> EQLU 1} AND
                    {tmp2_<current__mode_> NEQU 0}} OR
                   {{tmp2_<IS_> EQLU 1} AND {tmp2_<IPL_> EQLU 0}} OR
                   {{tmp2_<IPL_> GRTU 0} AND
                    {tmp2_<current__mode_> NEQU 0}} OR
                   {tmp2_<previous__mode_> LSSU tmp2_<current__mode_>} OR
                   {tmp2_<IPL_> GTRU PSL_<IPL_>} OR
                   {tmp2_<PSL__MBZ_> NEQU 0} then
                  {reserved operand fault};
                if {tmp2_<CM_> EQLU 1} AND
                   {{tmp2_<FPD, IS, DV, FU, IV_> NEQU 0} OR
                   {tmp2_<current__mode_> NEQU 3}} then
                  {reserved operand fault};
                if PSL_<IS_> EQLU 1 then ISP = SP else
                  PSL_<current__mode_>__SP = SP;
                if PSL_<TP_> EQLU 1 then tmp2_<TP_> = 1;
                PC = tmp1;
                PSL = tmp2;
                if PSL_<IS_> EQLU 0 then
                begin
                  SP = PSL_<current__mode_>__SP;
                  if PSL_<current__mode_> GEQU ASTLVL
                  then {request interrupt at IPL 2};
                end;
                {check for software interrupts}
.if manual
.s 1
.endif manual
C. Codes:       N = {saved PSL_<3_>}, Z = {saved PSL_<2_>},
                V = {saved PSL_<1_>}, C = {saved PSL_<0_>}
.if manual
.s 1
.endif manual
Exceptions:     Reserved operand
.if manual
.s 1
.endif manual
Opcode:         02    REI      Return from exception or interrupt
.if manual
.s 1
.endif manual
Description:    A longword is popped from the current stack and
                held in a temporary PC. A second longword is popped
                and held in a temporary PSL. Validity of the popped
                PSL is checked. The current stack pointer is saved
                and a new stack is selected according to the new
                PSL current__mode and IS fields. The level of the
                highest privilege AST is checked against the current
                access mode to see whether a pending AST can be
                delivered. Execution resumes with the instruction
                being executed at the time of the exception or
                interrupt. Any instruction lookahead in the CPU
                is reinitialized.
.if manual
.s 1
.endif manual
Notes:          The exception or interrupt service routine is
                responsible for restoring any registers saved
                and removing any parameters from the stack.
                As usual for faults, any access violation or
                translation not valid conditions on the stack
                restore the stack pointer and fault. The
                noninterrupt stack pointers may be fetched and
                stored by hardware either in internal registers
                or in their allocated slots in the Process Control
                block. MFPR and MTPR always fetch and store the
                pointers whether in registers or the Process
                Control Block.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*REMQUE instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><REMQUE
.else manual
2 REMQUE
.endif manual
.nf
Purpose:        remove entry from head or tail of queue
.if manual
.s 1
.endif manual
Format:         opcode entry.ab,addr.wl
.if manual
.s 1
.endif manual
Operation:      if {all memory accesses can be completed} then
                begin
                  ((entry+4)) = (entry); ((entry)+4) = (entry+4);
                  addr = entry;
                end;
                else begin
                  {backup instruction}; {initiate fault};
                end;
.if manual
.s 1
.endif manual
C. Codes:       N = {(entry) LSS (entry+4)},
                Z = {(entry) EQL (entry+4)},
                V = {entry EQL (entry + 4)},
                C = {(entry) LSSU (entry+4)}
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         0F    REMQUE   Remove entry from queue [780-6.00]
.if manual
.s 1
.endif manual
Description:    The queue entry specified by entry is removed from
                the queue. The address operand is replaced by the
                address of the entry removed. If there way no entry
                in the queue to be removed, the condition code V is
                set; otherwise it is cleared. The removal is a
                noninterruptable operation. The entire operation is
                validated before any part is executed. If a memory
                management exception occurs the queue is left in a
                consistent state.
.if manual
.s 1
.endif manual
Notes:          Processes running in kernel mode can share queues
                with interrupt routines because the operation cannot
                be interrupted. REMQUE is implemented so that various
                processes within a single processor can share a queue
                provided that insertions and removals are done only
                at the head or the tail of the queue. REMQUE is
                similar to the interlocked sequence:
.if manual
.s 1
.endif manual
                  MOVL    entry,@entry+4
                  MOVL    entry,tempreg
                  MOVL    entry+4,4(tempreg)
                  MOVAB   entry,addr
.if manual
.s 1
.endif manual
                The time shown is valid for both empty and nonempty
                queues containing both single and multiple entries.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*RET instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><RET
.else manual
2 RET
.endif manual
.nf
Purpose:          return from called procedure
.if manual
.s 1
.endif manual
Format:           opcode
.if manual
.s 1
.endif manual
Operation:        {restore SP from FP}; {restore registers};
                  {drop stack alignment};
                  {if CALLS, remove arglist}; {restore PSW}
.if manual
.s 1
.endif manual
C. Codes:         N = tmp1_<3_>, Z = tmp1_<2_>, V = tmp1_<1_>,
                  C = tmp1_<0_>
.if manual
.s 1
.endif manual
Exceptions:       Reserved operand
.if manual
.s 1
.endif manual
Opcode:           04    RET      Return from procedure [780-4.60]
.if manual
.s 1
.endif manual
Description:    SP is replaced with FP plus 4. A longword containing
                stack alignment in bits 31:30, a CALLS/CALLG flag in
                bit 29, the low 12 bits of the procedure entry mask
                in bits 27:16 and a saved PSW in bits 15:0 is popped
                from the stack and saved in a temporary (tmp1). PC,
                FP and AP are replaced by longwords popped from the
                stack. A register restore mask is formed from bits
                27:16 of tmp1. Scanning from bit 0 to bit 11 of tmp1,
                the contents of the registers whose numbers are
                indicated by set bits in the restore mask are
                replaced by longwords popped from the stack. SP is
                incremented by bits 31:30 of tmp1. PSW is replaced by
                bits 15:0 of tmp1. If bit 29 of tmp1 is 1 (indicating
                a CALLS was used) a longword containing the number of
                arguments is popped from the stack. Four times the
                unsigned value of the low byte of this longword is
                added to SP and SP is replaced by the result.
.if manual
.s 1
.endif manual
Notes:          A reserved operand fault occurs if tmp1_<15:8_> NEQ
                0. The condition codes will be unpredictable if a
                reserved operand fault occurs. The value of bit 28
                of tmp1 is ignored. The time shown is for a return
                from a CALLS where no registers were saved. The
                corresponding time for a CALLG return is [780-4.20].
                If R0 through R9 are saved the times are CALLS -
                [780-9.60], CALLG - [780-9.20]. No arguments were
                passed in the CALLS timing examples.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*ROTL instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><ROTL
.else manual
2 ROTL
.endif manual
.nf
Purpose:        rotate of integer
.if manual
.s 1
.endif manual
Format:         opcode cnt.rb,src.rl,dst.wl
.if manual
.s 1
.endif manual
Operation:      dst = src rotated cnt bits
.if manual
.s 1
.endif manual
C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         9C    ROTL     Rotate long
                               [780-1.20, 750-1.28, 730-7.47]
                               [780F-1.20, 750F-1.28, 730F-7.36]
.if manual
.s 1
.endif manual
Description:    The source operand is rotated logically by the number
                of bits specified by the count operand and the
                destination is replaced by the result. The source
                operand is unaffected. A positive count rotates to the
                left, a negative to the right. A 0 count leaves the
                value unaffected.
.if manual
.s 1
.endif manual
Notes:          The time shown is valid at least for the tested
                distances of 1, 10, 31 and -31 on the 780. The
                time has been tested for a rotate of 10 only on
                the 750 and 730.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*RSB instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><RSB
.else manual
2 RSB
.endif manual
.nf
Purpose:        return from subroutine -
                return control from subroutine
.if manual
.s 1
.endif manual
Format:         opcode
.if manual
.s 1
.endif manual
Operation:      PC = (SP)+
.if manual
.s 1
.endif manual
C. Codes:       Not affected
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         05    RSB      Return from subroutine [780-1.00]
.if manual
.s 1
.endif manual
Notes:          RSB is equivalent to JMP @(SP)+, but is one byte
                shorter.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SBWC instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><SBWC
.else manual
2 SBWC
.endif manual
.nf
Purpose:        subtract with carry - perform extended-precision
                subtraction
.if manual
.s 1
.endif manual
Format:         opcode sub.rl,dif.ml
.if manual
.s 1
.endif manual
Operation:      dif = dif - sub - C
.if manual
.s 1
.endif manual
C. Codes:       N = {dif LSS 0}, Z = {dif EQL 0},
                V = {integer overflow}, C = {borrow from MSB}
.if manual
.s 1
.endif manual
Exceptions:     Integer overflow
.if manual
.s 1
.endif manual
Opcode:         D9    SBWC     Subtract with carry [780-0.40]
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SCANC instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><SCANC
.else manual
2 SCANC
.endif manual
.nf
Purpose:        to find one of a set of characters in a string
.if manual
.s 1
.endif manual
Format:         opcode len.rw,addr.ab,tbladdr.ab,mask.rb
.if manual
.s 1
.endif manual
Operation:      {mask each character until not zero}
.if manual
.s 1
.endif manual
C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         2A    SCANC    Scan characters
.if manual
.s 1
.endif manual
Description:    The bytes of the string specified by addr and len are
                used to index into a 256 byte table pointed to by
                tbladdr. The byte selected from the table is ANDed
                with mask. The operand proceeds until the result of
                the AND is nonzero or all the bytes of the string have
                been exhausted. If a nonzero AND result is detected
                the Z bit is set, otherwise it is cleared.
.if manual
.s 1
.endif manual
Notes:          After execution R0 = number of bytes remaining in the
                string (R0 = 0 only if Z is clear), R1 = address of
                the byte which produced a nonzero AND result or the
                address of one byte beyond the string, R2 = 0 and R3 =
                the address of the table.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SKPC instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><SKPC
.else manual
2 SKPC
.endif manual
.nf
Purpose:        to skip a character in a string
.if manual
.s 1
.endif manual
Format:         opcode char.rb,len.rw,addr.ab
.if manual
.s 1
.endif manual
Operation:      {compare each character until not equal}
.if manual
.s 1
.endif manual
C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         3B    SKPC     Scan characters
.if manual
.s 1
.endif manual
Description:    char is compared with the bytes of the string
                specified by addr and len. Comparison continues until
                char does not equal the character in the string or
                until the string is exhausted. If inequality is
                detected the Z bit is set, otherwise it is cleared.
.if manual
.s 1
.endif manual
Notes:          After execution R0 = number of bytes remaining
                in the string (R0 = 0 only if Z is clear) and R1
                = address of the byte which produced inequality
                or the address of one byte beyond the string.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SOBxxx instructions\*
.restore
.send toc .endif global
.else manual
2 SOBxxx
.endif manual
.nf
Purpose:        subtract one and branch - decrement integer loop count
                and loop
.if manual
.s 1
.endif manual
Format:         opcode index.ml,displ.bb
.if manual
.s 1
.endif manual
Operation:      index = index - 1; if {{SOBGEQ} and {index GEQ 0}} or
                {{SOBGTR} and {index GTR 0}} then
                PC = PC + SEXT (displ)
.if manual
.s 1
.endif manual
C. Codes:       N = {index LSS 0}, Z = {index EQL 0},
                V = {integer overflow}, C = C
.if manual
.s 1
.endif manual
Exceptions:     Integer overflow
.if manual
.s 1
.endif manual
Opcodes:        F4    SOBGEQ   Subtract one, branch greater or equal
.index ^Instructions, machine><SOBGEQ
                               [780-1.00]
                F5    SOBGTR   Subtract one, branch greater than
.index ^Instructions, machine><SOBGTR
                               [780-1.00]
.if manual
.s 1
.endif manual
Notes:          The times shown assume the branch is taken. If it is
                not the time for both instructions is [780-0.80].
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SPANC instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><SPANC
.else manual
2 SPANC
.endif manual
.nf
Purpose:        to skip a set of characters in a string
.if manual
.s 1
.endif manual
Format:         opcode len.rw,addr.ab,tbladdr.ab,mask.rb
.if manual
.s 1
.endif manual
Operation:      {mask each character until zero}
.if manual
.s 1
.endif manual
C. Codes:       N = 0, Z = {R0 EQL 0}, Z = 0, C = 0
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcode:         2B    SPANC    Span characters
.if manual
.s 1
.endif manual
Description:    The bytes of the string specified by addr and len are
                used to index into a 256 byte table pointed to by
                tbladdr. The byte selected from the table is ANDed
                with mask. The operand proceeds until the result of
                the AND is zero or all the bytes of the string have
                been exhausted. If a zero AND result is detected the
                Z bit is set, otherwise it is cleared.
.if manual
.s 1
.endif manual
Notes:          After execution R0 = number of bytes remaining in the
                string (R0 = 0 only if Z is clear), R1 = address of
                the byte which produced a zero AND result or the
                address of one byte beyond the string, R2 = 0 and R3 =
                the address of the table.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SUBxx instructions\*
.restore
.send toc .endif global
.else manual
2 SUBxx
.endif manual
.nf
Purpose:        perform arithmetic subtraction
.if manual
.s 1
.endif manual
Format:         opcode sub.rx,dif.mx                        ;2 operand
                opcode sub.rx,min.rx,dif.wx                 ;3 operand
.if manual
.s 1
.endif manual
Operation:      dif = dif - sub                         ;2 operand
                dif = min - sub                         ;3 operand
.if manual
.s 1
.endif manual
C. Codes:       N = {dif LSS 0}, Z = {dif EQL 0},
                V = {overflow}, C = 0 (floating),
                C = {borrow from MSB (integer)}
.if manual
.s 1
.endif manual
Exceptions:     Integer/floating overflow, floating
                underflow, reserved operand
.if manual
.s 1
.endif manual
Opcodes:        82    SUBB2    Subtract byte 2 operand [780-0.40]
.index ^Instructions, machine><SUBB2
                83    SUBB3    Subtract byte 3 operand [780-0.60]
.index ^Instructions, machine><SUBB3
                A2    SUBW2    Subtract word 2 operand [780-0.40]
.index ^Instructions, machine><SUBW2
                A3    SUBW3    Subtract word 3 operand [780-0.60]
.index ^Instructions, machine><SUBW3
                C2    SUBL2    Subtract long 2 operand [780-0.40]
.index ^Instructions, machine><SUBL2
                C3    SUBL3    Subtract long 3 operand [780-0.60]
.index ^Instructions, machine><SUBL3
                42    SUBF2    Subtract F__floating 2 operand
.index ^Instructions, machine><SUBF2
                               [780-2.21, 750-9.29, 730-45.69]
                               [780F-0.80, 750F-1.32, 730F-6.57]
                43    SUBF3    Subtract F__floating 3 operand
.index ^Instructions, machine><SUBF3
                62    SUBD2    Subtract D__floating 2 operand
.index ^Instructions, machine><SUBD2
                               [780-9.44, 750-14.72, 730-75.06]
                               [780F-1.40, 750F-2.45, 730F-15.21]
                63    SUBD3    Subtract D__floating 3 operand
.index ^Instructions, machine><SUBD3
                42FD  SUBG2    Subtract G__floating 2 operand
.index ^Instructions, machine><SUBG2
                               [780-14.46, 750-25.28, 730-76.44]
                               [780F-14.47, 750F-25.28, 730F-18.81]
                43FD  SUBG3    Subtract G__floating 3 operand
.index ^Instructions, machine><SUBG3
                62FD  SUBH2    Subtract H__floating 2 operand
.index ^Instructions, machine><SUBH2
                               [780-27.73, 750-38.60, 730-122.43]
                               [780F-27.73, 750F-38.60, 730F-26.08]
                63FD  SUBH3    Subtract H__floating 3 operand
.index ^Instructions, machine><SUBH3
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SUBPx instructions\*
.restore
.send toc .endif global
.else manual
2 SUBPx
.endif manual
.nf
Purpose:        subtract one packed decimal string from a second
.if manual
.s 1
.endif manual
Format:         opcode sublen.rw,subaddr.ab,
                       diflen.rw,difaddr.ab                 ;4 operand
                opcode sublen.rw,subaddr.ab,minlen.rw,
                       minaddr.ab,diflen.rw,difaddr.ab      ;6 operand
.if manual
.s 1
.endif manual
Operation:      {dif string} = {dif string} - {sub string}  ;4 operand
                {dif string} = {min string} - {sub string}  ;6 operand
.if manual
.s 1
.endif manual
C. Codes:       N = {{dif string} LSS 0}, V = {decimal overflow},
                Z = {{dif string} EQL 0}, C = 0
.if manual
.s 1
.endif manual
Exceptions:     Reserved operand, decimal overflow
.if manual
.s 1
.endif manual
Opcode:         25    SUBP4    Subtract packed 4 operand
.index ^Instructions, machine><SUBP4
                23    SUBP6    Subtract packed 6 operand
.index ^Instructions, machine><SUBP6
.if manual
.s 1
.endif manual
Description:    sub as specified by subaddr and sublen is subtracted
                from dif as specified by difaddr and diflen (in 4
                operand form) or min as specified by minaddr and
                minlen (in 6 operand form) and the result is placed
                in dif.
.if manual
.s 1
.endif manual
Notes:          After execution R0 = R2 = 0, R1 = address of the most
                significant digit of sub and R3 = address of the most
                significant digit of dif (SUBP4) or min (SUBP6). For
                SUBP6 only, R4 = 0 and R5 = address of the most
                significant digit of dif. dif, the registers used and
                the condition codes are unpredictable if dif overlaps
                sub or min, any of the source strings contain an
                invalid nibble, or a reserved operand abort occurs.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*SVPCTX instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><SVPCTX
.else manual
2 SVPCTX
.endif manual
.nf
Purpose:        save processor context - save register and
                memory management context
.if manual
.s 1
.endif manual
Format:         opcode
.if manual
.s 1
.endif manual
Operation:      if PSL_<current-mode_> NEQU 0 then {opcode reserved
                to Digital fault}; {save process general registers
                in the process control block}; {remove PSL and PC
                from stack and save in PCB}; {switch to interrupt
                stack}
.if manual
.s 1
.endif manual
C. Codes:       Not affected
.if manual
.s 1
.endif manual
Exceptions:     Reserved operand, privileged instruction
.if manual
.s 1
.endif manual
Opcodes:        07    SVPCTX   Load process context
.if manual
.s 1
.endif manual
Description:    The process control block is specified by the
                internal processor register PCBB (process control
                block base). The general registers are saved in
                the PCB. If the current stack in use is the kernel
                stack, execution is changed to the interrupt
                stack.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*TSTx instructions\*
.restore
.send toc .endif global
.else manual
2 TSTx
.endif manual
.nf
Purpose:        arithmetic compare of a scalar to 0.
.if manual
.s 1
.endif manual
Format:         opcode src.rx
.if manual
.s 1
.endif manual
Operation:      src - 0
.if manual
.s 1
.endif manual
C. Codes:       N = {src LSS 0}, Z = {src EQL 0}, V = 0, C = 0
.if manual
.s 1
.endif manual
Exceptions:     None (integer), reserved operand (floating)
.if manual
.s 1
.endif manual
Opcodes:        95    TSTB     Test byte [780-0.40]
.index ^Instructions, machine><TSTB
                B5    TSTW     Test word [780-0.40]
.index ^Instructions, machine><TSTW
                D5    TSTL     Test long [780-0.40]
.index ^Instructions, machine><TSTL
                53    TSTF     Test F__floating [780-0.40]
.index ^Instructions, machine><TSTF
                73    TSTD     Test D__floating [780-0.40]
.index ^Instructions, machine><TSTD
                53FD  TSTG     Test G__floating
.index ^Instructions, machine><TSTG
                73FD  TSTH     Test H__floating
.index ^Instructions, machine><TSTH
.if manual
.s 1
.endif manual
Description:    The condition codes are affected according to
                the values of src.
.if manual
.s 1
.endif manual
Notes:          TSTx src is equivalent to CMPx src,_#0, but is
                shorter. On reserved operand, the condition
                codes are unpredictable.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*XFC instruction\*
.restore
.send toc .endif global
.index ^Instructions, machine><XFC
.else manual
2 XFC
.endif manual
.nf
Purpose:        extended function call - provides customer-defined
                extensions to the instruction set
.if manual
.s 1
.endif manual
Format:         opcode
.if manual
.s 1
.endif manual
Operation:      {XFC fault}
.if manual
.s 1
.endif manual
C. Codes:       N = 0, Z = 0, V = 0, C = 0
.if manual
.s 1
.endif manual
Exceptions:     Opcode reserved to customer, customer reserved
                exception
.if manual
.s 1
.endif manual
Opcodes:        FC    XFC      Extended function call
.if manual
.s 1
.endif manual
Description:    This instruction requests services of nonstandard
                microcode or software. If no special microcode is
                loaded, then an exception is generated to a kernel
                mode software simulator. Typically the byte after
                the XFC would request a specific service. Parameters
                would be passed either as normal operands or in the
                registers.
.if manual
.test page 10
.send toc .ifnot global
.save
.flags bold
.hl 1 ^*XORxx instructions\*
.restore
.send toc .endif global
.else manual
2 XORxx
.endif manual
.nf
Purpose:        perform logical exclusive OR of two integers
.if manual
.s 1
.endif manual
Format:         opcode mask.rx,dst.mx                       ;2 operand
                opcode mask.rx,src.rx,dst.rx                ;3 operand
.if manual
.s 1
.endif manual
Operation:      dst = dst XOR mask                          ;2 operand
                dst = src XOR mask                          ;3 operand
.if manual
.s 1
.endif manual
C. Codes:       N = {dst LSS 0}, Z = {dst EQL 0}, V = 0, C = C
.if manual
.s 1
.endif manual
Exceptions:     None
.if manual
.s 1
.endif manual
Opcodes:        88    XORB2    Exclusive OR byte, 2 operand [780-0.40]
.index ^Instructions, machine><XORB2
                89    XORB3    Exclusive OR byte, 3 operand [780-0.60]
.index ^Instructions, machine><XORB3
                A8    XORW2    Exclusive OR word, 2 operand [780-0.40]
.index ^Instructions, machine><XORW2
                A9    XORW3    Exclusive OR word, 3 operand [780-0.60]
.index ^Instructions, machine><XORW3
                C8    XORL2    Exclusive OR long, 2 operand
.index ^Instructions, machine><XORL2
                               [780-0.40, 750-0.93, 730-2.58]
                               [780F-0.40, 750F-0.93, 730F-2.54]
                C9    XORL3    Exclusive OR long, 3 operand [780-0.60]
.index ^Instructions, machine><XORL3
.if manual
.s 1
.endif manual
Description:    In 2 operand format, dst is XORed with mask and dst
                is replaced by the result. In 3 operand format, src
                is XORed with mask and dst is replaced by the result.
.f
==End of part 4=============================================================