Э. Таненбаум - Архитектура компьютера (1127755), страница 103
Текст из файла (страница 103)
Биты В б 4 Режим Режи адресации РегистР Смещение адрес Необязательно 32-разрядный адрес или смещение Код операции Необязательно 32-разрядный адрес или смещение Рис. 8.18. Простые форматы команд для дзухадресной машины Для переменных, расположенных после первых 16, нам потребуется перейти к 32-разрядным смешениям. Можно также придумать формат с одним 8-разрядным смещением вместо двух 4-разрядных при условии, что это смещение может Здесь мы снова имеем 8-разрядный код операции, но теперь у нас есть по 12 бит для задания источника и приемника. Для каждого операнда 3 бита позволяют указать режим адресации, 5 бит — регистр и 4 бита — смещение.
Имея 3 бита для задания режима адресации, мы можем поддерживать непосредственную, прямую, регистровую, косвенную регистровую индексную и стековую адресации, и при этом еШе остается место для двух дополнительных режимов, которые, возможно, появятся в будущем. Это простая система, которую легко компилировать, в то же время она достаточно гибкая, особенно если счетчик команд, указатель стека и указатель локальных переменных находятся среди регистров общего назначения, к которым можно получить доступ.
Единственная проблема в том, что при прямой адресации нам нужно большее количество битов для адреса. В машинах Р1тР-11 и тгАХ к команде было добавлено дополнительное слово для указания адреса каждого прямо адресуемого операнда. Мы тоже могли бы использовать один из двух доступных режимов адресации для индексной адресации с 32-разрядным смещением, которое следует за командой. Тогда в худшем случае при сложении двух слов памяти, когда обрашение к обоим операндам производится в режиме прямой адресации или с использованием длинной индексной формы, команда была бы размером 96 бит и занимала бы 3 цикла шины (один для команды и два для данных). В то же время для прибавления произвольного слова памяти к другому произвольному слову памяти большинству В18С-систем потребовалось бы по крайней мере 96 бит, а может и больше, на что нужно по крайней мере 4 цикла шины.
Форматы, изображенные на рис. 5.18, допускают самые разные варианты. В данной системе с помощью одной 32-разрядной команды, при условии что переменные 1 и 1 находятся среди первых 16 локальных переменных, можно выполнить следующую операцию: Адресация 41 5 использоваться либо источником, либо приемником,но не тем и другим вместе. Варианты компромиссов не ограничены, и чтобы получить хороший результат, разработчикам приходится учитывать многие факторы. Режимы адресации процессора Репт]ит 4 Режимы адресации процессора Реп[[цш 4 чрезвычайно нерегулярны и зависят от формата конкретной команды — 16- или 32-разрядная. Мы не будем рассматривать 16-разрядные команды, вполне достаточно 32-разрядных.
Поддерживаемые режимы адресации включают непосредственную, прямую, регистровую, косвенную регистровую, индексную и специальную адресацию для обращения к элементам массива. Проблема заключается в том, что не все режимы применимы ко всем командам и не все регистры могут использоваться во всех режимах адресации.
Это значительно усложняет задачу разработчика компилятора. Как показано на рис. 5.10, для управления режимами адресации имеется соответствующий байт. Один из операндов определяется по комбинации полей МОП и К/М. Второй операнд всегда является регистром и определяется по значению поля ВЕС. В табл. 5.7 приведен список 32 комбинаций значений 2-разрядного поля МОР и 3-разрядного поля К/М. Например, если оба поля равны О, операнд считывается из ячейки памяти с адресом, который содержится в регистре ЕАХ. Таблица В.Т.
32-разрядные режимы адресации процессора Реп11цт 4 [М[х] — это слово в памяти с адресом х) й/М МОО О1 10 00 М[ЕАХ я смещение 8] М[ЕАХ я смещение 32) ЕАХ или А1. М[ЕСХ е смещение 8) М[ЕСХ е смещение 32) ЕСХ или Сс М[ЕОХ е смещение 8) М[ЕОХ е смещение 32] ЕОХ или 01 М[ЕВХ е смещение 8] М[ЕВХ е смещение 32) ЕВХ или ВГ 3!В со смещением 8 81В со смещением 32 ЕВР или АН 000 М[ЕАХ] 001 М[ЕСХ) 010 М[ЕОХ) 011 М[ЕВХ] 100 31В 101 Прямая адресация М[ЕВР е смещение 8] М[ЕВР е смещение 32] ЕВР или СН М[ЕВ1 е смещение 8] М[Е01 я смещение 8] М[ЕВ1 е смещение 32] М[ЕО! + смещение 32] 110 М[Е81] 111 М[ЕОЦ ЕВ! или ОН ЕО! или ВН Колонки 01 и 10 включают режимы адресации, при которых значение регистра прибавляется к 8- или 32-разрядному смещению, следующему за командой.
Если выбрано 8-разрядное сме!цение, оно перед сложением получает 32-разрядное знаковое расширение. Например, команда А00 с полем К/М = 011, полем МОП = 01 и смещением, равным шести, вычисляет сумму регистра ЕВХ и 6, и в качестве одного из операндов считывает слово из полученного адреса памяти. Значение регистра ЕВХ не изменяется. При МОП = 11 предоставляется возможность выбора из двух регистров. Для команд со словами берется первый вариант, для команд с байтами — второй. 416 Глава 5.
Уровень архитектуры набора команд Здесь а — массив 4-байтных целых чисел, относящийся к текущей процедуре. Обычно регистр ЕВР используется для указания на базу стекового фрейма, который содержит локальные переменные и массивы, как показано на рис. 5.19. Компилятор должен хранить значение т в регистре ЕАХ. Для доступа к элементу а113 он будет использовать режим с байтом ЯВ, в котором адрес операнда равен сумме значений 4 ЕАХ, ЕВР и 8. Эта операция может сохраняться в аШ за одну команду.
-ч — ЕВР ! в регистра ЕАХ Значения В!В М 14*ЕАХ+ЕВР+81 Стековый фрейм -~ — ЕВР+ 8 -~ — ЕВР+ 12 ~ — ЕВР+ 16 Рис. 8.19. Обращение к элементу массива а[!1 А стоит ли применять такой режим адресации? На этот вопрос трудно ответить. Без сомнения эта команда при надлежащем использовании позволяет сэкономить несколько циклов. Проблема здесь в том, что она занимает определенную область памяти микросхемы, которая могла бы пригодиться. Например, можно было бы сделать больше кэш-память первого уровня или уменьшить размер микросхемы, обеспечив возможность повышения тактовой частоты. Мы представили несколько возможных компромиссов, с которыми постоянно сталкиваются разработчики. Обычно перед тем, как воплотить какую-либо идею в кремнии, выполняются многочисленные моделирующие прогоны, но для этого нужно иметь представление о том, как будет использоваться машина.
Можно га- Отметим, что здесь не все регулярно. Например, нельзя выполнить косвенную адресацию через ЕВР или прибавить смещение к ЕБР. Иногда вслед за байтом МОНЕ следует дополнительный байт 81В (см. рис. 5.19). Байт ЯВ определяет масштабный коэффициент и два регистра. Когда присутствует байт 81В, адрес операнда вычисляется путем умножения индексного регистра на 1, 2, 4 или 8 (в зависимости от значения поля 8САЕЕ), прибавлением его к базовому регистру и, наконец, возможным прибавлением 8- или 32-разрядного смещения, в зависимости от значения поля МОР.
Практически все регистры могут использоваться и в качестве индекса, и в качестве базы. Режимы, получаемые посредством байта 81В, могут пригодиться для обращения к элементам массива. Рассмотрим следующую 1ауа-команду: гсг (1-0: 1<п: 1++! а1!1=0: Ацресация 417 рантировать, что разработчики машины 8088 тестировали ее без веб-браузера. Решения, принятые 20 лет назад, могут оказаться абсолютно неудачными с точки зрения современных приложений. В то же время, включив в машину какую-нибудь функцию, из-за требования обратной совместимости избавиться от нее будет уже невозможно.
Режимы адресации процессора 011гаЗРАВС П! В архитектуре команд процессора П!ггаЯРАКС все команды поддерживают режим непосредственной или регистровой адресации, за исключением тех команд, которые обращаются к памяти. При регистровой адресации 5 бит просто сообщают, какой регистр нужно использовать. При непосредственной адресации в качестве данных используется 13-разрядная константа со знаком. Для арифметических, логических и других подобного рода команд никаких других режимов адресации не используется.
К памяти обращаются команды трех типов: загрузки (1ОАО), сохранения (5ТОкЕ) и синхронизации мультипроцессора. Для команд 1ОАО и 5ТОкЕ поддерживаются два режима обращения к памяти. В первом режиме вычисляется сумма двух регистров, а затем полученное значение используется для косвенной адресации. Второй режим представляет собой обычное индексирование с 13-разрядным смещением со знаком. Режимы адресации процессора 8051 Схема адресации процессора 8051 достаточно стандартна.
Предусмотрено пять основных режимов адресации. Простейший из них, называемый неявной адресацией, применяется в сумматоре. Многие команды комбинируют операнды со значением, накопленным в сумматоре; так работают команды сложения и вычитания операндов, логические операции И и ИЛИ с операндами. Команды, обращающиеся к сумматору, не имеют битов, указывающих на это. Факт применения сумматора неявно подразумевается в коде операции. Второй режим адресации — регистровая адресация, при которой операнд помещается в регистр. Регистры при этом могут быть как входными (источниками значений), так и выходными (приемниками значений).
Третий режим — прямая адресация, когда операнд находится в ячейке памяти, адрес которой указан в команде. Четвертый режим — косвенная регистровая адресация, подразумевающая размещение в регистре указателя на операнд. Поскольку разрядность обычных регистров составляет 8 бит, операнды с такой адресацией должны занимать нижние 256 байт памяти. В последнем, пятом, режиме, который называется непосредственной адресацией, предполагается, что операнд является частью команды. Помимо вышеупомянутых, в 8051 предусмотрен специализированный режим адресации, применяемый некоторыми командами для доступа к памяти.