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=============================================================