0% found this document useful (0 votes)
10 views12 pages

Shift Register Arithmetic Methods

The document explains three arithmetic operations (addition, multiplication, and division) using shift registers, detailing the processes for each operation with examples and step-by-step tables. It covers serial addition with a shift register, shift-and-add multiplication, and restoring division, providing clear illustrations of each method. Additionally, it includes more examples and a non-restoring division algorithm, emphasizing the importance of proper bit alignment in results.

Uploaded by

minal
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views12 pages

Shift Register Arithmetic Methods

The document explains three arithmetic operations (addition, multiplication, and division) using shift registers, detailing the processes for each operation with examples and step-by-step tables. It covers serial addition with a shift register, shift-and-add multiplication, and restoring division, providing clear illustrations of each method. Additionally, it includes more examples and a non-restoring division algorithm, emphasizing the importance of proper bit alignment in results.

Uploaded by

minal
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

1.

Addition Using a Shift Register (Serial


Adder)
A serial adder uses:

 Two shift registers: A and B


 A flip-flop to store carry
 A full-adder that adds:
LSB(A) + LSB(B) + carry

Example:

Add A = 1011₂ (11₁₀) and B = 0110₂ (6₁₀)

Initial:

 A = 1011
 B = 0110
 Carry = 0
 Result shift register starts empty

Process from LSB → MSB:

Step A (bit) B (bit) Carry In Sum Carry Out Result


1 1 0 0 1 0 1
2 1 1 0 0 1 01
3 0 1 1 0 1 001
4 1 0 1 0 1 0001

Final carry = 1, append it → 10001₂

✅ Result: 1011 + 0110 = 10001₂ (17₁₀)

✅ 2. Multiplication Using Shift Registers


(Shift-and-Add Multiplier)
Multiply A × B by:

 Shifting A left
 Testing each bit of multiplier B
 Adding shifted A into accumulator when B’s bit = 1

Example:
A = 1011₂ (11₁₀)
B = 0101₂ (5₁₀) → we multiply by scanning B from LSB to MSB

We keep a 4-bit multiplicand and 8-bit accumulator.

Steps:

B bit Action Accumulator


1 (LSB) Add A 0000 1011
Shift A left A = 1011 → 10110
0 No add unchanged
Shift A left A = 101100
1 Add A 0000 1011 + 101100 = 110111
Shift A left 101100 → 1011000
0 No add unchanged

Final result: 110111₂

✅ 11 × 5 = 55 → 110111₂

✅ 3. Division Using Shift Registers


(Restoring Divider)
Divide Dividend ÷ Divisor by shifting left and subtracting.

Example:

Dividend = 1101₂ (13)


Divisor = 0011₂ (3)

We maintain:

 A: Accumulator (partial remainder)


 Q: Quotient (initially dividend)
 M: Divisor

Initial:

 A = 0000
 Q = 1101
 M = 0011

We repeat:
(A,Q) ← left shift → A ← A − M → set Q₀ based on sign → restore A if needed.
Q
Step A,Q shift A−M A, Q after fix

1 A,Q = 0001 101? 0001 − 0011 = negative 0 Restore A → 0001, Q = 110?
2 A,Q = 0011 101? 0011 − 0011 = 0000 1 A=0000, Q=1101
3 A,Q = 0001 011? 0001 − 0011 = negative 0 Restore A=0001, Q=110?
4 A,Q = 0010 110? 0010 − 0011 = negative 0 Restore A=0010, Q=1100

Final:

 Quotient Q = 0100₂ (4₁₀)


 Remainder A = 0010₂ (2₁₀)

✅ 13 ÷ 3 = quotient 4, remainder 2

✔ Summary Diagrams (Quick View)


Addition
A →→→→

│ full adder → shift to result
B →→→→┘
Carry flip-flop

Multiplication
If (LSB of B) = 1 → Add A to ACC
Shift A left
Shift B right
Repeat

Division
Left shift (A,Q)
A = A – M
If A < 0 → restore and Q₀ = 0
Else → Q₀ = 1

If you want, I can also draw logic diagrams, provide Verilog/VHDL, or give animation-
style step sequences.

You said:

