В начало

Адресация в МП (Лекция)

 

ПЛАН ЛЕКЦИИ

1. Форматы команд

2. Способы адресации операндов

 

1. Форматы команд

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

-     подлежащую выполнению операцию;

-     адреса исходных данных (операндов), над которыми выполняется операция;

-     адрес, по которому должен быть помещен результат операции.

В соответствии с этим команда состоит из двух частей: операционной и адресной.

 

Операционная часть

Адресная часть

Рис. 1. Структура команды

 

Формат команды определяет ее структуру, то есть количество двоичных разрядов, отводимых под всю команду, а также количество и расположение отдельных полей команды. Полем называется совокупность двоичных разрядов, кодирующих составную часть команды. При создании ЭВМ выбор формата команды влияет на многие характеристики будущей машины. Оценивая возможные форматы, нужно учитывать следующие факторы: общее число различных команд; общую длину команды; тип полей команды (фиксированной или переменной длины) и их длина; простоту декодирования; адресуемость и способы адресации; стоимость оборудования для декодирования и исполнения команд.

Длина команды. Это важнейшее обстоятельство, влияющее на организацию и емкость памяти, структуру шин, сложность и быстродействие ЦП. С одной стороны, удобно иметь в распоряжении мощный набор команд, то есть как можно больше кодов операций, операндов, способов адресации, и максимальное адресное пространство. Однако все это требует выделения большего количества разрядов под каждое поле команды, что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из памяти желательно, чтобы команда была как можно короче, а ее длина была равна или кратна ширине шины данных. Для упрощения аппаратуры и повышения быстродействия ЭВМ длину команды обычно выбирают кратной байту, поскольку в большинстве ЭВМ основная память организована в виде 8-битовых ячеек. В рамках системы команд одной ВМ могут использоваться разные форматы команд. Обычно это связано с применением различных способов адресации. В таком случае в состав кода команды вводится поле для задания способа адресации (СА), и обобщенный формат команды приобретает вид, показанный на рисунке 20. В большинстве ВМ одновременно уживаются несколько различных форматов команд.

 

КОп

СА

Адресная часть

Рис. 2. Обобщенный формат команды

 

Разрядность поля кода операции. Количество двоичных разрядов, отводимых под код операции, выбирается так, чтобы можно было представить любую из операций. При заданной длине кода команды приходится искать компромисс между разрядностью поля кода операции и адресного поля. Большее количество возможных операций предполагает длинное поле кода операции, что ведет к сокращению адресного поля, то есть к сужению адресного пространства. Для устранения этого противоречия иногда длину поля кода операции варьируют. Изначально под код операции отводится некое фиксированное число разрядов, однако для отдельных команд это поле расширяется за счет нескольких битов, отнимаемых у адресного поля.

Разрядность адресной части. В адресной части команды содержится информация о местонахождении исходных данных и месте сохранения результата операции. Обычно местонахождение каждого из операндов и результата задается в команде путем указания адреса со ответствующей ячейки основной памяти или номера регистра процессора. Принципы использования информации из адресной части команды определяет систем адресации. Система адресации задает число адресов в команде команды и приняты способы адресации.

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

 

Операция

Адреса

Код операции

1-й операнд

2-й операнд

Результат

Следующая

команда

Рис. 3. Четырехадресный формат команды

 

В Фон-Неймановских ЭВМ необходимость в четвертом адресе отпадает, поскольку команды располагаются в памяти в порядке их выполнения, и адрес очередной команды может быть получен за счет простого увеличения адреса текущей команды в счетчике команд. Это позволяет перейти к трехадресному формату команд. Требуется только добавить в систему команд ЭВМ команды, способные изменять порядок вычислений.

 

Операция

Адреса

 

Код операции

1-й операнд

2-й операнд

Результат

Рис. 4. Трехадресный формат команды

 

К сожалению, и в трехадресном формате длина команды может оказаться весьма большой. Так, если адрес ячейки основной памяти имеет длину 32 бита, а длина кода операции - 8 бит, то длина команды составит 104 бита (13 байт).

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

 

Операция

Адреса

Код операции

1-й операнд

2-й операнд/ Результат

Рис. 5. Двухадресный формат команды

 

