При сложении двух двоично-десятичных чисел А = ап-\ап-2-" и 5 = bn-\bb-2-"b\b{) поступают следующим образом. Если оба операнда имеют одинаковые знаки, то выполняют сложение модулей этих чисел (\А\ + |5|), а знаковый разряд суммы определяют по знаку одного из слагаемых. Если операнды имеют разные знаки, то предварительно знак суммы устанавливают по знаку первого операнда А, Затем производят вычитание модулей чисел (1^1 – |5|). Если полученная разность больше нуля, знак суммы сохраняется без изменений. Если разность меньше нуля, следует найти дополнительный код разности и изменить знак суммы на противоположный.
При сложении двух чисел А и В, представленных в 2-10 коде, с весом 8—4-2-1 в каждой тетраде, в одном разряде суммы S = А-\- В можно получить результаты:
1) 5; < 9; не требует коррекции;
2) 10 < 5;< 15; требует коррекции путем увеличения 5;на шесть с образованием переноса из тетрады;
3) Si > 15; требует коррекции путем увеличения 5; на шесть. В этом случае перенос из тетрады образуется автоматически при сложении операндов до выполнения коррекции.
В микроконтроллерах с архитектурой MCS-51 коррекция осуществляется аппаратно при выполнении команды 2-10 коррекции. При отсутствии схемы 2-10 коррекции, как в микроконтроллерах AVR, поступают следующим образом. При сложении двоично- десятичных чисел добавляют число, каждый разряд которого равен шести. В этом случае, если вычисляемая поразрядная сумма Si < 9, перенос из тетрады не возникнет и избыточное значение шесть подлежит удалению. Во всех остальных случаях добавленное в разряд значение шесть удаляется автоматически с переносом из тетрады в процессе сложения. При таком способе сложения программная реализация упрощается, так как для коррекции результата в тетраде проверяется лишь один признак – наличие или отсутствие переноса из тетрады.
Таким образом, сложение беззнаковых чисел (как и модулей 1^1 + |5|) можно выполнить по алгоритму, схема которого приведена на рис. 3.6:
1) двоично-десятичный код первого операнда
Рис. 3.7. Алгоритм вычитания 2-10 чисел
Пример. А = 23,В = 62. Найти разность^ – В.
Двоично-десятичное представление чисел А и В: А = 0010 ООП, 5 = = 0110 0010.
Дополнение числа В:= 1001 1110. Вычитая А – В = А
получаем R’:
Переноса нет: результат отрицательный, флаг заема равен 1.
Формируем дополнение [Л’]доп ^ выполняем коррекцию:
Результат: флаг знака разность 39.
Когда отрицательный результат требуется сохранить в дополнительном коде, шаг формирования дополненияопускается. Можно сразу переходить к коррекции (вычитанию шести в тех тетрадах, где не было переноса) Программный код процедуры 2-10 вычитания однобайтовых операндов для этого случая приведен в программе 3.1.
- Предыдущая запись: ТАЙМЕР;СЧЕТЧИК Т1 МИКРОКОНТРОЛЛЕРОВ АТх8515
- Следующая запись: Приемник-сверхрегенератор на полевом транзисторе
- УСТРОЙСТВО ЗАРЯДА И КОРРЕКЦИИ ДЛЯ НИКЕЛЬ-КАДМИЕВОГО АККУМУЛЯТОРА (0)
- Микрофонный усилитель-компрессор для УКВ ЧМ-передатчика (0)
- Управление нагрузкой широтно-импульсным методом (0)
- CAN HLP протоколы (0)
- Защита от лазерных подслушивающих устройств. (0)
- Система команд микроконтроллеров AVR (0)
- ВЗАИМОДЕЙСТВИЕ МИКРОКОНТРОЛЛЕРА С КНОПКАМИ И СВЕТОДИОДАМИ (0)