Реализация вычитания сумматором — различия между версиями
(Новая страница: «==Преобразование чисел для вычитания сумматором== Что бы реализовать вычитание [[Каскадный...») |
Alex z (обсуждение | вклад) |
||
Строка 16: | Строка 16: | ||
Очевидно, что такой подход к вычитанию сумматором не оптимален.Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа.<br />Таким образом, можно посылать в полученный ''арифмометр для сложения и вычитания'' числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание. | Очевидно, что такой подход к вычитанию сумматором не оптимален.Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа.<br />Таким образом, можно посылать в полученный ''арифмометр для сложения и вычитания'' числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание. | ||
− | <!-- | + | ==Пример реализация вычитания сумматором== |
+ | ===Условные обозначения=== | ||
+ | {| border="1" | ||
+ | ![[Файл:XOR_logic_element.png|100px|XOR]] | ||
+ | | логический [[Реализация булевой функции схемой из функциональных элементов|функциональный элемент]]'''XOR'''<br />'''A''' и '''B''' входы и '''Y''' выход. | ||
+ | !<math> \mathbf A \oplus B = Y</math><br /><math> \mathbf 0 \oplus 0 = 0</math><br /><math> \mathbf 0 \oplus 1 = 1</math><br /><math> \mathbf 1 \oplus 0 = 1</math><br /><math> \mathbf 1 \oplus 1 = 0</math> | ||
+ | |- | ||
+ | !<math> \mathbf {\color{Goldenrod}\mbox{A}_\mathrm{0} , \mbox{A}_\mathrm{1} ... \mbox{A}_\mathrm{N}} </math> | ||
+ | |'''0'''-ой '''1'''-ый ... '''n'''-ный биты первого слагаемого или уменьшаемого. | ||
+ | !<math> \mathbf A </math> | ||
+ | |- | ||
+ | !<math> \mathbf {\color{Red}\mbox{B}_\mathrm{0} , \mbox{B}_\mathrm{1} ... \mbox{B}_\mathrm{N}} </math> | ||
+ | |'''0'''-ой '''1'''-ый ... '''n'''-ный биты второго слагаемого или вычитаемого. | ||
+ | !<math> \mathbf B</math> | ||
+ | |- | ||
+ | !<math> \mathbf {\color{Green}\mbox{S}_\mathrm{0} , \mbox{S}_\mathrm{1} ... \mbox{S}_\mathrm{N}} </math> | ||
+ | |'''0'''-ой '''1'''-ый ... '''n'''-ный биты ответа. | ||
+ | !<math> \mathbf S = A \pm B</math> | ||
+ | |- | ||
+ | !<math> \mathbf {\color{Blue}T} </math> | ||
+ | |бит отвечающий за знак операции | ||
+ | !0 если <math> \mathbf S = A + B</math><br />1 если <math> \mathbf S = A - B</math><br /> | ||
+ | |- | ||
+ | !<math> \mathbf {\color{OliveGreen}0 , 1 ... N} </math> | ||
+ | |[[Сумматор|блоки]] [[Каскадный сумматор|каскадного]] или [[Двоичный каскадный сумматор|двоичного каскадного]] сумматора | ||
+ | !T подключён к C<small>0<br /> 0-вому биту переноса в сумматоре</small> | ||
+ | |} | ||
+ | ===Изображение арифмометра=== | ||
+ | [[Файл:Arithmometer_SUM_SUB.png|Арифмометр]] |
Версия 20:00, 29 ноября 2011
Содержание
Преобразование чисел для вычитания сумматором
Что бы реализовать вычитание каскадным или двоичным каскадным сумматором, нужно сложить на нём уменьшаемое с противоположным по знаку вычитаемым, так же как и при вычитании обычных чисел. Тогда полученная сумма будет разностью данных чисел.
Инверсия знака записанного в двоичном виде числа происходит точно так же, как и в дополнительном коде.
Данное число нужно инвертировать и прибавить к нему единицу.
Например число
будет записано как , так как , а
Оптимизация
Очевидно, что такой подход к вычитанию сумматором не оптимален.Что бы упростить вычисления нужно воспользоваться лишним битом переноса в сумматоре, в который посылают ноль, и послать в него единицу при вычитании и ноль при суммировании. Вместо того что бы инвертировать вычитаемое число, можно сделать XOR бита первого переноса с каждым битом вычитаемого числа.
Таким образом, можно посылать в полученный арифмометр для сложения и вычитания числа точно так же как и при сложении, только первый бит переноса будет отвечать за знак операции: 0-сложение 1-вычитание.
Пример реализация вычитания сумматором
Условные обозначения
логический функциональный элементXOR A и B входы и Y выход. |
||
0-ой 1-ый ... n-ный биты первого слагаемого или уменьшаемого. | ||
0-ой 1-ый ... n-ный биты второго слагаемого или вычитаемого. | ||
0-ой 1-ый ... n-ный биты ответа. | ||
бит отвечающий за знак операции | 0 если 1 если | |
блоки каскадного или двоичного каскадного сумматора | T подключён к C0 0-вому биту переноса в сумматоре |