Divide Mnemonic

 D Description

The divide instruction causes a 32-bit value to be divided by a 16-bit word from core storage. Result of the operation is placed in the accumulator; the remainder is placed in the accumulator extension.

Before the divide operation is started, the 32-bit value must be loaded into the accumulator and accumulator extension. (The units position is in bit 15 of the accumulator extension.) The divide instruction then addresses a 16-bit word (in core storage) that is used as the divisor. Examples of the arithmetic are:

Example 1 Example 2 The names of the values in the operation are: The sign of the remainder is always the same as the sign of the original dividend. Before the operation, bit 0 of the accumulator specifies the sign of the dividend: bit 0 = 0 specifies a positive dividend; bit 0 = 1 specifies a negative dividend. Therefore, the value of bit 0 of the accumulator extension (after the operation when the extension contains the remainder) is the same as the original value of bit 0 of the accumulator (when it contained the original dividend).

The sign of the quotient is determined as follows:

Dividend Divisor = Quotient
+ + = +
- + = -
+ - = -
- - = +

If a 16-bit dividend (in the accumulator) is the result of some prior operation, it must be shifted to the right 16 places into the accumulator extension before the divide operation is performed. (A shift-right-accumulator-and-extension instruction can be used for this purpose.)

There are no addressing exceptions for the divide instruction; all forms of addressing that are described under "Effective-Address Generation" apply to the D instruction.

The largest dividend that can be correctly operated on is 230 + 215 - 1 (1,073,774,591 decimal) if divided by the largest negative divisor, -215 (-32,768 decimal).

Indicators: The carry indicator is not affected during a divide operation. The overflow indicator must be reset to 0 before the divide operation if it is to be used. When the overflow indicator is initially at a value of 0, it is set to 1 during a divide operation for either of two conditions:

1. An attempt is made to divide by zero. (The divisor, in core storage, has a value of 0000 0000 0000 0000.)
2. A quotient overflow occurs. A quotient overflow occurs when the quotient exceeds the range to -215 to +215-1. A quotient overflow causes the accumulator and accumulator extension to be left in an undefined state.

Examples

Divide

Assembler Language Coding Hexadecimal Value Description of Instruction
Label   Operation   F T
 21 25

 27 30
32 33   35..40..
D         DISP A8XX Divide A and Q by contents of CSL at EA (I+DISP)
D     1   DISP A9XX Divide A and Q by contents of CSL at EA (XR1+DISP)
D     2   DISP AAXX Divide A and Q by contents of CSL at EA (XR2+DISP)
D     3   DISP ABXX Divide A and Q by contents of CSL at EA (XR3+DISP)
D   L     ADDR AC00XXXX Divide A and Q by contents of CSL at EA (Addr)
D   L 1   ADDR AD00XXXX Divide A and Q by contents of CSL at EA (Addr+XR1)
D   L 2   ADDR AE00XXXX Divide A and Q by contents of CSL at EA (Addr+XR2)
D   L 3   ADDR AF00XXXX Divide A and Q by contents of CSL at EA (Addr+XR3)
D   I     ADDR AC80XXXX Divide A and Q by contents of CSL at EA (V in CSL at Addr)
D   I 1   ADDR AD80XXXX Divide A and Q by contents of CSL at EA (V in CSL at "Addr+XR1")
D   I 2   ADDR AE80XXXX Divide A and Q by contents of CSL at EA (V in CSL at "Addr+XR2")
D   I 3   ADDR AF80XXXX Divide A and Q by contents of CSL at EA (V in CSL at "Addr+XR3")

But wait, there's MORE... 