Команду можно еще более сократить, перейдя к одноадресному формату (Рисунок 24), что возможно при выделении определенного стандартного места для хранения первого операнда и результата. Обычно для этой цели используется специальный регистр центрального процессора (ЦП), известный под названием аккумулятора, поскольку здесь аккумулируется результат.

 

 

Операция

Адреса

Код операции

1-й или 2-й операнд

Рис. 6. Одноадресный формат команды

 

Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры ЦП. Так как число регистров в ЦП невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата.

 

Операция

Адреса

Код операции

Регистр

2-й операнд

 

Рис. 7. Полутораадресный формат команды

 

Наконец, если для обоих операндов указать четко заданное местоположение, а также в случае команд, не требующих операнда, можно получить нулъадресный формат команды.

 

 

Операция

Код операции

Рис. 8. Нульадресный формат команды

 

В таком варианте адресная часть команды вообще отсутствует или не задействуется.

Выбор адресности команд. При выборе количества адресов в адресной части команды обычно руководствуются следующими критериями:

- емкостью запоминающего устройства, требуемой для хранения программы;

- временем выполнения программы;

- эффективностью использования ячеек памяти при хранении программы.

Адресность и емкость запоминающего устройства

Емкость запоминающего устройства для хранения программы ЕА можно оценить из соотношения:

 

,

 

где       NA - количество программ в программе;

RK - разрядность команды,

А - индекс, указывающий адресность команд программы.

При выборе количества адресов по критерию «емкость ЗУ» предпочтение следует отдавать одноадресным командам.

Адресность и время выполнения программы. Время выполнения одной команды складывается из времени выполнения операции и времени обращения к памяти.

Для трехадресной команды последнее суммируется из четырех составляющих времени:

- выборки команды;

- выборки первого операнда;

- выборки второго операнда;

- записи в память результата.

Одноадресная команда требует двух обращений к памяти:

- выборки команды;

- выборки операнда.

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

Возможные типы алгоритмов условно разделим на три группы:

-     последовательные;

-      параллельные;

-      комбинированные.

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

 

2. Способы адресации операндов

Приступая к рассмотрению способов адресации, вначале определим понятия «исполнительный» и «адресный код».

Исполнительным адресом операнда (Аисп) называется двоичный код номера ячейки памяти, служащей источником или приемником операнда. Этот код подается на адресные входы запоминающего устройства (ЗУ), и по нему происходит фактическое обращение к указанной ячейке. Если операнд хранится не в основной памяти, а в регистре процессора, его исполнительным адресом будет номер регистра.

Адресный код команды (Ак) - это двоичный код в адресном поле команды, из которого необходимо сформировать исполнительный адрес операнда.

В современных ЭВМ исполнительный адрес и адресный код, как правило, не совпадают, и для доступа к данным требуется соответствующее преобразование. Способ адресации - это способ формирования исполнительного адреса операнда по адресному коду команды. Способ адресации существенно влияет на параметры процесса обработки информации. Чтобы устройство управления вычислительной машины могло определить, какой именно способ адресации принят в данной команде, в разных ВМ используются различные приемы. Часто разным способам адресации соответствуют и разные коды операции. Другой подход - это добавление в состав команды специального поля способа адресации, содержимое которого определяет, какой из способов адресации должен быть применен. Иногда в команде имеется нескольких полей - по одному на каждый адрес. Отметим, что возможен также вариант, когда в команде вообще отсутствует адресная информация, то есть имеет место неявная адресация. При неявной адресации адресного поля либо просто нет, либо оно содержит не все необходимые адреса - отсутствующий адрес подразумевается кодом операции. Так, при исключении из команды адреса результата подразумевается, что результат помещается на место второго операнда. Неявная адресация применяется достаточно широко, поскольку позволяет сократить длину команды.

Выбор способов адресации является одним из важнейших вопросов разработки системы команд и всей ВМ в целом.

Непосредственная адресация. При непосредственной адресации (НА) в адресном поле команды вместо адреса содержится непосредственно сам операнд. Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры.

 

КОп

СА

Непосредственный операнд

Рис. 9. Непосредственная адресация

 

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

Помимо того, что в адресном поле могут быть указаны только константы, еще одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова.

Прямая адресация. При прямой или абсолютной адресации (ПА) адресный код прямо указывает номер ячейки памяти, к которой производится обращение (Рис. 10), то есть адресный код совпадает с исполнительным адресом.

 

