Десятичная арифметика
Машинная обработка десятичных чисел (сложение, вычитание, умножение, деление) производится аналогично обработке двоичных целых. Основой является сумматор двоично-десятичных кодов. Такой сумматор строится на основе обычного двоичного сумматора путем добавления к нему дополнительных цепей. Вычисления производятся побайтно. Одна двоично-десятичная цифра занимает 4 двоичных разряда (тетраду). В одном байте помещаются две двоично-десятичные цифры в упакованном формате.
Рассмотрим особенности обработки двоично-десятичных чисел на примере вычисления суммы. Для случаев, когда сумма двух десятичных цифр меньше десяти, обычный четырехразрядный двоичный сумматор дает правильный результат. Проблемы начинаются, когда сумма двух десятичных цифр равна или больше десяти.
Когда сумма цифр равна десяти (1010(2)) двоично-десятичный сумматор должен формировать единицу переноса и тетраду 0000(2) результата Для этого применяются коды с избытком 6. При сложении разрядных цифр слагаемых к ним при помощи дополнительных цепей добавляется цифра 6 (0110(2)). В результате значение суммы увеличивается на 6 и при сумме равной десяти и более формируется единица переноса в старший разряд (тетраду) и правильная разрядная цифра суммы. Но в случае, когда разрядная сумма принимает значение меньше десяти, она оказывается смещенной в диапазон от 6 до 15, что не соответствует двоично-десятичной кодировке. Для получения правильной суммы делается коррекция.
При отсутствии переноса в старшую тетраду к полученной разрядной сумме добавляется число 1010(2) с блокировкой переноса в старшую тетраду. Это равносильно уменьшению числа на 6 (0110(2)), т.е. снятию смещения.
Вычитание двоично-десятичных чисел производится на двоично-десятичном сумматоре с использованием дополнительного или обратного кодов.
Все разряды вычитаемого инвертируются, что дает дополнение каждой цифры до 15. При этом получается обратный код двоично-десятичной цифры с избытком 6. Затем производится сложение вычитаемого с уменьшаемым с одновременным прибавлением к младшему разряду 1 (получение дополнительного кода из обратного).
Результат является положительным, если из старшей тетрады возникает перенос. При этом тетрады корректируются по тем же правилам, что и при сложении.
Если из старшей тетрады нет переноса, то получен отрицательный результат, представленный в дополнительном коде. В этом случае, результат инвертируется и к нему прибавляется 1. Новый результат корректируется, при этом к тетрадам, из которых не возникал перенос, прибавляется число 1010(2).
Дата добавления: 2022-02-05; просмотров: 313;