Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

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

Таненбаун Э. Архитектура компьютера — Спб.: Питер, 2007. — 844 c.
ISBN 5-469-01274-3
Скачать (прямая ссылка): arhkomputera2007.DjVu
Предыдущая << 1 .. 206 207 208 209 210 211 < 212 > 213 214 215 216 217 218 .. 422 >> Следующая

Таким образом, целиком произведение можно вычислить путем одного
перемещения, двух сдвигов и одного сложения, что обычно выполняется
гораздо быстрее, чем операция умножения. Конечно, компилятор может
применить такую схему, только если один из множителей является
константой.
Сдвиг отрицательных чисел даже со знаковым расширением дает совершенно
другие результаты. Рассмотрим, например, число -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
Типы команд 423
Как правило, сдвиг вправо вызывает ошибки, поскольку он производит
округление до большего отрицательного целого числа, что недопустимо при
выполнении целочисленных арифметических операций с отрицательными
числами. В то же время сдвиг влево аналогичен умножению на 2.
Операции циклического сдвига нужны для манипулирования
последовательностями битов в словах. Чтобы проверить все биты в слове,
каждый бит путем циклического сдвига слова поочередно помещается в
знаковый разряд, где его можно легко проверить; когда все биты будут
проверены, восстанавливается изначальное значение слова. Операции
циклического сдвига гораздо удобнее операций обычного сдвига, поскольку
при этом не теряется информация: произвольная операция циклического
сдвига может быть отменена операцией циклического сдвига в
противоположную сторону.
В некоторых бинарных операциях обычно используются совершенно
определенные операнды, поэтому для быстрого выполнения аналогичных
действий в архитектуры команд часто включаются унарные операции.
Например, в начале вычислений чрезвычайно часто требуется перемещение
нуля в память или в регистр. Перемещение нуля - это особый случай команды
перемещения данных. Поэтому для повышения производительности в
архитектуру вводится операция CLR с единственным операндом - адресом той
ячейки, которую нужно очистить (то есть установить на 0).
Прибавление 1 к слову тоже часто требуется при различных подсчетах.
Унарная форма команды ADD - это операция инкремента INC. Другой пример -
операция NEG. Отрицание X - это на самом деле бинарная операция вычитания
0 - X, но поскольку операция отрицания применяется очень часто, в
архитектуру команд вводится команда NEG. Важно понимать разницу между
арифметической операцией NEG и логической операцией NOT. При выполнении
операции NEG происходит аддитивная инверсия числа (такое число, сумма
которого с исходным числом дает 0). При выполнении операции NOT все биты
в слове просто инвертируются. Эти операции очень похожи, а для системы, в
которой отрицательные величины представлены в обратном двоичном коде, они
идентичны. (В арифметике дополнительных кодов для выполнения команды NEG
сначала инвертируются все биты, а затем к полученному результату
прибавляется 1.)
Унарные и бинарные операции часто объединяются в группы по функциям,
которые они выполняют, а вовсе не по числу операндов. В первую группу
входят арифметические операции, в том числе операция отрицания. Во вторую
группу входят логические операции и операции сдвига, поскольку эти две
категории очень часто используются вместе для извлечения данных.
Сравнения и условные переходы
Практически все программы должны проверять свои данные и на основе
полученных результатов изменять последовательность выполняемых команд.
Рассмотрим функцию извлечения квадратного корня из числа х. Если это
число отрицательно, функция должна сообщать об ошибке, если положительно
- выполнять вычисления. То есть соответствующая программа должна
проверять знак числа х, а затем совершать переход в зависимости от
полученного результата.
424
Глава 5. Уровень архитектуры набора команд
Этот алгоритм можно реализовать с помощью специальных команд условного
перехода, проверяющих разного рода условия и при их выполнении
совершающих переходы к определенным адресам памяти. Иногда один из битов
в команде указывает, нужно ли осуществлять переход в случае выполнения
или в случае не выполнения условия. Часто целевой адрес является не
абсолютным, а относительным (связанным с текущей командой).
Самое распространенное условие - проверка на равенство или на неравенство
определенного бита нулю. Если команда проверяет знаковый бит числа и
Предыдущая << 1 .. 206 207 208 209 210 211 < 212 > 213 214 215 216 217 218 .. 422 >> Следующая