(This page has a few highlights of chapter 4 of AL39-01, the processor manual for Multics).
Instruction Repertoire
Basic Operations
The 456 basic operations in the processor all require exactly one 36-bit machine word. They are categorized as follows:
181 Fixed-point binary arithmetic
85 Boolean operations
34 Floating-point binary arithmetic
36 Transfer of control
75 Pointer Register
17 Miscellaneous
28 Privileged
Extended Instruction Set (EIS) Operations
The 91 extended instruction set (EIS) operations are divided into 62 EIS single-word instructions and 29 EIS multiword instructions.
EIS Single-word Operations
The 62 EIS single-word instructions load, store, and perform special arithmetic on the address registers (ARn) used to access bit- and character-string operands, and safe-store decimal unit (DU) control information required to service a processor fault or interrupt. Like the basic operations, EIS single-word instructions require exactly one 36-bit machine word.
EIS Multiword Operations
The 29 EIS multiword instructions perform decimal arithmetic and bit- and character-string operations. They require three or four 36-bit machine words depending on individual operand descriptor requirements.
Instruction Word Formats
Basic and EIS Single-Word Instructions
Bits 0-17 - ADDRESS (many formats possible for the address)
Bits 18-27 - OPCODE
Bit 28 - I (Interrupt Inhibit)
Bit 29 - A (Indirect via pointer register flag)
Bits 30-35 - TAG (Instruction address modifier)
Indirect Words
Certain of the basic EIS single-word instructions permit indirection to be specified as part of address modification. When such indirection is specified, C(Y) (the resulting target address of the instruction - Ed.) is interpreted as an indirect word according to the following format:
Bits 0-17 - ADDRESS (many formats possible)
Bits 18-29 - TALLY (count field)
Bits 30-35 - TAG (several formats, depending on TAG of original instruction)
Fixed Point Arithmetic Instructions
Fixed-Point Data Movement Load
| eaa | Effective Address to A |
| eaq | Effective Address to Q |
| eaxn | Effective Address to Index Register n |
| lca | Load Complement A |
| lcaq | Load Complement AQ |
| lcq | Load Complement Q |
| lcxn | Load Complement Index Register n |
| lda | Load A |
| ldac | Load A and Clear |
| ldaq | Load AQ |
| ldi | Load Indicator |
| ldq | Load Q |
| ldqc | Load Q and Clear |
| ldxn | Load Index Register n |
| lreg | Load Registers |
| lxln | Load Index Register n from Lower |
| sreg | Store Registers |
| stba | Store Bytes of A |
| stbq | Store Bytes of Q |
| stc1 | Store Instruction Counter Plus 1 |
| stc2 | Store Instruction Counter Plus 2 |
| stca | Store Characters of A |
| stcq | Store Characters of Q |
| stcd | Store Control Double |
| sti | Store Indicator Register |
| stq | Store Q |
| stt | Store Time Register |
| stxn | Store Index Register n |
| stz | Store Zero |
| sxln | Store Index Register n in Lower |
Fixed-Point Data Movement Shift
| alr | A Left Rotate |
| als | A Left Shift |
| arl | A Right Logical |
| ars | A Right Shift |
| llr | Long Left Rotate |
| lls | Long Left Shift |
| lrl | Long Right Logical |
| lrs | Long Right Shift |
| qlr | Q Left Rotate |
| qls | Q Left Shift |
| qrl | Q Right Logical |
| qrs | Q Right Shift |
Fixed-Point Addition
| ada | Add to A |
| adaq | Add to AQ |
| adl | Add Low o AQ |
| adla | Add Logical to A |
| adlaq | Add Logical to AQ |
| adlq | Add Logical to Q |
| adlxn | Add Logical to Index Register n |
| adq | Add to Q |
| adxn | Add to Index Register n |
| aos | Add One to Storage |
| asa | Add Stored to A |
| asq | Add Stored to Q |
| asxn | Add Stored to Index Register n |
| awca | Add with Carry to A |
| awcq | Add with Carry to Q |
Fixed-Point Subtraction
| sba | Subtract from A |
| sbaq | Subtract from AQ |
| sbla | Subtract Logical from A |
| sblaq | Subtract Logical from AQ |
| sblq | Subtract Logical from Q |
| sblxn | Subtract Logical from Index Register n |
| sbq | Subtract from Q |
| sbxn | Subtract from Index Register n |
| ssa | Subtract Stored from A |
| ssq | Subtract Stored from Q |
| ssxn | Subtract Stored from Index Register n |
| swca | Subtract with Carry from A |
| swcq | Subtract with Carry from Q |
Fixed-Point Multiplication
| mpf | Multiply Fraction |
| mpy | Multiply Integer |
Fixed-Point Division
| div | Divide Integer |
| dvf | Divide Fraction |
Fixed-Point Negate
| neg | Negate A |
| negl | Negate Long |
Fixed-Point Comparison
| cmg | Compare Magnitude |
| cmk | Compare Masked |
| cmpa | Compare with A |
| cmpaq | Compare with AQ |
| cmpq | Compare with Q |
| cmpxn | Compare with Index Register n |
| cwl | Compare with Limits |
Fixed-Point Miscellaneous
| szn | Set Zero and Negative Indicators |
| sznc | Set Zero and Negative Indicators and Clear |
Boolean Operations Instructions
Boolean And
| ana | AND to A |
| anaq | AND to AQ |
| anq | AND to Q |
| ansa | AND to Storage A |
| ansq | AND to Storage Q |
| ansxn | AND to Storage Index Register n |
| anxn | AND to Index Register n |
Boolean Or
| ora | OR to A |
| oraq | OR to AQ |
| orq | OR to Q |
| orsa | OR to Storage A |
| orsq | OR to Storage Q |
| orsxn | OR to Storage Index Register n |
| orxn | OR to Index Register n |
Boolean Exclusive Or
| era | EXCLUSIVE OR to A |
| eraq | EXCLUSIVE OR to AQ |
| erq | EXCLUSIVE OR to Q |
| ersa | EXCLUSIVE OR to Storage A |
| ersq | EXCLUSIVE OR to Storage Q |
| ersxn | EXCLUSIVE OR to Storage Index Register n |
| erxn | EXCLUSIVE OR to Index Register n |
Boolean Comparative And
| cana | Comparative AND with A |
| canaq | Comparative AND with AQ |
| canq | Comparative AND with Q |
| canxn | Comparative AND with Index Register n |
Boolean Comparative Not
| cnaa | Comparative NOT with A |
| cnaaq | Comparative NOT with AQ |
| cnaq | Comparative NOT with Q |
| cnaxn | Comparative NOT with Index Register n |
Floating-Point Arithmetic Instructions
Floating-Point Data Movement Load
| dfld | Double-Precision Floating Load |
| fld | Floating Load |
| dfst | Double-Precision Floating Store |
| dfstr | Double-Precision Floating Store Rounded |
| fst | Floating Store |
| fstr | Floating Store Rounded |
Floating-Point Addition
| dfad | Double-Precision Floating Add |
| dufa | Double-Precision Unnormalized Floating Add |
| fad | Floating Add |
| ufa | Unnormalized Floating Add |
Floating-Point Subtraction
| dfsb | Double-Precision Floating Subtraction |
| dufs | Double-Precision Unnormalized Floating Subtraction |
| fsb | Floating Subtraction |
| ufs | Unnormalized Floating Subtraction |
Floating-Point Multiplication
| dfmp | Double-Precision Floating Multiply |
| dufm | Double-Precision Unnormalized Floating Multiply |
| fmp | Floating Multiply |
| ufm | Unnormalized Floating Multiply |
Floating-Point Division
| dfdi | Double-Precision Floating Divide Inverted |
| dfdv | Double-Precision Floating Divide |
| fdi | Floating Divide Inverted |
| fdv | Floating Divide |
Floating-Point Negate
Floating-Point Normalize
Floating-Point Round
| dfrd | Double-Precision Floating Round |
| frd | Floating Round |
Floating-Point Compare
| dfcmg | Double-Precision Floating Compare Magnitude |
| dfcmp | Double-Precision Floating Compare |
| fcmg | Floating Compare Magnitude |
| fcmp | Floating Compare |
Floating-Point Miscellaneous
| ade | Add to Exponent |
| fszn | Floating Set Zero and Negative Indicators |
| lde | Load Exponent |
| ste | Store Exponent |
Transfer Instructions
| call6 | Call (using PR6 and PR7) |
| ret | Return |
| rtcd | Return Control Double |
| teo | Transfer on Exponent Overflow |
| teu | Transfer on Exponent Underflow |
| tmi | Transfer on Minus |
| tmoz | Transfer on Minus or Zero |
| tnc | Transfer on No Carry |
| tnz | Transfer on Nonzero |
| tov | Transfer on Overflow |
| tpl | Transfer on Plus |
| tpnz | Transfer on Plus and Nonzero |
| tra | Transfer Unconditionally |
| trc | Transfer on Carry |
| trtf | Transfer on Truncation Indicator OFF |
| trtn | Transfer on Truncation Indicator ON |
| tspn | Transfer and Set Pointer Register n |
| tss | Transfer and Set Slave |
| tsxn | Transfer and Set Index Register n |
| ttf | Transfer on Tally Runout Indicator OFF |
| ttn | Transfer on Tally Runout Indicator ON |
| tze | Transfer on Zero |
Pointer Register Instructions
Pointer Register Data Movement Load
| easpn | Effective Address to Segment Number of Pointer Register n |
| epbpn | Effective Pointer at Base to Pointer Register n |
| eppn | Effective pointer to Pointer Register n |
| lpri | Load Pointer Registers from ITS Pairs |
| lprpn | Load Pointer Register n Packed |
| spbpn | Store Segment Base Pointer of Pointer Register n |
| spri | Store Pointer Registers as ITS Pairs |
| sprin | Store Pointer Register n as ITS Pairs |
| sprpn | Store Pointer Register n Packed |
Pointer Register Address Arithmetic
| adwpn | Add Word Number of Pointer Register n |
Pointer Register Miscellaneous
| epaq | Effective Pointer to AQ |
Miscellaneous Instructions
Calendar Clock
Derail
Execute
| xec | Execute |
| xed | Execute Double |
Master Mode Entry
| mme | Master Mode Entry |
| mme2 | Master Mode Entry 2 |
| mme3 | Master Mode Entry 3 |
| mme4 | Master Mode Entry 4 |
No Operation
| nop | No Operation |
| puls1 | Pulse One |
| puls2 | Pulse Two |
Repeat
| rpd | Repeat Double |
| rpl | Repeat Link |
| rpt | Repeat |
Ring Alarm Register
| sra | Store Ring Alarm Register |
Store Base Address Register
| sbar | Store Base Address Register |
Translation
| bcd | Binary to Binary-Coded-Decimal |
| gtb | Gray to Binary |
Register Load
| lbar | Load Base Address Register |
Privileged Instructions
Privileged - Register Load
| lcpr | Load Central Processor Register |
| ldbr | Load Descriptor Segment Base Register |
| ldt | Load Timer Register |
| lptp | Load Page Table Pointers |
| lptr | Load Page Table Registers |
| lra | Load Ring Alarm Register |
| lsdp | Load Segment Descriptor Pointers |
| lsdr | Load Segment Descriptor Registers |
| rcu | Restore Control Unit |
Privileged - Register Store
| scpr | Store Central Processor Register |
| scu | Store Control Unit |
| sdbr | Store Descriptor Segment Base Register |
| sptp | Store Page Table Pointers |
| sptr | Store Page Table Registers |
| ssdp | Store Segment Descriptor Pointers |
| ssdr | Store Segment Descriptor Registers |
Privileged - Clear Associative Memory
| camp | Clear Associative Memory Pages |
| cams | Clear Associative Memory Segments |
Privileged - Configuration and Status
| rmcm | Read Memory Controller Mask Register |
| rscr | Read System Controller Register |
| rsw | Read Switches
|
Privileged - System Control
| cioc | Connect I/O Channel |
| smcm | Set Memory Controller Mask Register |
| smic | Set Memory Controller Interrupt Cells |
| sscr | Set System Controller Register |
Privileged - Miscellaneous
| absa | Absolute Address to A-Register |
| dis | Delay Until Interrupt Signal |
Extended Instruction Set (EIS)
EIS - Address Register Load
| asrn | Alphanumeric Descriptor to Address Register n |
| larn | Load Address Register n |
| lareg | Load Address Registers |
| lpl | Load Pointers and Lengths |
| narn | Numeric Descriptor to Address Register n |
EIS - Register Store
| aran | Address Register n to Alphanumeric Descriptor |
| arnn | Address Register n to Numeric Descriptor |
| sarn | Store Address Register n |
| sareg | Store Address Registers |
| spl | Store Pointers and Lengths |
EIS - Address Register Special Arithmetic
| a4bd | Add 4-bit Displacement to Address Register |
| a6bd | Add 6-bit Displacement to Address Register |
| a9bd | Add 9-bit Displacement to Address Register |
| abd | Add Bid Displacement to Address Register |
| awd | Add Word Displacement to Address Register |
| s4bd | Subtract 4-bit Displacement from Address Register |
| s6bd | Subtract 6-bit Displacement from Address Register |
| s9bd | Subtract 9-bit Displacement from Address Register |
| sbd | Subtract bit Displacement from Address Register |
| swd | Subtract Word Displacement from Address Register |
EIS - Alphanumeric Compare
| cmpc | Compare Alphanumeric Character Strings |
| scd | Scan Characters Double |
| scdr | Scan Characters Double in Reverse |
| scm | Scan with Mask |
| scmr | Scan with Mask in Reverse |
| tct | Test Character and Translate |
| tctr | Test Character and Translate in Reverse |
EIS - Alphanumeric Move
| mlr | Move Alphanumeric Left to Right |
| mrl | Move Alphanumeric Right to Left |
| mve | Move Alphanumeric Edited |
| mvt | Move Alphanumeric with Translation |
EIS - Numeric Compare
EIS - Numeric Move
| mvn | Move Numeric |
| mvne | Move Numeric Edited |
EIS - Bit String Combine
| csl | Combine Bit Strings Left |
| csr | Combine Bit Strings Right |
EIS - Bit String Compare
EIS - Bit Strings Set Indicators
| sztl | Set Zero and Truncation Indictors with Bit Strings Left |
| sztr | Set Zero and Truncation Indictors with Bit Strings Right |
EIS - Data Conversion
| btd | Binary to Decimal Convert |
| dtb | Decimal to Binary Convert
|
EIS - Decimal Addition
| ad2d | Add Using Two Decimal Operands |
| ad3d | Add Using Three Decimal Operands |
EIS - Decimal Subtraction
| sb2d | Subtract Using Two Decimal Operands |
| sb3d | Subtract Using Three Decimal Operands |
EIS - Decimal Multiplication
| mp2d | Multiply Using Two Decimal Operands |
| mp3d | Multiply Using Three Decimal Operands |
EIS - Decimal Division
| dv2d | Divide Using Two Decimal Operands |
| dv3d | Divide Using Three Decimal Operands |
Micro Operations for Edit Instructions
(In the mve and mvne instructions, you can 'program' the instruction with a number of operations. Here are their titles. They are not operations, they are sub-operations of mve and mvne)
Micro Operations
| cht | Change Table (21) |
| enf | End Floating Suppression (02) |
| ign | Ignore Source Character (14) |
| insa | Insert Asterisk on Suppression (11) (useful for printing checks from COBOL | Ed.) |
| insb | Insert Blank on Suppression (10) |
| insm | Insert Table Entry One Multiple (01) |
| insn | Insert On Negative (12) |
| insp | Insert On Positive (13) |
| lte | Load Table Entry (20) |
| mflc | Move with Floating Currency Symbol Insertion (07) |
| mfls | Move with Floating Sign Insertion (06) |
| mors | Move and OR Sign (17) |
| mses | Move and Set Sign (16) |
| mvc | Move Source Characters (15) |
| mvza | Move with Zero Suppression and Asterisk Replacement (05) |
| mvzb | Move with Zero Suppression and Blank Replacement (04) |
| ses | Set End Suppression (03) |
Last modified: 10/14/00 by Ron Harvey