Особенности операций десятичной арифметики

Арифметические операции над десятичными числами (сло­жение, вычитание, умножение, деление) выполняются аналогич­но операциям над целыми двоичными числами. Основой АЛУ десятичной арифметики является сумматор двоично-деся­тичных кодов. Такой сумматор, как правило, строится на осно­ве двоичного путем добавления некоторых цепей.

Рассмотрим, каким образом можно выполнить сложение двоично-десятичных кодов. Пусть необходимо сложить модули двух двоично-десятичных чисел X и Y. Первое слагаемое X преобразуем в код с избытком 6 (обозначим Х6), полу­чаемый путем прибавления к каждой цифре X двоичного числа 6. Переход от X к Х6 изменяет все тетрады X так, что в каждой тетраде Х6 находится число 6 - 15.

Складывая Х6 и Y по правилам двоичного сложения, полу­чаем результат Z'. В Z' одни тетрады совпадают, а другие не совпадают с тетрадами двоично-десятичной суммы Z.

Если результат сложения в i-м разряде X [i] + Y[i] + Р [i] >= 10, где Р [i] - десятичный перенос в i-й разряд, то i-я десятичная цифра Z [i] = X [i] + Y[i] + Р [i] – 10 и Р [i + 1] = 1, где Р [i + 1] - десятичный перенос в (i + 1)-й разряд. Для Z'[i] в этом случае получаем

Z'[i] = Х6[1] + У[i] +P[i] - 16= 6+ X[i] + Y[i] + Р[i] - 16 = Z[i].

При этом возникает перенос в (i+1)-ю тетраду.

Если 1-я десятичная цифра Z(i) должна получаться из X [i] + Y[i] + Р [i] < 10, то Z[i] = X [i] + У[i] + Р [i] и Р[i+1] = 0.

Для Z'(i) в этом случае получаем

Z’[i] =X6[i] + Y[i] + Р[i] = 6 + Х[i] + У[i] + Р[i] =Z[i] + 6.

Перенос в (i + 1)-ю тетраду здесь не возникает (Р[i+1] = 0), так как

Z' [i] < 16.

Таким образом, складывая Х6 и Y как двоичные числа, по­лучаем Z'. В Z' тетрады, из которых возникал перенос, совпа­дают с тетрадами двоично-десятичного результата Z, а те­трады, из которых не было переноса при сложении, предста­влены с избытком 6. Для получения суммы Z необходимо откорректировать Z' путем уменьшения на 6 тех тетрад Z , из которых не было переноса при сложении Х6 и Y.

Вычитание числа 6 из тетрад, требующих коррекции, можно ре­ализовать путем подсуммирования числа 10 с одновременным игно­рированием переноса, возникающего при этом из тетрад. Если Z' [i] нуждается в коррекции, то Z' [i] = Z[i]+ 6. Поэтому Z'[i] + 10 >= 16, значит, после прибавления 10 из тетрады возни­кнет перенос, т. е. в тетраде останется (Z' [i] + 10)-16 = Z[i]-6.

Вычитание двоично-десятичных модулей X-Y осущест­вляется следующим образом.

Все разряды Y инвертируются, что дает дополнение каждой цифры Y до 15, при этом получается обратный код двоично-де­сятичного Y с избытком 6, обозначенный Уобр6. Затем, склады­вая X + Уобр6 и прибавляя 1 к младшему разряду, получаем Z. Результат Z' является положительным числом, если из старшей тетрады его возникает перенос, при этом Z' корректируется по тем же правилам, что и при сложении модулей.

Если из старшей тетрады 2' нет переноса, то получен отри­цательный результат, представленный в дополнительном коде. В этом случае код Z' инвертируется и к нему прибавляется 1 младшего разряда. Новое Z' корректируется, при этом к те­традам, из которых возникал перенос при получении (X + Уобр6 + 1), прибавляется 10, а к остальным не прибавляется.

Выполнение сложения и вычитания чисел со знаками сво­дится к выполнению сложения или вычитания модулей путем определения фактической выполняемой операции по знакам опе­рандов и виду выполняемой операции. Знак результата опреде­ляется отдельно. Например, при X < 0 и Y < 0 вычитание X- Y заменяется вычитанием | Y | - | X |. Затем знак результата меняется на противоположный знаку (| Y | - | X |).

Двоично-десятичное умножение сводится к образованию и многократному сложению частичных двоично-десятичных произведений. Умножение двоично-десятичных чисел выпол­няется следующим образом:

1) сумма частичных произведений полагается равной нулю;

2) анализируется очередная цифра (тетрада) множителя, и множимое прибавляется к сумме частичных произведений столько раз, какова цифра множителя;

3) сумма частичных произведений сдвигается вправо на 1 тетраду, и повторяются действия, указанные в п. 2, пока все цифры множителя не будут обработаны.

Для ускорения умножения часто отдельно формируются кратные множимого 8Х, 4Х, 2Х и IX, при наличии которых уменьшается число сложений при выполнении п. 2.

Двоично-десятичное деление выполняется путем много­кратных вычитаний, подобно тому, как это делается при обыч­ном делении.