Алгоритмы алгебраического сложения в обратном и дополнительном коде
В разд. 5.5.7 и З.6 подробно обсуждалось, как выполнить операцию алгебраического сложения чисел, уже представленных соответственно в обратном или дополнительном коде. Для этого достаточно выполнить арифметическое сложение двоичных векторов, получив истинное значение результата в коде представления операндов. При операции в обратном коде возникающий из знакового разряда перенос следует добавить к младшему разряду суммы. Переполнение обнаруживается согласно выражению (3.19). В случае если слагаемые представлены в прямом коде, а операция выполняется в обратном или дополнительном, их следует сначала преобразовать в соответствующий код, затем выполнить сложение и сумму вновь преобразовать в прямой код — код результата всегда должен соответствовать коду исходных данных. На рис. 3.21 приведен пример алгоритма алгебраического сложения в обратном коде чисел, представленных в прямом коде, а на рис. 3.22 — алгебраическое сложение/вычитание чисел в дополнительном коде. При рассмотрении алгоритмов использованы те же обозначения, которые были введены в разд. 3.4 для рис. 3.1. Дополнительно введем обозначения: □ — модули чисел; □ — перенос из знакового разряда; □ — ситуации переполнения в дополнительном коде. В алгоритме рис. 3.22 можно отметить один недостаток. При выполнении вычитания (f =1) необходимо получить дополнение второго операнда: что является арифметической операцией и требует времени, достаточного для прохождения переноса по всем разрядам числа. Для исключения дополнительной арифметической операции можно в первой операторной вершине осуществить только инверсию (логическую операцию, которая выполняется быстро), а недостающую "единицу" к младшему разряду добавить, если это необходимо, в качестве входного переноса младшего разряда в момент суммирования слагаемых. Таким образом, в двух первых операторных вершинах алгоритма рис. 3.22 следует поместить такие операторы: (Страница62) Рис 3.21. Алгоритм алгебраического сложения в обратном коде Рис. 3.22. Алгоритм алгебраического сложения/вычитания в дополнительном коде
|