В результате выполнения операции сложения может получиться результат, превышающий максимально возможное число для заданной разрядной сетки, т.е. происходит выход полученного результата за пределы разрядной сетки в сторону знакового разряда, называемый «переполнением» (значащий разряд становится знаковым, результат операции неверный).
Пример 1. Найти сумму (A1+A2 ) доп = A1 доп+ A2 доп.
А1 доп = 1 01001 (целое десятичное число «-23»).
А2 доп = 1 01110 (целое десятичное число «-18»).
Суммируем числа в дополнительном коде:
+ 1 01001
1 01110
0 10111
Единица переноса из знакового разряда игнорируется. Результат машиной ошибочно воспринимается как положительное число.
Способы выявления переполнения в арифметических операциях:
1) Анализируются два переноса – из старшего значащего разряда в знаковый (p1) и из знакового разряда (p2).
Если есть оба переноса или нет ни одного переноса, то переполнения нет, если есть только один из переносов, то имеет место переполнение.
Сигнал j («Останов») будет вырабатываться по формуле:
2) Для представления чисел применяют модифицированный код. На переполнение при сложении двух чисел указывают несовпадение цифр в знаковых разрядах результата. Комбинация 01 соответствует переполнению положительного результата, а комбинация 10 – отрицательного.
Пример 2. Найти сумму двух чисел с фиксированной запятой, представленных в дополнительном коде:
А1 доп = 1 01001 (целое десятичное число «–23»);
А2 доп = 1 01110 (целое десятичное число «–18»).
Для приведенного примера суммируем числа в доп. модиф. коде:
+ 11 01001
11 01110
10 10111.
Комбинация «10» в знаковых разрядах результата является признаком отрицательного переполнения результата.
Пример 3. Найти сумму двух чисел с фиксированной запятой, представленных в дополнительном коде:
А1 доп = 0 01001 ( +23);
А2 доп = 0 01110 (+18).
Для приведенного примера суммируем числа в пр. модиф. коде:
+ 00 10111
00 10010
01 01001.
Комбинация «01» в знаковых разрядах указывает на переполнение положительного результата суммирования.
Результат обеих операций неверный и дальнейшее решение задачи не имеет смысла.
ЭВМ вырабатывает сигнал φ = 1 (Останов).
Если сигнал φ = 0, то переполнения нет, результат верный и можно продолжить решение задачи.
Если обозначить знаковые разряды: младший разряд – зн 1, старший разряд – зн 2, то значение сигнала φ будет вырабатываться по формуле:
Сложение и вычитание чисел с фиксированной и плавающей запятой. Примеры.
Алгоритм сложения:
1. Положительные числа остаются без изменения (в прямом коде), отрицательные числа переводятся в дополнительный код.
2.Суммируются полученные коды чисел, включая знаковые разряды. Если имеет место перенос из знакового разряда, он отбрасывается.
3.Анализируется результат (сумма) на переполнение. Если имеет место переполнение, то вырабатывается сигнал φ = 1 и ЭВМ останавливает решение задачи.
4.Если переполнения нет, то анализируется результат по знаковому разряду: 0 – результат в прямом коде, 1 – результат в дополнительном коде.
Пример 4. Заданы числа. Выполнить операцию сложения (А1+ А2).
[A1]пр = 1 0110, [A1]доп = 1 1010.
[A2]пр = 1 1001, [A2]доп = 1 0111.
Суммируем [А1]доп + [А2]доп:
+ 1 1010доп
1 0111доп
1 0001доп.
Единица переноса из знакового разряда в результате игнорируется. Результат отрицательный и представлен в дополнительном коде. Переполнения нет, так как присутствуют оба анализируемых переноса.
Результат: [Aрез]доп = 1 0001; [Aрез]пр = 1 1111.
Проверка: (–6) + (–9) = (–15).
Операция вычитания чисел (целых или дробных) заменяется суммой:
[A1]пр – [A2]пр = [A1]пр + [–A2]пр.
Знак вычитаемого в прямом коде инвертируется. После этого выполняется операция сложения уменьшаемого и вычитаемого по алгоритму с использованием дополнительного кода для представления отрицательных слагаемых.
Дата: 2019-02-02, просмотров: 524.