Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Машинные языки Швидченко Д.В.на 4 Семестр / Теоретический материал / Арифметические операции с двоичными числами.docx
Скачиваний:
61
Добавлен:
11.02.2015
Размер:
1.02 Mб
Скачать

Арифметические действия в ддк Сложение в двоично-десятичном коде

В процессе сложения вырабатывается сумма по модулю 16 и 16-ричный выходной перенос. Но в итоге необходимо получить число по модулю 10 и 10-тичный перенос, поэтому в некоторых случаях полученный результат следует скорректировать на 6.

Введем обозначения: Хi – цифра i-го разряда 1-го слагаемого, Yi – цифра

i-го разряда 2-го слагаемого, Pi – перенос из (i – 1)-го разряда в i-ый разряд.

Тогда рассмотрим возможные случаи:

1. Если Хi + Yi + Pi < 10, то суммы по модулю 10 и 16 совпадают и коррекция результата не нужна.

2. Если Хi + Yi + Pi ≥ 16, то при первом сложении сумму необходимо скорректировать на +6, т.к. перенос передан в старший разряд весом 16 вместо 10. Признаком коррекции при этом служит выходной тетрадный перенос.

3. Если 10 ≤ Хi + Yi + Pi < 16, то необходима коррекция на +6 из-за превышения допустимого значения суммы.

Например, сложить 18410 и 29810:

В результате сложения в младшем разряде (тетраде) мы получили результат, превышающий 9 (правило 3). Следовательно, необходима коррекция на +6 из-за превышения допустимого значения суммы. Во втором разряде (тетраде) имеет место правило 2, т.е. имеется выходной тетрадный перенос. Следовательно, также необходима коррекция на +6.

Сложить 47510 и 82910:

После выполнения коррекции результата мы вновь получили во втором разряде результат, превышающий 9. Следовательно, необходимо этот разряд (тетраду) откорректировать. В этом случае нас не интересует наличие выходных тетрадных переносов.

Другой алгоритм сложения использует избыточные на +6 значения разрядов одного из слагаемых, т.е. выполняется предварительная коррекция всех разрядов одного из слагаемых на +6.

При этом, если в разряде суммы возникает тетрадный перенос, то значение суммы правильное, т.к. оно как бы заранее было скорректировано.

Если переноса нет, то предварительная коррекция была не нужна, и избыток на +6 необходимо компенсировать вычитанием 6, или сложением с 10 и игнорированием при этом выходного переноса.

Например, выполнить сложение 18410 и 29810 с предварительной коррекцией:

В первом примере в первом и во втором разрядах (тетрадах) суммы возникал тетрадный перенос, поэтому предварительная коррекция была выполнена верно. В третьем разряде (тетраде) не было тетрадного переноса, следовательно, предварительная коррекция была не нужна, и избыток на +6 необходимо компенсировать вычитанием 6 (случай а), или сложением с 10 и игнорированием при этом выходного переноса (случай б).

Еще один способ решения:

Вычитание в двоично-десятичном коде

Результат вычитания всегда меньше 10, поэтому разность необходимо корректировать на –6 только при возникновении 16-ричного займа, т.к. десятичный разряд в этом случае приобретает лишних 6 единиц.

Например, выполнить вычитание 61510 и 39610:

В 1-ом и 2-ом разрядах (тетрадах) имеет место займ из более старшего разряда, поэтому данные разряды необходимо скорректировать на –6.

В вышеописанных примерах мы рассматривали только информационные

разряды, считая, что знаковый разряд во всех случаях «+» (1100). В некоторых случаях знаковый разряд результата может иметь знак «–» (1101).

Поэтому при выполнении операции вычитания числа предварительно анализируются. Если уменьшаемое при этом окажется меньше вычитаемого, выполняется операция вычитания уменьшаемого из вычитаемого, а результату присваивается знак «–».

Например, выполнить вычитание 12410 и 38110.