При обработке больших массивов экономической информации переводы чисел из десятичной системы в двоичную и обратно могут требовать значительного машинного времени. Некоторые образцы ЭВМ поэтому имеют или встроенные, или подключаемые блоки, которые обрабатывают десятичные целые числа в их двоично-десятичном представлении. Действия над ними также приводятся к операции алгебраического сложения отдельных цифр чисел, представленных дополнительными кодами в соответствии с табл.
Существует несколько алгоритмов сложения двоично-десятичных кодов десятичных чисел. Приведем один из алгоритмов сложения, который получил довольно широкое распространение.
1. Сложение чисел начинается с младших цифр (тетрад) и производится с учетом возникающих переносов из младших разрядов в старшие.
2. Знак суммы формируется специальной логической схемой по знаку большего слагаемого.
3. Для того чтобы при сложении двоично-десятичных цифр возникали переносы, аналогичные при сложении чисел в десятичном представлении, необходимо проводить так называемую десятичную коррекцию. Для этого к каждой тетраде первого числа прибавляется дополнительно по цифре 610=01102, что позволяет исключить шесть неиспользуемых комбинаций (1010—1111)2, так как они кодируют шестнадцатеричные цифры А—F (числа 10—1510).
4. После операции суммирования осуществляется корректировка суммы. Из тех тетрад суммы, из которых не было переносов, изымаются ранее внесенные избытки 610=01102. Для этого проводится вторая коррекция. Операция вычитания заменяется, как и обычно, операцией сложения с числом -6, представленным дополнительным кодом 10102, но только в тех разрядах, в которых отсутствовали переносы. При этой второй коррекции переносы из тетрад блокируются.
5. Операция вычитания реализуется достаточно своеобразно. По общему правилу сложения (см. п. 1—4) к тетрадам числа с большим модулем прибавляются дополнительные коды тетрад другого числа. При этом первая коррекция не проводится, так как в дополнениях тетрад она учитывается автоматически. Знак результата определяется по знаку числа с большим модулем.
При сложении над двоично-десятичными числами со знаком используются обратный или дополнительный код. Для получения ОК к каждой тетраде прибавляется двоичное число 0110, а затем все цифровые тетрады инвертируются. Дополнительный код получают из обратного путем прибавления единицы к младшей тетраде.
Задание 1
Пример 1. Сложить числа А10 = -2 и В10 = -9 с одинаковыми знаками (без
переполнения).
А2= − 0010→ А2пк = 1 0010→ А2ок =1 1101→ А2дк= 1 1110
+ +
В2= −1001→ В2пк = 1 1001→ В2ок = 1 0110→ В2дк =1 0111
А2 дк +В2дк= С2дк = 11 0101→ С2пк =1 1011;
С2 = −1011, С10=−11.
При сложении чисел с одинаковыми знаками возможно получение результата, значение которого больше величины 2n-1, где n — разрядность слагаемых. При этом результат не укладывается в отведенных для него разрядах, поэтому такая ситуация называется переполнением разрядной сетки.
Пример 2. Сложить числа А10 = -13 и В10 = -6 с одинаковыми знаками (с переполнением).
А2 = −1101 → А2пк = 1 1101→ А2ок = 1 0010 → А2дк = 1 0011
+ +
В2 = -0110 → В2пк = 1 0110 → В2ок = 1 1001 → В2дк = 1 1010
А2 дк +В2дк= С2дк= 10 1101→С2пк =0 1101;
С2 = + 1101, С10=+13.
Одним из признаков переполнения является отличие знака суммы от знака слагаемых. Иногда при сложении используется модифицированный дополнительный код (МДК), в котором для знака числа отводится два разряда. В этом случае признаком переполнения являются различные значения знаковых разрядов суммы. Если переполнение не возникает, то значения знаковых разрядов совпадают. Рассмотрим примеры сложения чисел в МДК.
Пример 3. Сложить числа А10 = +11 и В10 = +8 (сумма больше 0).
А2= + 1011→ А2пк = 0 1011 → А2ок = 0 1011 → А2мдк = 00 1011
+ +
В2 =+ 1000 → В2пк = 0 1000 → В2ок = 0 1000 → В2мдк = 00 1000
А2 дк +В2дк = С2мдк = 01 0011
Переполнение! Различные значения знаковых разрядов суммы.
Так как при сложении в дополнительном коде учитываются знаки чисел, то вычитание чисел можно заменить сложением в соответствии с соотношением
А-В = А + (–В).
Таким образом, вычитание заменяется сложением уменьшаемого с вычитаемым, взятым с обратным знаком.
Пример 4. Произвести вычитание чисел А10= −3 и B10 = +15 (с переполнением).
А2= − 0011→ А2пк= 1 0011 → А2ок=1 1100→ → → → → А2дк= 1 1101
+ +
В2=+1111 → В2пк= 0 1111→ (− В)2пк = 1 111→ (− В)2ок=1 0000 →
→ (− В)2дк =1 0001
______
А2 дк +В2дк= С2дк= 10 1110;
С2пк = 0 1101 С2=+1101? Переполнение!
Признаком переполнения в данном случае являются различные значения знаковых разрядов разности.
Задание 2
Пример 5. Выполнить сложение чисел с ПТ в ДК, если А10 = −155/8;
А2 =−1111.101; АПТ = −0.1111101х10+100.
В10 = + 161/4; В2 = +10000.01; ВПТ =+0.1000001х10+101 .
(МА)пк= 1 1111101; (МА)дк = 1 0000011; (РА)пк=0 100; (РА)дк= 0 100; (МВ)пк =
0 1000001; (МВ)дк = 0 1000001;
(РВ)ПК = 0 101; (РВ)дк = 0 101; (−РВ)дк=1 011.
Вычислим разность порядков:
(РА)ДК = 0 100
+
(−РВ )дк=1 011
______________
(ΔР)ДК = 1 111 →(ΔР)ПК =1 001→ (ΔР)2 =−001→(ΔР)10 =−1.
Разность порядков не равна нулю, выравнивание порядков необходимо. Разность порядков меньше нуля, число А имеет меньший порядок. Сдвигается мантисса числа А.
Мантисса числа А после сдвига: (МА)дк = 1 1000001 |1.
(В освобождающиеся разряды мантиссы заносится значение знакового разряда. Старший из выдвигаемых разрядов сохраняется в дополнительном разряде регистра суммы.)
Порядок суммы (РА+В)ДК = (РВ)ДК = 0 101.
Выполним сложение мантисс: (МА)дк = 1 1000001 |1
+
(Мв)дк = 0 1000001 |0
___________
(МА)дк+ (МВ)дк= (МА + МВ)дк = 10 0000010 |1. Нормализация нарушена справа.
Мантисса суммы сдвигается влево на пять разрядов.( не влево а вправо от сидящего)
Мантисса суммы после сдвига: (МА + МВ)дк = 0 1010000 |0
Округление. + |1
=___________
Мантисса суммы после округления: (МА + МВ)дк = 0 1010000.
Порядок суммы после нормализации: (РА+В)ДК = 0 101 + 1 011=0 000. Результат: (МА + МВ)пк = 0 1010000 → (МА + МВ)2 = + 0.1010000.
(РА+В)ДК = 0 000 → (РА+В)2 = + 000.
Сумма: (А + В)ПК = +0.1010000 х 10+000 →(А + В)2 = +0.101 →(А+В)10 =+5/8.
Точный результат: −155/8 + 161/4 = +5/8.
При выполнении операции вычитания знак вычитаемого изменяется на противоположный, далее операция продолжается как сложение.
Пример 6. Определить разность чисел, представленных в форме с ПТ. Операцию выполнить с использованием МДК.
А10 = −53/4; А2 =−101.11; Апт = −0.10111х10+011.
В10 = + 35/8; В2 = +11.101; Впт =+0.11101х10+010 .
(МА)пк= 1 10111; (МА)мдк = 11 01001; (РА)пк=00 011; (РА)мдк= 00 011; (МВ)пк =
0 11101; (МВ)мдк =00 11101; (−МВ)мдк = 11 00011.
(РВ)пк = 00 010; (РВ)мдк = 00 010; (−РВ)мдк=11 110.
Вычислим разность порядков:
(РА)мдк = 00 011
+
(−РВ )мдк=11 110
________
(ΔР)мдк = 00 001 →(ΔР)пк =00 001→ (ΔР)2 =+001→ΔР)10 =+1.
Разность порядков не равна нулю, выравнивание порядков необходимо. Разность порядков больше нуля, число В имеет меньший порядок. Сдвигается мантисса числа В.
Мантисса числа (−В) после сдвига: (−МВ)мдк =11 10001|1.
Порядок разности (РА-В)мдк = (РА)мдк = 00 011.
Выполним сложение мантисс: (МА)мдк =11 01001|0
+
(−МВ)мдк= 11 10001|1
___________________
(МА)мдк + (−МВ)мдк= (МА − МВ)мдк = 0 11010|1. Нормализация нарушена слева.
Мантисса разности сдвигается вправо на один разряд.
Мантисса разности после сдвига: (МА − МВ)мдк = 11 01101|0
Округление. + |1
_______________________
Мантисса разности после округления: (МА − МВ)мдк =11 01101.
Порядок разности после нормализации: (РА-В)мдк = 00 011 + 00 001 =
= 00 100.
Результат: (МА – МВ)пк = 11 10011 → (МА − МВ)2 = −0.10011.
(РА-В)МДК = 0 100 → (РА-В)2 = +100.
(А − В)ПТ = −0.10011 х 10+100 → (А- В)2 = −1001.1 →(А− В)10 = −91/2.
Точный результат: −53/4 − 35/8 = −93/8.
Погрешность возникла при
сдвиге мантиссы числа В при выравнивании порядков.
Задание 3
Пример 7.Сложить два числа Аю= 177; В10=418.
Пример 8
Определить сумму чисел в двоично-десятичном коде, если
А10 = –183; B10 = 924.
A2–10 = – 0001 1000 0011; B2–10 = + 1001 0010 0100
(A2–10)ПК = 1 0001 1000 0011 (B2–10)пк = 0 1001 0010 0100
+ 0110 0110 0110 Прибавление кода 0110
(A2–10)ОК = 1 0111 1110 1001
1 1000 0001 0110 Инверсия
+ 0001 Прибавление единицы
(A2–10)ДК = 1 1000 0001 0111 (B2–10)ДК = 0 1001 0010 0100
(B 2–10)ДК = + 0 1001 0010 0100 Сложение
(A2–10 + B 2–10)ДК=10 0001 0011 1011 При суммировании возник
коррекция + 0110 0110 перенос из первой тетрады
(A2–10 + B 2–10)ДК= 0 0111 0100 0001 и образовалась запрещенная
(A +B) 2–10 = + 0111 0100 0001 комбинация последней тетраде
(A +B) 10 = + 741
Варианты индивидуальных заданий. Индивидуальное задание студенту определяется преподавателем. В индивидуальном задании требуется произвести операций над числами с ФТ, ПТ и Двоично-десятичном коде.
Вариант к заданию 1
А0 | − 9 | −2 | −12 | −11 | −4 | ||||
В0 | −7 | −9 | −6 | −3 | −4 |
Вариант к заданию 2
А0 | -145/8 | 125/8 | 1105/8 | 115/8 | 155/8 | 165/8 | 195/8 | 185/8 | 175/8 |
В 0 | 151/4 | 171/4 | 111/4 | 141/4 | 131/4 | 161/4 | 191/4 | 181/4 | 121/4 |
Вариант к заданию 3
А0 | -214 | -172 | -174 | -167 | -174 | ||||
В0 | -171 | -123 | -387 | -768 |
Контрольные вопросы
1. Какие элементы формата чисел с ПТ вы знаете?
2. Чем отличается нормализованное число с ПТ от
ненормализованного числа?
3. Для чего применяются двоично-десятичные коды?
4. Как зависит разрядность чисел от величины основания системы счисления?
5. Можно ли различить форматы целых и дробных чисел с ФТ?
6. Для чего используются машинные коды чисел?
7. Чем отличаются дополнительный и обратный коды отрицательных чисел?
8. Как из ДК отрицательного числа получить ПК числа?
Лабораторная работа 2
Дата: 2016-10-02, просмотров: 1324.