При сложении чисел, меньших единицы, могут быть получены числа, по абсолютной величине больше единицы. Для выявления переполнения разрядной сетки в ЭВМ применяются модифицированные прямой, обратный и дополнительный коды.
В этих кодах знак кодируется двумя разрядами, причем знаку "плюс" отвечает комбинация 00, а знаку "минус" — комбинация 11.
Правила сложения для модифицированных кодов те же, что и для обычных. Единица переноса из старшего знакового разряда в модифицированном дополнительном коде отбрасывается, а в модифицированном обратном коде передается в младший цифровой разряд.
Признаком переполнения служит появление в знаковом разряде суммы комбинации 01 при сложении положительных чисел (положительное переполнение) или 10 при сложении отрицательных чисел (отрицательное переполнение).
Старший знаковый разряд в этих случаях содержит истинное значение знака суммы, а младший является старшей цифрой значащего числа.
Для коррекции переполнения число надо сдвинуть в разрядной сетке на один разряд вправо, а в старший знаковый разряд, который освободился, поместить цифру, равную новому значению младшего знакового разряда.
|
|
После корректирования переполнения мантиссы результата необходимо увеличить на единицу порядок результата.
Примеры:
а) сложить двоичные числа А = -1010 и В = 1100 в обратном и дополнительном модифицированных кодах:
Предварительные преобразования:
А = -1010 [А]Мпр = 11.1010 [А]Моб = 11.0101 [А]Мдоп = 11.0110
В = +1100 [B]Мпр = 00.1100 [B]Моб = 00.1100 [B]Мдоп = 00.1100
Решение:
[А]Моб = 11.0101 [А]Мдоп = 11.0110
+ [B]Моб = 00.1100 + [B]Мдоп = 00.1100
100.0001 [C]Мдоп = 100.0010 С = 00102 = 210
+1
[C]Моб = 00.0010 С = 00102 = 210
б) сложить двоичные числа А = -1101 и В = -1010 в обратном и дополнительном модифицированных кодах:
Предварительные преобразования:
А = -1101 [А]Мпр = 11.1101 [А]Моб = 11.0010 [А]Мдоп = 11.0011
В = -1010 [B]Мпр = 11.1010 [B]Моб = 11.0101 [B]Мдоп = 11.0110
Решение:
[А]Моб = 11.0010 [А]Мдоп = 11.0011
+ [B]Моб = 11.0101 + [B]Мдоп = 11.0110
[C]Моб 10.1000 [C]Мдоп 10.1001
В этом примере произошло отрицательное переполнение в результате.
Ø Арифметические операции умножения и деления
Операция умножения чисел состоит из k –циклов, где k –число цифровых разрядов множителя. Результат умножения какого то разряда множителя на множимое называется частичным произведением, а их последовательное сложение – суммой частичных произведений (СЧП). В каждом цикле анализируется следующая цифра множителя:
-если это 1, то к СЧП прибавляется множимое,
-если 0, то сложение не выполняется.
Цикл завершается сдвигом на один разряд множимого относительно СЧП или сдвигом СЧП относительно неподвижного множителя.
Множимое и множитель размещаются в разрядной сетке на основе специальных схем – регистров, а СЧП –в сумматоре – регистре.
|
|
Умножение можно выполнить одним из четырех способов:
1. С младших разрядов множителя со сдвигом его и СЧП вправо при неподвижном множимом. Старшие разряды произведения находятся в сумматоре, а младшие – в регистре множителя.
2. С младших разрядов множителя при сдвиге множимого и неподвижной СЧП.
3. Со старших разрядов множителя при сдвиге СЧП влево и неподвижном множимом.
4. Со старших разрядов множителя при сдвиге его и СЧП влево.
Если хотя бы один из сомножителей равен нулю, то произведению сразу присваивается нулевое значение.
Алгоритм умножения целых чисел, представленных в прямом коде, по первому способу реализуется в следующей последовательности:
1. Взять модули сомножителей и обнулить исходное значение СЧП;
2. Если младшая цифра множителя равна 1, то к СЧП прибавляется множимое, если это 0, сложения не происходит;
3. Сдвиг вправо на один разряд СЧП и множителя;
4. Пункты 2 и 3 последовательно выполнять столько раз сколько цифровых разрядов множителя, после чего произведению присваивается знак, определенный сложением по модулю 2 знаков сомножителей.
Пример. Перемножить первым способом числа А = 1310 = 11012 и В = 1110 = 10112 представленные прямыми кодами.
1101 -модуль множимого
1011 -модуль множителя
0000 -исходная СЧП
+ 1101 -первое частичное произведение (ЧП)
1101 -первая СЧП
01101 -сдвиг вправо СЧП на 1 разряд
+1101 -второе ЧП
100111 -второе СЧП
0100111 -сдвиг вправо СЧП на 1 разряд
+ 0000 -третье ЧП
100111 -третье СЧП
0100111 -сдвиг вправо СЧП на 1 разряд
+ 1101 -четвертое ЧП
10001111 -четвертое СЧП
10001111 -сдвиг вправо СЧП на 1 разряд
Произведение С = А ∙ В = 100011112 = 14310
Разработаны также методы ускоренного умножения и умножения в дополнительных кодах.
Операция деления числа С = А: В обычно сводится к последовательности вычитаний делителя В сначала из делимого А, а затем из создаваемых в процессе деления остатков Ri. Числа А и В поступают в прямом коде. В зависимости от способа вычитания делителя различают два алгоритма деления: без восстановления остатка и с восстановлением.
Для обоих алгоритмов общим является следующее:
• деление осуществляется над модулями чисел А и В (при делении целых чисел в машинах длина делимого А вдвое больше длины делителя В);
• знак частного определяется сложением по модулю 2 знаков А и В;
• перед делением анализируются числа А и В на равенство нулю: если А = О, то частному присваивается значение 0 и операция завершается; при В = О выполнение программы прерывается;
• умножение частного на два осуществляется сдвигом его влево на один разряд, а операция вычитания делителя В заменяется его сложением в дополнительном коде;
• первый остаток Ri определяет по формуле
Ri = 2 |A| - B = 2 |A| + [-B]доп
причем, если Ri < 0, то деление возможно, если Ri > 0, то возникает переполнение разрядной сетки;
• цифры частного определяются, начиная со старших разрядов:
0 при Ri < 0
Сi =
1 при Ri ≥ 0
Где i = 1, 2,..., k, а k — заданное количество цифр частного.
Обычно первый разряд Сi отводится для записи знака.