Multiplication and Division
CMSC 301
- Prof. Szajda
Multiplication and Division CMSC 301 Prof. Szajda Administrative - - PowerPoint PPT Presentation
Multiplication and Division CMSC 301 Prof. Szajda Administrative Read Ch. 3.1-3.4, C.11 Program #1 due 10/24 HW #5 assigned w Due Monday, 10/21, at 5pm Review What is slow in a ripple carry adder? What makes a carry
Multiplicand (MC) Multiplier (MP) Product (P)
Multiplicand (MC) Multiplier (MP) Product (P)
Multiplicand (MC) Multiplier (MP) Product (P)
Multiplicand (MC) Multiplier (MP) Product (P)
Multiplicand (MC) Multiplier (MP) Product (P)
Multiplicand (MC) Multiplier (MP) Product (P)
Start Done No: < 32 iterations Yes: 32 iterations
32nd iteration? Test multiplier bit 0 MP[0] == 0? MP[0] == 0 MP[0] != 0 P = P + MC MC << 1 MP >> 1
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0000 0101 0000 0000 1 Shift left MC Shift right MP 3 Shift left __ Shift right __ 2 Shift left __ Shift right __ 4 Shift left __ Shift right __
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0000 0101 0000 0000 1 0 -> no op 0110 Shift left MC 0000 1010 Shift right MP 0011 3 Shift left __ Shift right __ 2 Shift left __ Shift right __ 4 Shift left __ Shift right __
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0000 0101 0000 0000 1 0 -> no op 0110 Shift left MC 0000 1010 Shift right MP 0011 3 Shift left __ Shift right __ 2 1 -> Pr = Pr + MC 0000 1010 Shift left MC 0001 0100 Shift right MP 0001 4 Shift left __ Shift right __
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0000 0101 0000 0000 1 0 -> no op 0110 Shift left MC 0000 1010 Shift right MP 0011 3 1 -> Pr = Pr + MC 0001 1110 Shift left MC 0010 1000 Shift right MP 0000 2 1 -> Pr = Pr + MC 0000 1010 Shift left MC 0001 0100 Shift right MP 0001 4 Shift left __ Shift right __
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0000 0101 0000 0000 1 0 -> no op 0110 Shift left MC 0000 1010 Shift right MP 0011 3 1 -> Pr = Pr + MC 0001 1110 Shift left MC 0010 1000 Shift right MP 0000 2 1 -> Pr = Pr + MC 0000 1010 Shift left MC 0001 0100 Shift right MP 0001 4 0 -> no op 0001 1110 Shift left MC 0101 0000 Shift right MP 0000
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0101 0000 0000 1 0 -> no op 0110 Shift right MP 0011 3 1 -> Pr = Pr + MC Shift right MP 0000 2 1 -> Pr = Pr + MC Shift right MP 0001 4 0 -> no op Shift Right P Shift right MP 0000 Shift Right P Shift Right P Shift Right P
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0101 0000 0000 1 0 -> no op 0110 Shift right MP 0011 3 1 -> Pr = Pr + MC Shift right MP 0000 2 1 -> Pr = Pr + MC Shift right MP 0001 4 0 -> no op Shift Right P Shift right MP 0000 Shift Right P 0000 0000 Shift Right P Shift Right P
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0101 0000 0000 1 0 -> no op 0110 Shift right MP 0011 3 1 -> Pr = Pr + MC Shift right MP 0000 2 1 -> Pr = Pr + MC 0101 0000 Shift right MP 0001 4 0 -> no op Shift Right P Shift right MP 0000 Shift Right P 0000 0000 Shift Right P 0010 1000 Shift Right P
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0101 0000 0000 1 0 -> no op 0110 Shift right MP 0011 3 1 -> Pr = Pr + MC 0111 1000 Shift right MP 0000 2 1 -> Pr = Pr + MC 0101 0000 Shift right MP 0001 4 0 -> no op Shift Right P Shift right MP 0000 Shift Right P 0000 0000 Shift Right P 0010 1000 Shift Right P 0011 1100
Iteration Step Multiplier Multiplicand Product Initialize values 0110 0101 0000 0000 1 0 -> no op 0110 Shift right MP 0011 3 1 -> Pr = Pr + MC 0111 1000 Shift right MP 0000 2 1 -> Pr = Pr + MC 0101 0000 Shift right MP 0001 4 0 -> no op 0011 1100 Shift Right P 0001 1110 Shift right MP 0000 Shift Right P 0000 0000 Shift Right P 0010 1000 Shift Right P 0011 1100
Iteration Step Multiplicand Product / MP Initialize values 0101 0000 0110 1 0 -> no op 3 1 -> Pr = Pr + MC 2 1 -> Pr = Pr + MC 4 0 -> no op Shift Right P Shift Right P Shift Right P Shift Right P
Iteration Step Multiplicand Product / MP Initialize values 0101 0000 0110 1 0 -> no op 3 1 -> Pr = Pr + MC 2 1 -> Pr = Pr + MC 4 0 -> no op Shift Right P Shift Right P 0000 0011 Shift Right P Shift Right P
Iteration Step Multiplicand Product / MP Initialize values 0101 0000 0110 1 0 -> no op 3 1 -> Pr = Pr + MC 2 1 -> Pr = Pr + MC 0101 0011 4 0 -> no op Shift Right P Shift Right P 0000 0011 Shift Right P 0010 1001 Shift Right P
Iteration Step Multiplicand Product / MP Initialize values 0101 0000 0110 1 0 -> no op 3 1 -> Pr = Pr + MC 0111 1001 2 1 -> Pr = Pr + MC 0101 0011 4 0 -> no op Shift Right P Shift Right P 0000 0011 Shift Right P 0010 1001 Shift Right P 0011 1100
Iteration Step Multiplicand Product / MP Initialize values 0101 0000 0110 1 0 -> no op 3 1 -> Pr = Pr + MC 0111 1001 2 1 -> Pr = Pr + MC 0101 0011 4 0 -> no op Shift Right P 0001 1110 Shift Right P 0000 0011 Shift Right P 0010 1001 Shift Right P 0011 1100
Dividend
Quotient Divisor
Dividend
Quotient
Remainder Divisor
Initially dividend Initially divisor in left half
Start Done Test Remainder 33rd repetition? Divisor >> 1 Quotient << 1 Rightmost bit = 1 Rem = Divisor + Rem Quotient << 1 Rightmost bit = 0 Rem = Rem - Divisor Rem >= 0 Rem < 0 Yes: 33 repetitions No: < 33 repetitions
Iteration Step Quotient Divisor Remainder Initialize values 0000 0010 0000 0000 0111 1 Rem = Rem - Div Div>>1 3 Rem = Rem - Div Div>>1 2 Rem = Rem - Div Div>>1 4 Rem = Rem - Div Div>>1 5 Rem = Rem - Div Div>>1
Iteration Step Quotient Divisor Remainder Initialize values 0000 0010 0000 0000 0111 1 Rem = Rem - Div Rem<0=>+Div, Q<<1, Q0=0 Div>>1 3 Rem = Rem - Div Div>>1 2 Rem = Rem - Div Div>>1 4 Rem = Rem - Div Div>>1 1110 0111 0000 0111 0001 0000 0000 5 Rem = Rem - Div Div>>1
Iteration Step Quotient Divisor Remainder Initialize values 0000 0010 0000 0000 0111 1 Rem = Rem - Div Rem<0=>+Div, Q<<1, Q0=0 Div>>1 3 Rem = Rem - Div Div>>1 2 Rem = Rem - Div 1111 0111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 4 Rem = Rem - Div Div>>1 1110 0111 0000 0111 0001 0000 0000 0000 0000 1000 0000 0111 5 Rem = Rem - Div Div>>1
Iteration Step Quotient Divisor Remainder Initialize values 0000 0010 0000 0000 0111 1 Rem = Rem - Div Rem<0=>+Div, Q<<1, Q0=0 Div>>1 3 Rem = Rem - Div 1111 1111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 2 Rem = Rem - Div 1111 0111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 4 Rem = Rem - Div Div>>1 1110 0111 0000 0111 0001 0000 0000 0000 0000 0000 1000 0000 0100 0000 0111 0000 0111 5 Rem = Rem - Div Div>>1
Iteration Step Quotient Divisor Remainder Initialize values 0000 0010 0000 0000 0111 1 Rem = Rem - Div Rem<0=>+Div, Q<<1, Q0=0 Div>>1 3 Rem = Rem - Div 1111 1111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 2 Rem = Rem - Div 1111 0111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 4 Rem = Rem - Div 0000 0011 Rem>=0=> Q<<1, Q0=1 Div>>1 1110 0111 0000 0111 0001 0000 0000 0000 0000 0001 0000 1000 0000 0100 0000 0010 0000 0111 0000 0111 5 Rem = Rem - Div Div>>1
Iteration Step Quotient Divisor Remainder Initialize values 0000 0010 0000 0000 0111 1 Rem = Rem - Div Rem<0=>+Div, Q<<1, Q0=0 Div>>1 3 Rem = Rem - Div 1111 1111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 2 Rem = Rem - Div 1111 0111 Rem<0=>+Div, Q<<1, Q0=0 Div>>1 4 Rem = Rem - Div 0000 0011 Rem>=0=> Q<<1, Q0=1 Div>>1 1110 0111 0000 0111 0001 0000 0000 0000 0000 0001 0000 1000 0000 0100 0000 0010 0000 0111 0000 0111 5 Rem = Rem - Div 0000 0001 Rem>=0=> Q<<1, Q0=1 Div>>1 0011 0000 0001
Start
Test Remainder 32nd repetition? Left half Rem = (LH)Rem - Divisor Rem << 1 Rightmost bit Rem = 1 (LH)Rem = Divisor + (LH)Rem Rem << 1 Rightmost bit Rem = 0 Rem << 1 Rem >= 0 Rem < 0 Yes: 32 repetitions No: < 32 repetitions
Iteration Step Divisor Remainder Initialize values 0010 0000 0111 1 Rem << 1 Rem = Rem - Div 3 Rem = Rem - Div 2 Rem = Rem - Div 4 Rem = Rem - Div Left half of Rem >> 1
Iteration Step Divisor Remainder Initialize values 0010 0000 0111 1 Rem << 1 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 3 Rem = Rem - Div 2 Rem = Rem - Div 4 Rem = Rem - Div Left half of Rem >> 1 0000 1110 1110 1110 0001 1100
Iteration Step Divisor Remainder Initialize values 0010 0000 0111 1 Rem << 1 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 3 Rem = Rem - Div 2 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 4 Rem = Rem - Div Left half of Rem >> 1 0000 1110 1110 1110 0001 1100 1111 1100 0011 1000
Iteration Step Divisor Remainder Initialize values 0010 0000 0111 1 Rem << 1 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 3 Rem = Rem - Div Rem>=0=> R<<1, R0=1 2 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 4 Rem = Rem - Div Left half of Rem >> 1 0000 1110 1110 1110 0001 1100 1111 1100 0011 1000 0001 1000 0011 0001
Iteration Step Divisor Remainder Initialize values 0010 0000 0111 1 Rem << 1 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 3 Rem = Rem - Div Rem>=0=> R<<1, R0=1 2 Rem = Rem - Div Rem<0=>+Div, R<<1, R0=0 4 Rem = Rem - Div Rem>=0=> R<<1, R0=1 Left half of Rem >> 1 0000 1110 1110 1110 0001 1100 1111 1100 0011 1000 0001 1000 0011 0001 0001 0001 0010 0011 0001 0011