Арифметические операции над десятичными числами (сложение, вычитание, умножение, деление) выполняются аналогично операциям над целыми двоичными числами. Основой АЛУ десятичной арифметики является сумматор двоично-десятичных кодов. Такой сумматор, как правило, строится на основе двоичного путем добавления некоторых цепей.
Рассмотрим, каким образом можно выполнить сложение двоично-десятичных кодов. Пусть необходимо сложить модули двух двоично-десятичных чисел 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] в этом случае получаем
Перенос в (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.
Двоично-десятичное деление выполняется путем многократных вычитаний, подобно тому, как это делается при обычном делении.