The Extended Arithmetic Element (EAE), Type KE12, adds a complete automatic multiplication and division facility to the PDP-12. Programming is by means of PDP-8 mode instructions. The AC and MQ are used to accommodate full 24-bit products and dividends, and the remainder and quotient after a division. Shifting, normalizing, and register setup instructions are included.
All operands are treated as unsigned integers; the programmer must establish his own sign conventions. The normalizing instruction facilitates the writing of floating-point subroutines.
The EAE instruction set has a basic operation code of 7401; all functions
are microprogrammed, as in Operate Class commands. The microprogram
structure of the EAE class is shown in Figure 4-6.
Contains 1
Operation to specify
-- Code 74 -- MQA MQL EAE Group
/ \ / \ / \ / \
+---+---+---+---+---+---+---+---+---+---+----+----+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
+---+---+---+---+---+---+---+---+---+---+----+----+
\ / \ / \ /
CLA SCA \---+----/
|
1=SCL 2=MUY
3=DVI 4=NMI
5=SHL 6=ASR
7=LSR
Figure 4-6. EAE Instruction Format
As with other microprogrammed instructions, EAE operations are performed in a given order. Operations can be combined in a single instruction, except that operations occurring at the same time cannot be combined with meaningful results.
The order of events is as follows:
CLA - Clear AC
Octal code: 7601
Execution time: 1.6 µsec
Operation: Clear the AC. The MQ and Link are unaffected.
MQA - Place MQ in AC
Octal code: 7501
Execution time: 1.6 µsec
Operation: The contents of the MQ are ORed into the AC. The C(MQ) are
unchanged.
NOTE
All twelve bits are transferred; this is not identical to the LINC mode QAC instruction (page 3-21).
MQL - Load MQ from AC
Octal code: 7421
Execution time: 1.6 µsec
Operation: The contents of the AC are placed in the MQ. The previous C(MQ) are
lost. The AC is cleared at the end of the instruction.
SCA - SCA Step Counter To AC
Octal code: 7441
Execution time: 1.6 µsec
Operation: The contents of the step counter are ORed with the contents of
bits 7-11 of the AC; the result is left in the AC. To obtain the actual step
count, this can be combined with CLA (combined operation code: 7641).
All the rest of the EAE instructions except NMI require two words; the first contains the operation to be performed, the second contains the operand. In the following descriptions, the notation p+1 designates the register containing the operand.
SCL - Load Step Counter
Octal code: 7403
Execution time: 3.2 µsec
Operation: The complement of the contents of bits 7-11 of p+1 is placed in the
SC.
MUY - Multiply
Octal code: 7405
Execution time: 8.0 µsec
Operation: The number in the MQ is multiplied by the number in register
p+1. At the conclusion of this command the Link contains a 0. The most
significant 12 bits of the product are in the AC and the least significant
12 bits are in the MQ.
DVI - Divide
Octal code: 7407
Execution time: 4.0 µsec to 9.0 µsec
Operation: The 24-bit dividend is held in the AC (most significant part) and
MQ (least significant part); the divisor is in register p+1. At the conclusion
of the division, the quotient is in the MQ, and the remainder in the AC. If
the division was carried out, the Link is left clear. If either dividend or
divisor is zero, the operation ends after one step, and the Link is set to 1,
to indicate that a divide overflow occurred.
NMI - Normalize
Octal code: 7411
Execution time: 1.6 µSec + 0.32 µsec/step
Operation: The AC and MU are treated as a single 24-bit register. The combined
contents of the AC and MQ are shifted left until C(AC[0]) differs
from C(AC[1]). Bits shifted out of AC, enter the Link; bits shifted
out of the Link are lost. Zeros enter MQ[11] and are shifted up
the registers. At the end of the operation, the SC contains the number of
shifts performed, this being the exponent of the normalized floating point
fraction. The shift path is shown in Figure 4-7.
- To be done -
Figure 4-7. Shift Path for NMI, SHL
SHL - Shift Left (Arithmetic)
Octal code: 7431
Execution time: 3.2 µsec + 0.33 µsec/step
Operation: The combined contents of the Link, AC and MQ are shifted left N+1
places, where N is the number contained in bits 7-11 of register p+1. Bits
shifted out of the Link are lost; zeros are shifted into MQ[11] and
up the registers. The shift path is identical with that for NMI, as shown in
Figure 4-7.
ARS - Shift Right (Arithmetic)
Octal code: 7415
Execution time: 3.2 µsec + 0.33 µsec/step
Operation: The combined contents of the AC and MQ are shifted right N+1
places, where N is the number contained in bits 7-11 of register p+1.The
sign bit (AC[0]) is replicated in all vacated bit positions, and
is also placed in the Link. Bits shifted out of MQ[11] are lost, as
is the previous C(L). The shift path is shown in Figure 4-8.
- To Be Done -
Figure 4-8. Shift Path for ASR
LSR - Shift Right Logical
Octal code: 7421
Execution time: 3.2 µsec + 0.33 µsec/step
Operation: The contents of the AC are placed in the MQ. The previous C(MQ)
are lost. The AC is cleared at the end of the instruction.
To Be Done
Figure 4-9. Shift Path for LSR
Multiplication is performed as follows:
The following program examples demonstrate the operation of the EAE multiplication:
Multiplication of 12-Bit Unsigned Numbers
Enter with a 12-bit multiplicand in AC and a 12-bit multiplier in core memory. Exit with high order half of product in a core memory location labelled HIGH, and with low order half of product in the AC. Program time is approximately 13 microseconds.
MQL MUY /LOAD MQ WITH MULTIPLICAND, INITIATE /MULTIPLICATION MLTPLR /MULTIPLIER DCA HIGH /STORE HIGH ORDER PRODUCT MQA /LOAD AC WITH LOW ORDER PRODUCT
Multiplication of 12-Bit Signed Numbers, 24-Bit Signed Product
Enter with a 12-bit multiplicand in AC and a 12-bit multiplier in core memory. Exit with signed 24-bit product in core memory locations designated HIGH LOW.
CLL SPA /MULTIPLICAND POSITIVE? CMA CML IAC /NO. FORM TWO'S COMPLEMENT MQL /LOAD MULTIPLICAND INTO MQ TAD MLTPLR SPA /MULTIPLIER POSITIVE? CMA CML IAC /NO. FORM TWO'S COMPLEMENT DCA MLTPLR RAL DCA SIGN /SAVE LINK AS SIGN INDICATOR MUY /MULTIPLY MLTPLR, 0 /MULTIPLIER DCA HIGH TAD SIGN RAR /LOAD LINK WITH SIGN INDICATOR MQA SNL /IS PRODUCT NEGATIVE? JMP LAST /NO CLL CMA IAC /YES DCA LOW TAD HIGH CMA SZL IAC DCA HIGH SKP LAST, DCA LOW
Division is performed as follows:
The following program examples demonstrate the use of the EAE in division.
Division of 12-Bit Unsigned Numbers
Enter with a 12-bit unsigned dividend in the AC and a 12-bit unsigned divisor in core memory. Exit with remainder in core memory location labeled REMAIN and with the quotient in the AC.
CLL MQL DVI /LOAD MQ,INITIATE DIVISION DIVISOR /DIVISOR SZL /OVERFLOW? JMP /YES,EXIT DCA REMAIN MQA /LOAD AC WITH QUOTIENTDivision Of 12-Bit Signed Numbers
Enter with a 12-bit signed dividend in the AC and a 12-bit signed divisor in core memory. Exit with unsigned remainder in core memory location REMAIN and a 12-bit signed quotient in the AC.
CLL /DIVIDEND POSITIVE? SPA /NO CMA CML IAC MQL TAD .+11 SPA /DIVISOR POSITIVE? CMA CML IAC /NO DCA .+6 SNL /QUOTIENT NEGATIVE? CMA /NO CLL DCA SIGN /SET SIGN INDICATOR DVI DIVISOR /DIVISOR SZL /OVERFLOW JMP /EXIT ON OVERFLOW MQA ISZ SIGN CMA IAC