Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Тема 5.3. Выравнивание адресов





В результате изучения данной темы Вы будете:

  • иметь представление о выравнивании данных в адресном пространстве;
  • знать числовые типы данных процессора Pentium II и их размер.

Байты обычно группируются в 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 байтам, то наблюдает­ся более высокая производительность этого процессора.

 

Тип 8 бит 16 бит 32 бит 64 бит
Целые числа со знаком Х Х Х    
Целые числа без знака Х Х Х    
Двоично-десятичные целые числа Х            
Числа с плавающей точкой         Х Х

Таблица 5.1. Числовые типы данных процессора Pentium II

Pentium II также может манипулировать 8-разрядными символами ASCII: существуют специальные команды для копирования и поиска цепочек символов. Эти команды используются и для цепочек, длина которых известна заранее, и для цепочек, в конце которых стоит специальный маркер. Они часто используются языками высокого уровня в операциях над строками.

Подведем итоги

  • многие архитек­туры требуют, чтобы слова были выровнены в своих естественных границах – при этом память работает более эффективно;
  • в процессоре Pentium II программы могут обращаться к словам, начи­ная с любого адреса – это обходится усложнением и удорожанием процессора;
  • Pentium II поддерживает двоичные целые числа со знаком, целые числа без знака, числа двоично-десятичной системы счисления и числа с плавающей точкой по стан­дарту IEEE 754.

Вопросы для самоконтроля

Объясните своими словами, что такое выравнивание адресов? Почему многие архитектуры не могут обращаться к не выровненной памяти?

 

Индивидуальные задания

Компьютер некоторой 64-битной архитектуры требует обязательного выравнивания адресов данных. Приведите 5 адресов, к которым данный компьютер сможет обратиться:

__________________________________________________________________________________________________________________________________________________________________________

Тема 5.4. Форматы команд

В результате изучения данной темы Вы будете:

  • иметь представление о типах команд;
  • знать формат команд процессора Pentium II.

Команда состоит из кода операции и некоторой дополнительной информации, на­пример, откуда поступают операнды и куда должны отправляться результаты. Процесс определения, где находятся операнды (то есть их адреса), называетсяад­ресацией.

На Рис. 5.3 показаны возможные форматы команд.

Рис. 5.3. Четыре формата команд: безадресная команда (а); одноадресная команда (б); двухадресная команда (в); трехадресная команда (г)

Команды всегда содержат код операции, который сообщает, какие действия выполняет команда. В команде может присутствовать ноль, один, два или три адреса:

  • Безадресная команда содержит только код операции, а информация для нее долж­на быть заранее помещена в определенные регистры.
  • Одноадресная команда. Addr в зависимости от модификации команды может обозначать либо адрес ячей­ки (регистра), где хранится одно из чисел, участвующих в операции, либо адрес ячейки (регистра), куда следует поместить число – результат операции.
  • Двухадресная команда. Addr1 – это обычно адрес ячейки (регистра), где хранится первое из чисел, уча­ствующих в операции, и куда после завершения операции должен быть записан результат операции; Addr2 – обычно адрес ячейки (регистра), где хранится второе участвующее в операции число.
  • Трехадресная команда. Addr1 и Addr2 – адреса ячеек (регистров), где расположены соответственно первое и второе числа, участвующие в операции; Addr3 – адрес ячейки (регистра), куда следует поместить число, полученное в результате выполнения операции.

 

Форматы кодов операций процессора 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 байта, содер­жащих константу (непосредственный операнд).

Подведем итоги

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

Вопросы для самоконтроля

1. Вспомните и назовите поля команд процессора Pentium II.

2. Какая роль префиксного байта в команде процессора Pentium II?

3.

Как Вы думаете, почему число аргументов в командах ограничено числом 3? Почему не разрабатывают команды с 4, 5 и более аргументами?

Индивидуальные задания

В наличии имеются следующие команды:

· безадресные: 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







ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...

Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.