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