Модифицированный код

При сложении чисел, меньших единицы, могут быть получены числа, по абсо­лютной величине больше единицы. Для выявления переполнения разрядной сетки в ЭВМ применяются модифицированные прямой, обратный и дополни­тельный коды.

В этих кодах знак кодируется двумя разрядами, причем знаку "плюс" отвечает комбинация 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 отводится для записи знака.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: