|
Тема 5.3. Выравнивание адресовВ результате изучения данной темы Вы будете:
Байты обычно группируются в 4-байтные (32-битные) или 8-байтные (64-битные) слова с командами для манипулирования целыми словами. Многие архитектуры требуют, чтобы слова были выровнены в своих естественных границах. Так, например, 4-байтное слово может начинаться с адреса 0, 4, 8 и т. д., но не с адреса 1 или 2. Точно так же слово из 8 байтов может начинаться с адреса 0, 8 или 16, но не с адреса 4 или 6. Пример расположения 8-байтных слов показан на Рис. 5.2. Рис. 5.2. Расположение слова из 8 байтов в памяти: выровненное (а); невыровненное (б) Выравнивание адресов требуется довольно часто, т.к. при этом память работает более эффективно. Например, Pentium II, который вызывает из памяти по 8 байтов за раз, использует 36-битные физические адреса, но содержит только 33 адресных бита. Следовательно, Pentium II даже не сможет обратиться к не выровненной памяти, поскольку младшие три бита не определены явным образом – эти биты всегда равны 0, и все адреса памяти кратны 8 байтам. Тем не менее, требование выравнивания адресов иногда вызывает некоторые проблемы. В процессоре Pentium II программы могут обращаться к словам, начиная с любого адреса – это качество восходит к модели 8088 с шиной данных шириной в 1 байт, в которой не было требования к расположению ячеек в 8-байтных границах. Если программа в процессоре Pentium II считывает 4-байтное слово из адреса 7, то аппаратное обеспечение должно сделать одно обращение к памяти, чтобы вызвать байты с 0-го по 7-й, и второе обращение к памяти, чтобы вызвать байты с 8-го по 15-й. Затем центральный процессор должен извлечь требуемые 4 байта из 16 байтов, считанных из памяти, и скомпоновать их в нужном порядке, чтобы сформировать 4-байтное слово. Возможность считывать слова с произвольными адресами требует усложнения микросхемы, которая после этого становится больше по размеру и дороже. Разработчики были бы рады избавиться от такой микросхемы и просто потребовать, чтобы все программы обращались к словам памяти, а не к байтам. Однако такое усложнение необходимо для поддержания старого программного обеспечения. Типы данных Pentium II поддерживает 8-, 16- и 32-разрядные двоичные целые числа со знаком и без знака. Кроме того, он может оперировать 32- и 64-разрядные числами с плавающей точкой по стандарту IEEE 754 (Таблица 5.1). Pentium II имеет многочисленные арифметические команды, булевы операции и операции сравнения. Операнды необязательно должны быть выровнены в памяти, но если адреса слов кратны 4 байтам, то наблюдается более высокая производительность этого процессора.
Таблица 5.1. Числовые типы данных процессора Pentium II Pentium II также может манипулировать 8-разрядными символами ASCII: существуют специальные команды для копирования и поиска цепочек символов. Эти команды используются и для цепочек, длина которых известна заранее, и для цепочек, в конце которых стоит специальный маркер. Они часто используются языками высокого уровня в операциях над строками. Подведем итоги
Вопросы для самоконтроля Объясните своими словами, что такое выравнивание адресов? Почему многие архитектуры не могут обращаться к не выровненной памяти?
Компьютер некоторой 64-битной архитектуры требует обязательного выравнивания адресов данных. Приведите 5 адресов, к которым данный компьютер сможет обратиться: __________________________________________________________________________________________________________________________________________________________________________ Тема 5.4. Форматы команд В результате изучения данной темы Вы будете:
Команда состоит из кода операции и некоторой дополнительной информации, например, откуда поступают операнды и куда должны отправляться результаты. Процесс определения, где находятся операнды (то есть их адреса), называетсяадресацией. На Рис. 5.3 показаны возможные форматы команд. Рис. 5.3. Четыре формата команд: безадресная команда (а); одноадресная команда (б); двухадресная команда (в); трехадресная команда (г) Команды всегда содержат код операции, который сообщает, какие действия выполняет команда. В команде может присутствовать ноль, один, два или три адреса:
Форматы кодов операций процессора Pentium II очень сложны и нерегулярны, они содержат до шести полей разной длины, пять из которых факультативны. Эта ситуация сложилась из-за того, что архитектура процессоров Intel развивалась на протяжении нескольких поколений и ранее в нее были включены не очень удачно выбранные характеристики. Из-за требования обратной совместимости позднее их нельзя было изменить. Например, если один из операндов команды находится в памяти, то другой может и не находиться в памяти. Следовательно, существуют команды сложения двух регистров, команды прибавления регистра к слову из памяти и команды прибавления слова из памяти к регистру, но не существует команд для прибавления одного слова памяти к другому слову памяти. Общая модель формата команд показана на Рис. 5.4. Рис. 5.4. Форматы команд процессора Pentium II В первых архитектурах Intel все коды операций были размером 1 байт, хотя для изменения некоторых команд часто использовался так называемый префиксный байт.Префиксный байт – это дополнительный код операции, который ставится перед командой, чтобы изменить ее действие. В какой-то момент компания Intel вышла за пределы кодов операций, и один код операции, FFh, определялся каккод смены алфавита и использовался для разрешения второго байта команды. Отдельные биты в кодах операций процессора Pentium II дают довольно мало информации о команде. Единственной структурой такого рода в поле кода операции является младший бит в некоторых командах, который указывает, что именно вызывается – слово или байт, а также соседний бит, который указывает, является ли адрес памяти (если он вообще есть) источником или пунктом назначения. Таким образом, в большинстве случаев код операции должен быть полностью декодирован, чтобы установить, к какому классу относится операция, которую нужно выполнить, и, следовательно, какова длина этой команды. Это очень сильно снижает производительность, поскольку необходимо производить декодирование еще до того, как будет определено, где начинается следующая команда. В большинстве команд вслед за байтом кода операции, который указывает местонахождение операнда в памяти, следует второй байт, который сообщает всю информацию об операнде. Эти 8 битов распределены в 2-битном поле MOD и двух 3-битных регистровых полях REG и R/M. Иногда первые три бита этого байта используются в качестве расширения для кода операции, давая в сумме 11 битов для него. Тем не менее, 2-битное поле означает, что существует только 4 способа обращения к операндам, и один из операндов всегда должен быть регистром. Логически, любой из регистров ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ЕВР, ESP должен быть определяем, но правила кодирования команд запрещают некоторые комбинации, поскольку они (комбинации) используются для особых случаев. В некоторых типах команд требуется дополнительный байт, называемыйSIB (Scale, Index, Base – масштаб, индекс, база), который дает дополнительную информацию о типе адресации. Эта схема не идеальна, но она является компромиссом между требованием обратной совместимости и желанием добавлять новые особенности, которые не были предусмотрены изначально. Добавим еще, что некоторые команды имеют 1, 2 или 4 дополнительных байта для определения адреса команды (смещение), а иногда еще 1, 2 или 4 байта, содержащих константу (непосредственный операнд). Подведем итоги
Вопросы для самоконтроля 1. Вспомните и назовите поля команд процессора Pentium II. 2. Какая роль префиксного байта в команде процессора Pentium II? 3. Индивидуальные задания В наличии имеются следующие команды: · безадресные: PUSH М, POP М, ADD, SUB, MUL, DIV · одноадресные: LOAD М, STORE М, ADD М, SUB M, MUL M, DIV M · двухадресные: MOV (X=Y), ADD (X=X+Y), SUB (X=X-Y), MUL (X=X*Y), DIV (X=X/Y) · трехадресные: MOV (X=Y), ADD (X=Y+Z), SUB (X=Y-Z), MUL (X=Y*Z), DIV (X=Y/Z) Где, M – это 16-битный адрес памяти, а X, Y и Z – это или 16-битные адреса, или 4-битные регистры. Безадресная машина использует стек, одноадресная машина использует регистр-аккумулятор, а оставшиеся две имеют 16 регистров и команды, которые оперируют со всеми комбинациями ячеек памяти и регистров. Команда SUB Х, Y вычитает Y из X, а команда SUB Х, Y, Z вычитает Z из Y и помещает результат в X. 1. Для каждого из четырех видов машин – безадресной, одноадресной, двухадресной и трехадресной – напишите программу вычисления следующего выражения: X = (A+B*C) / (D-E*F). ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 2. Если длина кодов операций равна 8 битам, а размеры команд кратны 4 битам, сколько битов нужно каждой машине для вычисления X? _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 3. Как можно в машине, в которой нет команды CLR, очистить слово памяти? __________________________________________________________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________________________________________________________ Тема 5.5. Адресация В результате изучения данной темы Вы будете:
Разработка кодов операций является важной частью архитектуры команд. Однако значительное число битов программы используется для того, чтобы определить, откуда нужно брать операнды, а не для того, чтобы узнать, какие операции нужно выполнить. Рассмотрим команду ADD, которая требует спецификации трех операндов: двух источников и одного пункта назначения. (Термин «операнд» обычно используется применительно ко всем трем элементам, хотя пункт назначения – это место, где сохраняется результат.) Так или иначе, команда ADD должна сообщать, где найти операнды и куда поместить результат. В процессоре Pentium II байт MODE (Рис. 5.4) управляет способами адресации. Один из операндов определяется по комбинации полей MOD и R/M. Второй операнд всегда является регистром и определяется по значению поля REG. Иногда вслед за байтом MODE следует дополнительный байтSIB(Рис. 5.4). Байт SIB определяет масштабный коэффициент и два регистра. Когда присутствует байт SIB, адрес операнда вычисляется путем умножения индексного регистра на 1, 2, 4 или 8 (в зависимости от SCALE), прибавлением его к базовому регистру и, наконец, возможным прибавлением 8- или 32-битного смещения, в зависимости от значения поля MOD. Практически все регистры могут использоваться и в качестве индекса, и в качестве базы. Непосредственная адресация Самый простой способ определения операнда – содержать в адресной части сам операнд, а не адрес операнда или какую-либо другую информацию, описывающую, где находится операнд. Такой операнд называется непосредственным операндом, поскольку он автоматически вызывается из памяти одновременно с командой, следовательно, он сразу непосредственно становится доступным. Пример команды с непосредственным адресом для загрузки константы 4 в регистр EAX: MOV EAX, 4h При непосредственной адресации не требуется дополнительного обращения к памяти для вызова операнда. Однако у такого способа адресации есть и некоторые недостатки. Во-первых, таким способом можно работать только с константами. Во-вторых, число значений ограничено размером поля. Тем не менее, эта технология используется во многих архитектурах для определения целочисленных констант. Прямая адресация Следующий способ определения операнда – просто дать его полный адрес. Такой способ называетсяпрямой адресацией. Как и непосредственная адресация, прямая адресация имеет некоторые ограничения: команда всегда будет иметь доступ только к одному и тому же адресу памяти. То есть значение может меняться, а адрес – нет. Таким образом, прямая адресация может использоваться только для доступа к глобальным переменным, адреса которых известны во время компиляции. Многие программы содержат глобальные переменные, поэтому этот способ широко используется. Ниже показан пример прямой адресации. pole DW X ... MOV EAX, pole В данном случае pole – символьное имя переменной X. Регистровая адресация Регистровая адресация, по сути, сходна с прямой адресацией, только в данном случае вместо ячейки памяти определяется регистр. Поскольку регистры очень важны (из-за быстрого доступа и коротких адресов), этот способ адресации является самым распространенным в большинстве компьютеров. Многие компиляторы пытаются определить, к каким переменным доступ будет осуществляться чаще всего (например, индекс цикла), и помещают эти переменные в регистры. Пример команды для загрузки содержимого регистра EBX в регистр EAX приведен ниже: MOV EAX, EBX Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры... Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все... Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|