Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


МАШИННЫЕ КОДЫ И АЛГОРИТМЫ ВЫПОЛНЕНИЯ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ НАД МАШИННЫМИ КОДАМИ



Сущность и назначение машинных кодов. В ЭВМ посредством применения специальных машинных ко­дов все арифметические операции над числами сво­дятся к выполнению операции арифметического сло­жения и сдвигу их кодов вправо или влево. При этом учитываются знаки чисел, автоматически определяют­ся знак результата и признаки возможного перепол­нения разрядной сетки заданных форматов. Приме­няются прямой, обратный и дополнительный коды. Замена операции вычитания на сложение может осу­ществляться с помощью обратного и дополнительного кодов. Сущность этого процесса заключается в том, что вычитаемое В , как отрицательное число, предста­вляется в виде дополнения до некоторой константы К , при которой выполняется условие К-В> 0 . Обратный и дополнительный коды отличаются выбором значе­ния константы К . Следовательно, операцию С = А- В, где А и В целые положительные числа в любой системе счисления, можно представить в виде:

 

где 10 — основание любой системы счисления.

К = 10n — константа образования дополнительно­го кода;

К == 10n-1 — константа образования обратно­го кода;

п — количество разрядов представления целых чисел в выбранной системе счисления (для дробных чисел п = 0).

Из выражения (1.8) следует, что из полученной суммы нужно исключить добавленную к вычитаемо­му константу.

Рассмотрим примеры действий над числами.

 

25= С.

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

По результатам действий под числами с дополне­ниями легко определить знак суммы и наличие пере­полнения разрядной сетки (сумма равна или больше по модулю константы образования дополнительного кода).

Из примеров 1 и 2 следует, что при сложении чи­сел с разными знаками (С и C1) единица переноса из старшего разряда суммы является признаком положи­тельного результата (С), отсутствие переноса (C1) — признаком отрицательного результата, при этом кон­станта образования дополнительного кода не скомпен­сирована и осталась в сумме.

При сложении чисел с одинаковыми знаками при­знаки противоположны: отсутствие переноса едини­цы из старшего разряда при положительных, слагае­мых (С2) является признаком положительного резуль­тата, наличие переноса при отрицательных слагаемых (С3) — признаком отрицательного, при этом одна кон­станта компенсируется переносом, а вторая сохраня­ется в сумме. Эти же признаки в суммах (С2 и С3) ука­зывают на отсутствие переполнения разрядной сетки для записи результатов (результаты имеют 2 десятичных разряда).

Здесь в обоих случаях при сложении чисел с оди­наковыми знаками происходит переполнение разряд­ной сетки, признаками которого являются: наличие переноса из старшего разряда при положительных сла­гаемых (C4) и отсутствие переноса при отрицатель­ных (С3). При получении суммы C5 перенос отсут­ствует, т. е. обе константы 102 остались в полученном результате. Следовательно, результат 76-102 = -24, 24-102 = -124 по модулю больше константы и в от­веденные 2 разряда не умещается.

Рассмотрим образование кодов в двоичной систе­ме счисления на примере А = ±34. Знак числа, как было указано выше, кодируется 0 или 1, записывается перед старшим разрядом и отделяется для наглядности точкой, которая не является частью кода и в разрядной сетке не отражается. Для простоты примем, что задана разрядная сетка в один байт, т. е. 8 двоичных разрядов, из которых один отводится под знак, а 7 для записи

Примем константу для дополнительного кода:

K(10) = 28 = К2. =101000 = 100000000

и константу для обратного кода: K(10) = 28-1 = К2 = -101000=11111111.

В таблице 6 приведены прямой, обратный и допол­нительный коды для чисел А == 34 и А = -34.

Таблица 6

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

2) положительное число в прямом, обратном и допол­нительном кодах имеет одинаковое изображение;

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

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

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

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

Действия над машинными кодами чисел. А. Дей­ствия над числами, представленными в естественной форме

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

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

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

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

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

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

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

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

 

Пример 4. Даны два числа: А = 254, 5 и B= 175.

Найти сумму чисел при разных знаках слагаемых в 16-ти разрядном формате.

Решение.

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

A(10)= 254 ~ A(16)=FE ~ A(2)= 11111110;

B(10)= 175 ~ B(16)=AF ~ B(2)= 10101111.

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

[A]пк= 0.000000011111110;

[B]ПК= 0.000000010101 111.

[-А]дк= 1.111111100000010;

[-B]ДК= 1.111111101010001

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

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

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

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

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

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

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

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

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

 


 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-24; Просмотров: 4614; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.025 с.)
Главная | Случайная страница | Обратная связь