Информатика и информационные технологии: конспект лекций

ОглавлениеДобавить в закладки К обложке

Сложение упакованных BCD-чисел

Вначале разберемся с сутью проблемы и попытаемся сложить два двузначных упакованных BCD-числа. Пример Сложение упакованных BCD-чисел:

67 = 01100111

+

75 = 01110101

=

142 = 1101 1100 = 220

Как видим, в двоичном виде результат равен 1101 1100 (или 220 в десятичном представлении), что неверно. Это происходит по той причине, что микропроцессор не подозревает о существовании BCD-чисел и складывает их по правилам сложения двоичных чисел. На самом деле, результат в двоично-десятичном виде должен быть равен 0001 0100 0010 (или 142 в десятичном представлении).

Видно, что, как и для неупакованных BCD-чисел, для упакованных BCD-чисел существует потребность как-то корректировать результаты арифметических операций.

Микропроцессор предоставляет для этого команду daa – daa (Decimal Adjust for Addition) – коррекция результата сложения для представления в десятичном виде.

Команда daa преобразует содержимое регистра al в две упакованные десятичные цифры по алгоритму, приведенному в описании команды daa Получившаяся в результате сложения единица (если результат сложения больше 99) запоминается в флаге cf, тем самым учитывается перенос в старший разряд.

Вычитание упакованных BCD-чисел

Аналогично сложению, микропроцессор рассматривает упакованные BCD-числа как двоичные и, соответственно, выполняет вычитание BCD-чисел как двоичных.

Пример

Вычитание упакованных BCD-чисел.

Выполним вычитание 67–75. Так как микропроцессор выполняет вычитание способом сложения, то и мы последуем этому:

67 = 01100111

+

-75 = 10110101

=

-8 = 0001 1100 = 28

Как видим, результат равен 28 в десятичной системе счисления, что является абсурдом. В двоично-десятичном коде результат должен быть равен 0000 1000 (или 8 в десятичной системе счисления).

При программировании вычитания упакованных BCD-чисел программист, как и при вычитании неупакованных BCD-чисел, должен сам осуществлять контроль за знаком. Это делается с помощью флага CF, который фиксирует заем из старших разрядов.

Само вычитание BCD-чисел осуществляется простой командой вычитания sub или sbb. Коррекция результата осуществляется командой das – das (Decimal Adjust for Substraction) – коррекция результата вычитания для представления в десятичном виде.

Команда das преобразует содержимое регистра AL в две упакованные десятичные цифры по алгоритму, приведенному в описании команды das.


Логин
Пароль
Запомнить меня