Алгоритмы алгебраического сложения и вычитания
Рассмотрим сначала указанные операции для чисел в форме с фиксированной запятой. Конкретные алгоритмы, которые используются для выполнения этих операций в арифметическо-логических устройствах (АЛУ), зависят от многих факторов, основными из которых являются:
- в каких кодах числа хранятся в оперативном запоминающем
устройстве (ОЗУ);
- в каких кодах выполняется операция вычитание.
В зависимости от этих факторов существуют алгоритмы следующих типов:
ПП - числа в ОЗУ хранятся в прямом коде, операция вычитание выполняется также в прямом коде;
ПД(ПО) – числа в ОЗУ хранятся в прямом коде, операция вычитание выполняется в дополнительном (обратном) коде;
ДД(ОО) - числа в ОЗУ хранятся в дополнительном (обратном) коде, операция вычитание выполняется также в дополнительном (обратном) коде.
Алгоритм типа ПП
Основной особенностью этого алгоритма является то, что он аналогичен методу десятичного ручного счета. Как известно, ручное сложение-вычитание выполняется по следующим правилам:
- вычисления осуществляются над модулями чисел;
- действие над модулями определяется на основе анализа вычислительной операции (действия ) и знаков чисел;
- выполняется действие над модулями;
- если действие над модулями вычитание, то из большего модуля вычитается меньший;
- знак результата определяется логическим способом в зависимости от действия над модулями, соотношения модулей и знаков исходных чисел.
|
|
Рассмотрим S=A ± B ïA ê< 1 êB ê< 1 A≠0 B≠0
Для того, чтобы формализовать постановку задачи, введем обозначения:
Действие сложение - D:=0
Действие вычитание - D:=1
Сложение модулей - DM:=0
Вычитание модулей - DM:=1
Знак числа - ¢+¢:=0
Знак числа - ¢-¢:=1
Соотношение êA ê³ êB ê соответствует W:=1
При êA ê< êB ê принято W:=0
Зададим условия этой задачи в виде таблицы истинности (табл. 1.1), в которой описаны все варианты исходных данных.
Таблица 1.1
ЗН A | ЗН B | D | DM | ЗН S | |
|
|
|
| W:=1 | W:=0 |
0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 0 |
В этой таблице истинности входными переменными являются ЗНА, ЗНВ, D, а выходными переменными - DM и ЗНS. После анализа данных в таблице можно сделать заключение, что действие над модулями DM является двоичной суммой трех входных переменных, а именно
|
|
DM = SM ( ЗНА, ЗНВ, D) (1.7)
Таким же образом составим логическое выражение для знака суммы
ЗНS := W & ЗНA Ú & DM & Ú & & ЗНA (1.8)
Сформулируем теперь в словесном виде алгоритм типа прямой-прямой (ПП), в соответствии с которым должны осуществляться преобразование и анализ кодов двоичных чисел при выполнении в АЛУ операции S = A ± B.
1) Ввод из ОЗУ в АЛУ [А]п и [В]п.
2) Определение DM по табл. 1.1.
3) Если DM=0, то êSê= êАê+êВê,
если перенос p =1, то имеется переполнение разрядной сетки сумматора. В противном случае перенос p =0 и переход к п. 5), иначе
4) Если DM:=1, то выполняется вычитание модулей, причем
сначала определяется êS ê= êA ê- êB ê и, если p =0, то êA ê³ êB ê и переход к п.5), иначе находится êS ê = êB ê- ï A ï и êA ê< êB ê
5) Определение ЗНS и запись результата в память.
Выполним, пользуясь этим алгоритмом,
|
|
пример:
Вычислить S = A + B A = .01011 B = - .10101
Следовательно [A]п = 0.01011 [B]п = 1.10101
Определим DM. Так как D:= 0 ЗНA:=0 ЗНB:=1,
то на основании (1.1)
DM = SM ( 0,0,1) = 1
Теперь выполним вычитание модулей
ïA ê _= .0 1 0 1 1
êB ê = .1 0 1 0 1
1.1 0 1 1 0
так как р=1, то êAê< êBê и следует выполнить вычитание
модулей в обратном порядке:
êB ê=.1 0 1 0 1
-
êA ê=. 0 1 0 1 1
êS ê=. 0 1 0 1 0
Очевидно, что знак результата ЗНS = ЗНВ.
В память должен заноситься прямой код результата, т. е.
[S]п = 1. 0 1 0 1 0
В обычной записи сумма выглядит следующим образом:
S = - . 0 1 0 1 0
Выполним некоторую качественную оценку данного алгоритма. .Достоинством является то, что числа вводятся в память в прямых кодах и все вычислительные операции выполняются также в прямых кодах. Благодаря этому отсутствуют промежуточные преобразования кодов, что способствует повышению быстродействия.
|
|
Недостатком является необходимость использовать в АЛУ, кроме сумматоров, многоразрядные вычитатели, что приводит к увеличению оборудования.
Алгоритмы типов ПД или ПО
Настоящий алгоритм в основных чертах подобен рассмотренному выше алгоритму типа ПП. Основное отличие состоит в том, что операция вычитание заменяется сложением в дополнительном или обратном кодах (см. п. 1.3). Отметим главные особенности этого алгоритма:
1) Числа в памяти хранятся в прямых кодах.
2) Вычисления выполняются над модулями чисел.
3) Действия над модулями определяются в соответствии с табл. 1.1.
4)Если DM:=0, то êSê= êАê+êВê, далее проверяется наличие переполнения разрядной сетки сумматора, в противном случае
ЗНS=ЗНА и переход к п. 9), иначе
5) DM=1 и выполняется сложение модулей в дополнительном (обратном) кодах, вычисляется псевдосумма S* = ïAï + [-çBç]д.
6) Анализируется значение переноса P0 из старшего разряда сумматора. Если P0=1, то результат положителен, S* =ïSï и ЗНS=ЗНА ,переход к п. 9), иначе
7) P0=0 и, значит, результат суммирования отрицателен, т.е. модуль суммы получился в дополнительном (или обратном) коде S*=[- êS ê]д, ЗНS=ЗНВ.
8) Следует преобразовать дополнительный (или обратный) код модуля суммы в прямой код.
9) Запись [S]п в память.
Выполним в соответствии с алгоритмом ПД пример алгебраического вычитания для двоичных чисел в форме с фиксированной запятой.
- Имеется два числа А≠0 В≠0 êА ê< 1 ïВï< 1
Вычислить S=A-B; A= -.011011 , В = -.110011 ;
1) Числа из памяти принимаются в АЛУ в прямом коде
[A]п = 1.011011 [B]п = 1.110011
2) Определим действия над модулями DМ, пользуясь формулой (3.1).
Так как D:=1 ЗНA:=1 ЗНB: =1 , то DM: =1.
3) Вычитание модулей заменяем сложением в дополнительном коде.
Находим [-êBê]д = [-êBê]о = . 0 0 1 1 0 0
+ . 0 0 0 0 0 1
. 0 0 1 1 0 1
Далее вычисляем псевдосумму S* = êAêп + [-êBê]д
S* = .0 1 1 0 1 1
+ .0 0 1 1 0 1
.1 0 1 0 0 0
4) Как видим, P0 = 0 , следовательно, S* < 0 и S*= [- êSê]д
5) Найдем прямой код модуля суммы по формуле
êS êп = [ S* ] д = [S*]о = .0 1 0 1 1 1
+.0 0 0 0 0 1
êS êп = .0 1 1 0 0 0
6) Далее определим логическим путем по формуле (3.2) знак результата.
Так как P0 = 0 , то êА ê< êВ ê, , DM: = 1, ЗНА = 1. Следовательно
ЗНS: = 0
Сумма в прямом коде [S] п = 0.011000 ; S = .011000
Алгоритм алгебраического сложения и вычитания типа ПО в значительной степени совпадает с рассмотренным в этом разделе алгоритмом ПД.
Имеют место отличия в п 5, где при DM := 1 вычитание выполняется не в дополнительном, а в обратном коде, а также в п. 8 при переходе к представлению отрицательного результата из обратного кода в прямой код.
Оценим кратко основные характеристики алгоритма ПД.
К достоинствам можно отнести хранение чисел в памяти в прямых кодах, благодаря чему отсутствует преобразование кодов при вводе и выводе чисел из ЭВМ. Кроме того, выполнение операции вычитание в дополнительном коде позволяет в АЛУ обойтись одним сумматором, что уменьшает оборудование по сравнению с алгоритмом ПП. Недостатком является необходимость преобразования отрицательного результата из дополнительного кода в прямой перед записью в память, что снижает быстродействие.
Дата добавления: 2018-05-12; просмотров: 590; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!