Сумматор
A B Pn Pn-1 |
Выход переполнения
A | B | Pn-1 | Pn | |
AB | B | A | ||
Pn-1 | ||||
= Pn-1AB + B + Pn-1 + A = ( B + A ) + Pn-1(AB + )
Pn | AB | B | A | |
Pn-1 | ||||
Pn = Pn-1B + Pn-1A + AB = Pn-1(A + B) + AB
Чтобы реализовать суммирование большего число элементов, надо организовать последовательное сложение.
Скорость небольшая, сдвиг идет последовательно.
Еще один способ – сделать больше входов в сумматоре, но это материально более невыгодно. Третий способ – комбинированный.
Отрицание.
Через добавленный код – старший бит делается единицей.
"4" – 0100 1011 – "-4"
"3" – 0011 1100 – "-3"
0000 - 0 1111 - -0
0001 - 1 1110 - -1
0010 - 2 1101 - -2
0011 - 3 1100 - -3
0100 - 4 1011 - -4
0101 - 5 1010 - -5
0110 - 6 1001 - -6
0111 - 7 1000 - -7
Добавленный код – "+1":
1111 - -1
1110 - -2
1101 - -3
1100 - -4
1011 - -5
1010 - -6
1001 - -7
1000 - -8
Если "-" числа представлять в виде добавленного кода, их можно просто складывать.
Если подаем 0, вход В не инвертируется, выполняется сложение. Если подаем 1 – имеем инвертированный вход В+1 => добавленный код
Помимо сумматора необходим регистр сдвига.
A0 ALU Q0 A1 A2 Q1 A3 Q2 B0 Q3 B1 B2 Q4 B3 Q5 L0 Q6 L1 Q7 L2 L3 P |