Рис. 10. Прямая адресация

 

При всей простоте использования способ имеет существенный недостаток - ограниченный размер адресного пространства, так как для адресации к памяти большой емкости нужно «длинное» адресное поле. Однако более существенным несовершенством можно считать то, что адрес, указанный в команде, не может быть изменен в процессе вычислений (во всяком случае, такое изменение не рекомендуется). Это ограничивает возможности по произвольному размещению программы в памяти.

Косвенная адресация. Одним из путей преодоления проблем, свойственных прямой адресации, может служить прием, когда с помощью ограниченного адресного поля команды указывается адрес ячейки, в свою очередь, содержащей полноразрядный адрес операнда (Рис. 11). Этот способ известен как косвенная адресация (КА). Запись (Ак) означает содержимое ячейки, адрес которой указан в скобках.

При косвенной адресации содержимое адресного поля команды остается неизменным, в то время как косвенный адрес в процессе выполнения программы можно изменять. Это позволяет проводить вычисления, когда адреса операндов заранее неизвестны и появляются лишь в процессе решения задачи. Дополнительно такой прием упрощает обработку массивов и списков, а также передачу параметров подпрограммам.

 

Рис. 11. Косвенная адресация

 

Недостатком косвенной адресации является необходимость в двукратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду (ТКА = 2t3y). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда.

Регистровая адресация. Регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (Рис. 12). Идентификатор регистра в дальнейшем будем обозначать буквой R. Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один из 8 или 16 регистров общего назначения (РОН).

Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти. Малое число РОН позволяет сократить длину адресного поля команды, то есть СРА << СПА. Кроме того,

 

Рис. 12. Регистровая адресация

 

ТРА = tР0Н, где tРОН - время выборки операнда из регистра общего назначения, при чем tРОН << 2t3у. К сожалению, возможности по использованию регистровой адресации ограничены малым числом РОН в составе процессора.

Косвенная регистровая адресация. Косвенная регистровая адресация (КРА) представляет собой косвенную адресацию, где исполнительный адрес операнда хранится не в ячейке основной памяти, а в регистре процессора. Соответственно, адресное поле команды указывает не на ячейку памяти, а на регистр.

 

Рис. 13. Косвенная регистровая адресация

 

Достоинства и ограничения косвенной регистровой адресации те же, что и у обычной косвенной адресации, но благодаря тому, что косвенный адрес хранится не в памяти, а в регистре, для доступа к операнду требуется на одно обращение к памяти меньше.

Адресация со смещением. При адресации со смещением исполнительный адрес формируется в результате суммирования содержимого адресного поля команды с содержимым одного или нескольких регистров процессора (Рис. 14). Адресация со смещением предполагает, что адресная часть команды включает в себя как минимум одно поле к). В нем содержится константа, смысл которой в разных вариантах адресации со смещением может меняться. Константа может представлять собой некий базовый адрес, к которому добавляется хранящееся в регистре смещение. Допустим и прямо противоположный подход: базовый адрес находится в регистре процессора, а в поле Ак указывается смещение относительно этого адреса. В некоторых процессорах для реализации определенных вариантов адресации со смещением предусмотрены специальные регистры, например базовый или индексный.

Рис. 14. Адресация со смещением

 

Использование таких регистров предполагается по умолчанию, поэтому адресная часть команды содержит только поле Ак. Если же составляющая адреса может располагаться в произвольном регистре общего назначения, то для указания конкретного регистра в команду включается дополнительное поле R (при составлении адреса более чем из двух составляющих в команде будет несколько таких полей). Еще одно поле R может появиться в командах, где смещение перед вычислением исполнительного адреса умножается на масштабный коэффициент. Такой коэффициент заносится в один из РОН, на который и указывает это дополнительное поле. В наиболее общем случае адресация со смещением подразумевает наличие двух адресных полей: Ак и R.

В рамках адресации со смещением имеется еще один вариант, при котором исполнительный адрес вычисляется не суммированием, а конкатенацией (присоединением) составляющих адреса. Здесь одна составляющая представляет собой старшую часть исполнительного адреса, а вторая - младшую.

Ниже рассматриваются основные способы адресации со смещением, каждый из которых, впрочем, имеет собственное название.

