CSCI206 - Computer Organization & Programming Integer Divide zyBook: 10.4
Division: Similar to multiplication Algorithm: subtract and shift...
Signed Division Same as signed multiply divide absolute values resulting sign bit: Quotient and remainder have the same sign
The Divider Same hardware as multiply! Setup divisor in left half of divisor register (64 bit for now) remainder register initialized with dividend in right half e.g., 1001010 would occupy 0100 1010
The Divider
0111 / 0010 = ???? R ???? Example 1
0111 / 0010 = 0011 R 0001 2’s comp of 0010 0000 is 1110 0000 2’s comp of 0001 0000 is 1111 0000 2’s comp of 0000 1000 is 1111 1000 2’s comp of 0000 0100 is 1111 1100 2’s comp of 0000 0010 is 1111 1110
same as optimized multiply hardware Optimized Divider same as optimized multiply hardware Algorithm HI(Remainder) = 0 LO(Remainder) = Dividend repeat N times: Remainder <<= 1 HI(Remainder) -= Divisor if HI(Remainder) > 0 Remainder[0] = 1 else HI(Remainder) += Divisor Remainder[0] = 0
Example with optimized divider 2’s comp 0010 = 1110 Iteration Step Divisor Rem/Quotient Initial values 0010 0000 0111 1 Rem << 1 0000 1110 HI(Rem) -= Div 1110 1110 Rem < 0, Rem+Div, Rem[0] = 0 2 0001 1100 1111 1100 3 0011 1000 0001 1000 Rem >= 0, Rem[0] = 1 0001 1001 4 0011 0010 0001 0010 Rem>=0, Rem[0] = 1 0001 0011 The values in read are quotient, the left part of Rem is the remainder.
Compared with hand-operation in decimal numbers Remainder 00000 10970 10970 dividend Quotient ______ 23 |10970 _00476_ 23 |10970 -092 0177 -161 0160 138 22 00000 10970 00023 divisor 00001 09700 00476 00001 09700 quotient 00010 97000 00022 remainder 00010 97000 00109 70000 00017 70004 109-4*23=17 00177 00040 00016 00047 177-7*23=16 00160 00470 Quotient Remainder 00022 00476 160-6*23=22