Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.298


Таненбаум Э.- Архитектура компьютера. стр.298

А:

1111111 11111111 11111111 11110000 А сдвигается без знакового расширения:

0011111 11111111 11111111 11111100 А сдвигается со знаковым расширением:

1111111 11111111 11111111 11111100

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

Сдвиги могут использоваться для повышения скорости выполнения некоторых арифметических операций. Рассмотрим выражение 18 х п, где п — положительное целое число: 18 х я = 16хгг + 2хгг. Значение 16 х п можно получить путем сдвига копии п на 4 бита влево. Значение 2 х п можно получить, сдвинув п на 1 бит влево. Сумма этих двух чисел равна 18 х гг. Таким образом, целиком произведение можно вычислить путем одного перемещения, двух сдвигов и одного сложения, что обычно выполняется гораздо быстрее, чем операция умножения. Конечно, компилятор может применить такую схему, только если один из множителей является константой.

Сдвиг отрицательных чисел даже со знаковым расширением дает совершенно другие результаты. Рассмотрим, например, число -1 в обратном двоичном коде. При сдвиге влево на 1 бит получается число -3. При сдвиге влево еще на 1 бит получается число -7:

Число -1 в обратном двоичном коде:

11111111 11111111 11111111 11111110 Число -1 сдвигается влево на 1 бит (-3):

11111111 11111111 11111111 11111100 Число -1 сдвигается влево на 2 бита (-7):

11111111 11111111 11111111 11111000

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

А теперь рассмотрим число -1 в дополнительном двоичном коде. При сдвиге вправо на 6 бит с расширением по знаку получается число -1, что неверно, поскольку целая часть от -1/64 равна 0:

Число -1 в дополнительном двоичном коде:

11111111 11111111 11111111 11111111 Число -1, сдвинутое влево на 6 бит, равно -1:

11111111 11111111 11111111 11111111

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

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

В некоторых бинарных операциях обычно используются совершенно определенные операнды, поэтому для быстрого выполнения аналогичных действий в архитектуры команд часто включаются унарные операции. Например, в начале вычислений чрезвычайно часто требуется перемещение нуля в память или в регистр. Перемещение нуля — это особый случай команды перемещения данных. Поэтому для повышения производительности в архитектуру вводится операция CLR с единственным операндом — адресом той ячейки, которую нужно очистить (то есть установить на 0).


⇐ Предыдущая страница| |Следующая страница ⇒

.