Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика-Методичка(Лабы).doc
Скачиваний:
12
Добавлен:
02.09.2019
Размер:
523 Кб
Скачать
☆

3.2.2 Правила образования машинных кодов

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

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

  3. дополнительный код отрицательного числа образуется путем добавления единицы к младшему разряду обратного кода этого же числа или заменой в коде положительного числа всех нулей на единицы, а единиц на нули, исключая последнюю единицу и следующие за ней нули.

Определение прямого кода отрицательного числа по его обратному и дополнительному коду производится по тем же правилам.

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

3.2.3 Действия над машинными кодами чисел

3.2.3.1 Действия над числами, представленными в естественной форме

При сложении кодов чисел в естественной форме следует учитывать следующие положения:

  1. числа хранятся в памяти в дополнительном коде;

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

  3. при сложении чисел разными знаками единица переноса из знакового разряда стирается, т.е. компенсируется одна константа образования дополнительного кода;

  4. признаками переполнения разрядной сетки при сложении кодов чисел с одинаковыми знаками могут служить:

а) знак суммы не соответствует знакам слагаемых;

б) переносы из старшего разряда суммы в знаковый и из знакового не согласуются, т.е. один из них присутствует, а другой отсутствует.

Очевидно, что если переносы согласуются, т.е. оба отсутствуют или оба присутствуют, то переполнения разрядной сетки не происходит./5/

Пример 2.4. Даны два числа: А = 254, В = 175. Найти сумму чисел при разных знаках слагаемых в 16-ти разрядном формате.

Решение.

а) Представим исходные числа в двоичной системе счисления:

А10 = 254 ~ А16 = FE ~ А2 = 11111110;

B10 = 175 ~ B16 = AF ~ B2 = 10101111.

б) Составим машинные коды этих чисел с разными знаками:

[A]пк = 0.000000011111110;

[B]пк = 0.000000010101111;

[–A]дк = 1.111111100000010;

[–A]дк = 1.111111101010001.

в) Выполним действия:

C1 = A + B

[

+

A]пк = 0.000000011111110

[B]пк = 0.000000010101111

[С1]пк = 0.000000110101101 > 0;

C2 = A – B

+

[A]пк = 0.000000011111110

[–B]дк = 1.111111101010001

[С2]пк = 10.00000001001111 > 0;

C3 = В – А

+

[В]пк = 0.000000010101111

[–А]дк = 1.111111100000010

[С3]пк = 1.111111110110001 < 0;

C1 = – A – B

+

[–A]дк = 1.111111100000010

[–B]дк = 1.111111101010001

[С4]пк = 11.111111001010011 < 0.

Из примера следует:

  1. при получении сумм слагаемых с одинаковыми знаками (С1 и С4) переполнения разрядной сетки не произошло, так как знак суммы соответствует знакам слагаемых и переносы в знаковый и из знакового согласуются;

  2. при получении сумм С2 и С4 образовался перенос из знакового разряда, который следует исключить;

  3. суммы С1 и С2 – положительные, С3 и С4 – отрицательные, т.е. знаки результатов получены при сложении чисел со знаками.

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

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

С1 = 110101101 = 1 · 28 + 1 · 27 + 1 · 25 + 1 · 23 + 1 · 22 + 1 · 20 = 429;

С1 = 254 + 175 = 429.

Пример 2.5. Дано А = 25756, В = 7125. Найти суммы положительных и отрицательных значений в 16-ти разрядном формате.

Решение.

А10 = 25756 ~ А16 = 649С ~ А2 = 110010010011100;

B10 = 7125 ~ B16 = 1ВD5 ~ B2 = 1101111010101.

C1 = A + B

[

+

A]пк = 0.110010010011100

[B]пк = 0.001101111010101

[С1]пк ≠ 1.000000001110001 < 0;

C2 = – A – B

[

+

A]дк = 1.001101101100100

[B]дк = 1.110010000101011

[С2]дк = 10.111111110001111 > 0.

Полученные суммы не соответствуют ожидаемым результатам, поскольку произошло переполнение разрядной сетки за допустимые значения (32767). Переполнение разрядной сетки легко определить либо по первому признаку – знаки сумм С1 и С2 не соответствуют знакам слагаемых, либо по второму – переносы в знаковый и из знакового разряда в суммах С1 и С2 не согласуются. В этих случаях в больших ЭВМ вырабатывается запрос на прерывание программы, в некоторых типах малых ЭВМ производится автоматический переход к нормальной форме представления данных.

Замечание. Операции умножения и деления производятся над абсолютными значениями чисел – в прямом коде. Знак произведения определяется сложением по модулю 2 знаков сомножителей (0 + 0 = 0, 1 + 0 = 1, 1 + 1 = 0), знак частного – сложением по модулю 2 знаков делимого и делителя, а знаку остатка присваивается знак делимого.