Относительная адресация. При относительной адресации (ОА) для получения исполнительного адреса операнда содержимое подполя Лк команды складывается с содержимым счетчика команд. Таким образом, адресный код в команде представляет собой смещение относительно адреса текущей команды. Следует отметить, что в момент вычисления исполнительного адреса операнда в счетчике команд может уже быть сформирован адрес следующей команды, что нужно учитывать при выборе величины смещения. Обычно подполе Ак трактуется как двоичное число в дополнительном коде.

Адресация относительно счетчика команд базируется на свойстве локальности, выражающемся в том, что большая часть обращений происходит к ячейкам, расположенным в непосредственной близости от выполняемой команды. Это позволяет сэкономить на длине адресной части команды, поскольку разрядность подполя Лк может быть небольшой. Главное достоинство данного способа адресации состоит в том, что он делает программу перемещаемой в памяти:

Рис. 15. Относительная адресация

 

Независимо от текущего расположения программы в адресном пространстве взаимное положение команды и операнда остается неизменным, поэтому адресация операнда остается корректной.

Базовая регистровая адресация. В случае базовой регистровой адресации (БРА) регистр, называемый базовым, содержит полноразрядный адрес, а подполе Ас - смещение относительно этого адреса. Ссылка на базовый регистр может быть явной или неявной. В некоторых ЭВМ имеется специальный базовый регистр и его использование является неявным, то есть подполе R в команде отсутствует.

 

Рис. 16. Базовая регистровая адресация с базовым регистром

 

Более типичен случай, когда в роли базового регистра выступает один из регистров общего назначения (РОН), тогда его номер явно указывается в подполе R команды.

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

 

 

       Рис. 17. Базовая регистровая адресация

  с использованием одного из РОН

 

Индексная адресация. При индексной адресации (ИА) подполе Ас содержит адрес ячейки памяти, а регистр (указанный явно или неявно) - смещение относительно этого адреса. Как видно, этот способ адресации похож на базовую регистровую адресацию. Поскольку при индексной адресации в поле Ас находится полноразрядный адрес ячейки памяти, играющий роль базы, длина этого поля больше, чем при базовой регистровой адресации. Тем не менее, вычисление исполнительного адреса операнда производится идентично.

Рис. 18. Индексная адресация с индексным регистром

Рис. 19. Индексная адресация с использованием одного из РОН

 

Индексная адресация предоставляет удобный механизм для организации итеративных вычислений. Пусть, например, имеется массив чисел, расположенных в памяти последовательно, начиная с адреса N, и мы хотим увеличить на единицу все элементы данного массива. Для этого требуется извлечь каждое число из памяти, прибавить к нему 1 и вернуть обратно, а последовательность исполнительных адресов будет следующей: N, N +  I, N + 2 и т.д., вплоть до последней ячейки, занимаемой рассматриваемым массивом. Значение N берется из подполя Ас команды, а в выбранный регистр, называемый индексным регистром, сначала заносится 0. После каждой операции содержимое индексного регистра увеличивается на 1.

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

Страничная адресация. Страничная адресация (СТА) предполагает разбиение адресного пространства на страницы. Страница определяется своим начальным адресом, выступающим в качестве базы. Старшая часть этого адреса хранится в специальном регистре - регистре адреса страницы (РАС). В адресном коде команды указывается смещение внутри страницы, рассматриваемое как младшая часть исполнительного адреса. Исполнительный адрес образуется конкатенацией (присоединением) Ас к содержимому РАС, как показано далее. На рисунке символ || обозначает операцию конкатенации.

 

Рис. 20. Страничная адресация

 

Блочная адресация. Блочная адресация используется в командах, для которых единицей обработки служит блок данных, расположенных в последовательных ячейках памяти. Этот способ очень удобен при работе с внешними запоминающими устройствами и в операциях с векторами. Для описания блока обычно берется адрес ячейки, где хранится первый или последний элемент блока, и общее количество элементов блока, заданное числом байтов или ячеек. Вместо длины блока может использоваться специальный признак «конец блока», помещаемый за последним элементом блока.

Стековая адресация. Данный вид адресации был рассмотрен при описании общей схемы микропроцессора.

MasterCard Virtual 10 + Выписка
MasterCard Virtual 10 + Выписка


Mad Max
Mad Max


1 VISA VIRTUAL (RUS BANK)
1 VISA VIRTUAL (RUS BANK)