Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
МАШИННЫЕ КОДЫ И АЛГОРИТМЫ ВЫПОЛНЕНИЯ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ НАД МАШИННЫМИ КОДАМИ
Сущность и назначение машинных кодов. В ЭВМ посредством применения специальных машинных кодов все арифметические операции над числами сводятся к выполнению операции арифметического сложения и сдвигу их кодов вправо или влево. При этом учитываются знаки чисел, автоматически определяются знак результата и признаки возможного переполнения разрядной сетки заданных форматов. Применяются прямой, обратный и дополнительный коды. Замена операции вычитания на сложение может осуществляться с помощью обратного и дополнительного кодов. Сущность этого процесса заключается в том, что вычитаемое В , как отрицательное число, представляется в виде дополнения до некоторой константы К , при которой выполняется условие К-В> 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; Нарушение авторского права страницы