
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
Глава 6
ДВОИЧНО-ДЕСЯТИЧНАЯ АРИФМЕТИКА
6.1. Сложение в прямых д-кодах
В двоично-кодированном представлении десятичного числа каждая десятичная цифра изображается тетрадой двоичных символов аi = а4i а3 i a2 i a1 i, где аi — десятичная цифра i-го- разряда; аji — двоичная цифра i-й тетрады. Полученный таким образом десятичный код, кодированный двоичными символами, для краткости называют Д-кодом.
Имеется некоторое множество Д-кодов. Оно обусловливается наличием всего 10 разрешенных из 16 возможных комбинаций, которые допускает тетрада. Наличие запрещенных комбинаций в Д-кодах отличает их от обычных позиционных систем счисления, в которых все комбинации — разрешенные. Из всего множества известных Д-кодов наибольшее распространение в вычислительной технике получили код Д1 прямого замощения (система 8421) и код Д2 с избытком 3 (система 8421 + 3).
Из-за запрещенных комбинаций, при сложении чисел в любом из Д-кодов возникают необходимость в коррекции результата и трудности в формировании десятичного переноса в следующую тетраду. Особенности сложения чисел в каждом из Д-кодов различны, поэтому рассмотрим их раздельно. При этом будем считать, что заданы числа А = ап ап-1...а1 а0 и В = bп bп-1...b1 b0 , где аi ,bi - двоично-кодированные десятичные цифры (тетрады).
Необходимо получить: А + В = С = сп сп-1...с1 с0, причем
сi = аi + bi + Пi-1 - Пi р; сn+1 = Пn ,
где Пi = {0, 1}, Пi-1 = {0, 1} —десятичные переносы; р = 10 — основание системы счисления.
Так как наибольшее десятичное одноразрядное число равно 9, то с учетом переноса в данный разряд, значение результата разрядного суммирования лежит в пределах от 0 до 19. При этом единица во втором разряде представляет собой десятичный перенос в следующую тетраду, а сумма получается в двоичном коде, отличном от требуемого двоично-десятичного представления, т. е. она требует коррекции.
Код Д1.
При сложении чисел в коде Д1 могут возникнуть следующие случаи:
1. Если аi + bi + П n-1< 10, то при выполнении действий над разрядами тетрады по правилам двоичной арифметики сразу получается правильный результат.
2. Если аi + bi + Пn-1 ≥ 10, то возникает десятичный перенос. Поэтому сумма в данной тетраде должна быть равна:
аi + bi + Пi-1 - Пi • 10,
где Пi = 1.
При этом признаком неправильного результата является в одном случае возникновение потетрадного переноса Пi ‘= 16, во втором - появление запрещенной комбинации, если 15 аi + bi + Пi-1 ≥10. В любом из этих случаев необходимо скорректировать результат в данной тетраде введением поправки +0110, что приведет к возникновению потетрадного переноса и во втором случае. Коррекция обусловлена тем, что каждый перенос уносит с собой из данной тетрады 16 единиц, а приносит в следующую только 10 единиц.
Пример. Сложить тетрады аi = 1000 и bi = 1001 при П i-1 = 1.
сi = аi + bi + Пi-1 = 10010.
Так как Пi = 1, требуется коррекция результата
сi = 0010 + 0110= 1000; Пi = Пi’ = 1
Пример. Сложить аi = 1000 и bi = 0110 при П i-1 = 1
сi = аi + bi + Пi-1 = 1111.
Так как величина сi‘ = 1111 принадлежит к запрещенным комбинациям, то необходимо ввести поправку вида 0110:
сi = 1111 +0110= 10101, т. е. Пi = 1, сi = 0101.
Таким образом, если в i-и тетраде сумма цифр с переносом из (i — 1)-й тетрады меньше 10, то сложение производится без поправок; если же сумма цифр с переносом равна или больше 10, то происходит коррекция результата тетрады введением поправки +0110, а возникающий при этом перенос прибавляется к содержимому (i + 1)-й тетрады.
При этом, если в нескольких тетрадах, начиная с (i + 1)-й, разрядная сумма равна 1001, то перенос приведет к формированию запрещенной комбинации в (i + 1)-й тетраде. В результате этого потребуется коррекция, которая приведет к запрещенной комбинации в (i + 2)-й тетраде и т. д. Следовательно, из-за последовательного распространения потетрадных переносов время сложения в коде Д1 составит в худшем случае п тактов, где п — количество тетрад. Обычно схемы строят таким образом, чтобы перенос, возникающий при прибавлении тетрадной поправки, проходил сквозь тетрады, в которых предварительная сумма равна 910 = 10012 и сбрасывал их в 0. При этом сумма всегда формируется за два такта.
Пример. Сложить числа
A=24810 =0010 0100 1000 и B=34910 = 0011 0100 1001
0010 0100 1000
+
0011 0100 1001
0101 1001
0001
+
0110
0101 1001 0111 : 59710 = 24810 + 34810
Стрелкой показаны единицы потетрадных переносов.
Код Д2
При сложении чисел в коде Д2 возможны следующие случаи с учетом того, что аi‘=аi + 3;
bi‘ = bi +3, где аi‘ и bi‘ — тетрады для кода Д2.
Если аi‘+ bi‘ + Пi-1 ≤ 15, то Сi = (аi + bi + Пi-1 + 3) + 3 = Сi+6 = Сi‘+ 3,
т.е. результат необходимо скорректировать на величину (—0011). Если же аi + bi + Пi-1 > 15, то
Сi = (аi + bi + Пi-1 + 6) + 10 - 16 = Сi‘ - 3. Здесь возникает десятичный перенос, который при переходе в старшую тетраду меняет свой вес с 16 на 10. Поэтому в этом случае требуется поправка результата на величину +0011.
Сумматоры не производят операцию вычитания, поэтому поправка (—310) = (—0011)2 осуществляется прибавлением в данную тетраду числа (13)10 = (1101)2 и блокированием возникающего при этом переноса из данной тетрады в старшую, который имеет значение (16)10 = (10000)2:
(-3= +13 - 16)10 или (-0011= + 1101 — 10000)2.
Пример. Заданы в коде Д2 А = 46= 0111 1001; В = 37= ОНО 1010.
Найдем сумму
0111 1001
+
0110 1010
1110 0011
+
1101 0011
1 1011 0110 = 83
—> не реализуется.
При сложении в коде Д2 не возникает проблемы сквозного переноса и операция сложения выполняется в два такта. Это объясняется тем, что если в нескольких тетрадах сумма до прибавления поправки равна 910 = 11112, то при поступлении переноса из (i - 1)-й тетрады в i -ю, ее содержимое сбросится в 0 и перенос пойдет в ( i + 1)-ю тетраду в этом же такте суммирования. В 1-ю же тетраду во втором такте суммирования будет прибавлена поправка +0011. Поэтому коррекция результата осуществляется потетрадно с блокировкой цепей потетрадных переносов. Таким образом, в коде Д2 всегда производится коррекция промежуточного результата, полученного путем сложения цифр слагаемых по правилам двоичной арифметики. При этом, если при сложении 1-х тетрад не возникает переноса, т. е. Пi = 0, то поправка равна — 0111. Если же возникает потетрадный перенос Пi = 1, то поправка в i -й тетраде равна +0011.