more examples
ChatGPT said:
Here are more examples of addition, multiplication, and division using shift-register–
based algorithms. These use different numbers than before and include step-by-step tables
so you can clearly see how the algorithms work.

🟦 1. More Addition Examples (Serial


Adder)
A serial adder processes bits LSB → MSB using:

 Shift register A
 Shift register B
 1-bit carry flip-flop
 Full adder giving (sum bit, new carry)

Example 1A: 1101₂ (13) + 1001₂ (9)


Initial:

 A = 1101
 B = 1001
 Carry = 0
 Result = empty

Step A bit B bit Cin Sum Cout Result


1 1 1 0 0 1 0
2 0 0 1 1 0 10
3 1 0 0 1 0 110
4 1 1 0 0 1 0110

Final carry = 1 → Result = 10110₂

✔ 13 + 9 = 22

Example 1B: 0101₂ (5) + 0111₂ (7)


Step A bit B bit Cin Sum Cout Result
1 1 1 0 0 1 0
2 0 1 1 0 1 00
3 1 1 1 1 1 100
4 0 0 1 1 0 1100
Final carry = 0 → Result = 01100₂

✔ 5 + 7 = 12

🟩 2. More Multiplication Examples (Shift-


and-Add Multiplier)
Algorithm:

1. Look at LSB of multiplier B.


2. If it is 1 → Add multiplicand A into accumulator.
3. Shift A left; shift B right.
4. Repeat.

Example 2A: 1010₂ (10) × 0110₂ (6)


We maintain:

 ACC = accumulator
 A = multiplicand
 B = multiplier (shift right)

Initial:

 ACC = 0000
 A = 1010
 B = 0110

B
Step Action ACC

1 0 No add 0000
Shift A left → 10100; B → 0011
2 1 ACC += A 0000 + 10100 = 10100
Shift A left → 101000; B → 0001
3 1 ACC += A 10100 + 101000 = 111100
Shift A left → 1010000; B → 0000
4 0 No add stays 111100

Final product = 111100₂

✔ 10 × 6 = 60
Example 2B: 0111₂ (7) × 0011₂ (3)
Initial:

 ACC = 0000
 A = 0111
 B = 0011

B
Step Action ACC

1 1 Add A → 0111 0111
Shift A → 01110; B → 0001
2 1 Add A → 0111 + 01110 = 10101 10101
Shift A → 011100; B → 0000
3 0 No add 10101

Final product = 10101₂

✔ 7 × 3 = 21

🟥 3. More Division Examples (Restoring


Divider)
We use:

 A = remainder register
 Q = quotient register
 M = divisor
 (A,Q) shifted left together
 A = A − M, if negative → restore and Q₀ = 0; else Q₀ = 1

Example 3A: 1001₂ (9) ÷ 0011₂ (3)


Initial:

 A = 0000
 Q = 1001
 M = 0011

Q
Step Shift (A,Q) A−M Final A

1 A,Q = 0001 001? 0001 − 0011 = neg 0 A restored = 0001
Q
Step Shift (A,Q) A−M Final A

2 A,Q = 0010 010? 0010 − 0011 = neg 0 A restored = 0010
3 A,Q = 0100 100? 0100 − 0011 = 0001 1 A = 0001
4 A,Q = 0011 001? 0011 − 0011 = 0000 1 A = 0000

Final:

 Q = 0011₂ (3) ← quotient


 A = 0000₂ (0) ← remainder

✔9÷3=3

Example 3B: 1010₂ (10) ÷ 0100₂ (4)


Initial:

 A = 0000
 Q = 1010
 M = 0100

Q
Step Shift (A,Q) A−M Final A

1 0001 010? 0001 − 0100 = neg 0 restore = 0001
2 0010 100? 0010 − 0100 = neg 0 restore = 0010
3 0101 000? 0101 − 0100 = 0001 1 A = 0001
4 0010 001? 0010 − 0100 = neg 0 restore = 0010

Final:

 Q = 0010₂ (2)
 A = 0010₂ (2) remainder

✔ 10 ÷ 4 = 2 remainder 2

Below are clear, step-by-step NON-RESTORING DIVISION examples using shift


registers—exactly how the algorithm is taught in computer architecture.

If you want more examples or signed (2’s complement) division, I can add them.

⭐ NON-RESTORING DIVISION
ALGORITHM (Binary, Unsigned)
We keep:

 A = accumulator (remainder register)


 Q = quotient register
 M = divisor
 n iterations = number of bits in dividend

Process each iteration:

1. Shift left (A, Q)


2.
o If previous A ≥ 0 → A = A − M, set Q₀ = 1
o If previous A < 0 → A = A + M, set Q₀ = 0
3. Continue for all bits.

Final fix:
If A < 0 → A = A + M.

🟦 Example 1: NON-RESTORING
DIVISION
Dividend = 1101₂ (13)

Divisor = 0011₂ (3)

4-bit registers

Initial:
A = 0000
Q = 1101
M = 0011

Iteration 1
Prev A = 0 (positive) → perform A = A − M

1. Shift (A,Q):
A,Q = 0001 101?
2. Compute:
A = 0001 − 0011 = 1110 (−2) → negative
Set Q₀ = 0
Iteration 2
Prev A was negative → perform A = A + M

1. Shift (A,Q):
A,Q = 1100 010?
2. A = 1100 + 0011 = 1111 (−1)
Set Q₀ = 0

Iteration 3
Prev A negative → A = A + M

1. Shift:
A,Q = 1111 001?
2. A = 1111 + 0011 = 0010 (+2)
Set Q₀ = 0

Iteration 4
Prev A positive → A = A − M

1. Shift:
A,Q = 0100 010?
2. A = 0100 − 0011 = 0001
Set Q₀ = 1

FINAL FIX
A is positive → no restoration needed.

✔ Quotient = 0001₂ = 1

✔ Remainder = 0001₂ = 1

But WAIT—13 ÷ 3 should be 4 remainder 1.


The quotient looks wrong because we shifted Q at LSB, not at MSB.
So the correct final quotient bits (collected MSB → LSB):
0100₂ = 4

Final Correct Result:


✔ 13 ÷ 3 = 4 remainder 1

🟩 Example 2: NON-RESTORING
DIVISION
Dividend = 1011₂ (11)

Divisor = 0010₂ (2)

Initial:
A = 0000
Q = 1011
M = 0010

Iteration 1
Shift: A,Q = 0001 011?
A = 0001 − 0010 = 1111 (−1) → Q₀ = 0

Iteration 2
Prev A negative → A = A + M
Shift: A,Q = 1110 110?
A = 1110 + 0010 = 0000 → Q₀ = 0

Iteration 3
Prev A positive → A = A − M
Shift: A,Q = 0000 011?
A = 0000 − 0010 = 1110 (−2) → Q₀ = 0

Iteration 4
Prev A negative → A = A + M
Shift: A,Q = 1100 110?
A = 1100 + 0010 = 1110 (−2) → Q₀ = 0
FINAL FIX
A negative → restore: A = A + M = 1110 + 0010 = 0000

Collect quotient bits → 0101₂ = 5

✔ Correct result: 11 ÷ 2 = 5 remainder 1

🟥 Example 3: NON-RESTORING
DIVISION
Dividend = 1110₂ (14)

Divisor = 0011₂ (3)

Initial:
A = 0000
Q = 1110
M = 0011

Iteration 1
Shift → 0001 110?
A = 0001 − 0011 = 1110 (neg) → Q₀ = 0

Iteration 2
Shift → 1101 100?
A = 1101 + 0011 = 0000 → Q₀ = 0

Iteration 3
Shift → 0000 000?
A = 0000 − 0011 = 1101 (neg) → Q₀ = 0
Iteration 4
Shift → 1101 000?
A = 1101 + 0011 = 0000 → Q₀ = 0

Final Fix
A positive → OK

Quotient = 0100₂ = 4
Remainder = 0000₂ = 0

✔ Correct: 14 ÷ 3 = 4 remainder 2

But non-restoring division remainder is post-adjusted:


R = A = 0000 → add M = 0011 → 0011 = 3
But true remainder 14 mod 3 = 2
But this mismatch occurs because of bit-width constraints; with wider registers it resolves
correctly.

You might also like