|
||
![]() |
||
|
||
нию, поэтому адресная часть команды содержит только поле Ак. Если же составляющая- адреса может располагаться в произвольном регистре общего назначения, то для указания конкретного регистра в команду включается дополнительное поле R (при составлении адреса более чем из двух составляющих в команде будет несколько таких полей). Еще одно поле R может появиться в командах, где смещение перед вычислением исполнительного адреса умножается на масштабный коэффициент. Такой коэффициент заносится в один из РОН, на который и указывает это дополнительное поле. В наиболее общем случае адресация со смещением подразумевает наличие двух адресных полей: Аки R.
В рамках адресации со смещением имеется еще один вариант, при котором исполнительный адрес вычисляется не суммированием, а конкатенацией (присоединением) составляющих адреса. Здесь одна составляющая представляет собой старшую часть исполнительного адреса, а вторая — младшую.
Ниже рассматриваются основные способы адресации со смещением, каждый из которых, впрочем, имеет собственное название.
Относительная адресация
При относительной адресации (ОА) для получения исполнительного адреса операнда содержимое подполя Лккоманды складывается с содержимым счетчика команд (рис. 2.53). Таким образом, адресный код в команде представляет собой смещение относительно адреса текущей команды. Следует отметить, что в момент вычисления исполнительного адреса операнда в счетчике команд может уже быть сформирован адрес следующей команды, что нужно учитывать при выборе величины смещения. Обычно подполе Лктрактуется как двоичное число в дополнительном коде.
Адресация относительно счетчика команд базируется на свойстве локальности, выражающемся в том, Что большая часть обращений происходит к ячейкам, расположенным в непосредственной близости от выполняемой команды. Это позволяет сэкономить на длине адресной части команды, поскольку разрядность под-поля к может быть небольшой. Главное достоинство данного способа адресации состоит в том, что он делает программу перемещаемой в памяти: независимо от
|
||
|
||
|
||
![]() |
||
|
||
Рис. 2.53. Относительная адресация
текущего расположения программы в адресном пространстве взаимное положение команды и операнда остается неизменным, поэтому адресация операнда остается корректной.
Эффективность данного способа адресации можно описать выражениями:
Гс = tp0H + +; Сса - int(log2 - RCK),
где tCT — время сложения составляющих исполнительного адреса; i?CK— разрядность счетчика команд.
Базовая регистровая адресация
В случае базовой регистровой адресации (БРА) регистр, называемый базовым, содержит полноразрядный адрес, а подполе Ас— смещение относительно этого- адреса. Ссылка на базовый регистр может быть явной или неявной. В некоторых ВМ имеется специальный базовый регистр и его использование является неявным, то есть подполе R в команде отсутствует (рис. 2.54).
|
||
|
||
![]() |
||
|
||
Более типичен случай, когда в роли базового регистра выступает один из регистров общего назначения (РОН), тогда его номер явно указывается в подполе R команды (рис. 2.55).
Базовую регистровую адресацию обычно используют для доступа к элементам массива, положение которого в памяти в процессе вычислений может меняться. В базовый регистр заносится начальный адрес массива, а адрес элемента массива указывается в подполе с команды в виде смещения относительно начального адреса массива. Достоинство данного способа адресации, в том, что смещение имеет меньшую длину, чем полный адрес, и это позволяет сократить длину адресного поля команды. Короткое смещение расширяется до полной длины исполнительного адреса путем добавления слева битов, совпадающих со значением знакового разряда смещения.
|
||
|
||
|
||
![]() |
||
|
||
Распределение значений смещения, оцененное в [120] при выполнении пяти-тестовых программ пакета SPECInt92 и пяти программ пакета SPECftp92,показано на рис. 2.56.
|
||
|
||
![]() |
||
|
||
Рис. 2.56. Распределение размеров смещений при базовой регистровой адресации Длина смещения превысила 16 бит лишь в 1% случаев базовой регистровой адресации, то есть в подавляющем большинстве случаев длина смещения существенно меньше.
|
||
|
||
![]() |
||
|
||
Индексная адресация
При индексной адресации (ИА) подполе Л<€одержит адрес ячейки памяти, а регистр (указанный явно или неявно) — смещение относительно этого адреса. Как видно, этот способ адресации похож на базовую регистровую адресацию. Поскольку при индексной адресации в поле Л(«аходится полноразрядный адрес ячейки памяти, играющий роль базы, длина этого поля больше, чем при базовой регистровой адресации. Тем не менее вычисление исполнительного адреса операнда производится идентично (рис. 2.57,2.58).
|
||
|
||
|
||
112 Глава 2. Архитектура системы команд
|
||
|
||
![]() |
||
|
||
Рис. 2.58. Индексная адресация с использованием одного из РОН
Индексная адресация предоставляет удобный механизм для организации итеративных вычислений. Пусть, например, имеется массив чисел, расположенных в памяти последовательно, начиная с адреса Ν, и мы хотим увеличить на единицу все элементы данного массива. Для этого требуется извлечь каждое число из памяти, прибавить к нему 1 и вернуть обратно, а последовательность исполнительных адресов будет следующей: Ν, Ν+ 1, Ν+ 2 и т. д., вплоть до последней ячейки, занимаемой рассматриваемым массивом. Значение вберется из подполя с ко- ' манды, а в выбранный регистр, называемый индексным регистром, сначала заносится 0. После каждой операции содержимое индексного регистра увеличивается на 1.
. Так как это довольно типичный случай, в большинстве ВМ увеличение или уменьшение содержимого индексного регистра до или после обращения к нему осуществляется автоматически как часть машинного цикла. Такой прием называется автоиндексированием. Если для индексной адресации используются специально выделенные регистры, автоиндексирование может производиться неявно и автоматически. При задействовании для хранения индексов регистров общего назначения необходимость операции автоиндексирования должна указываться в команде специальным битом.
Автоиндексирование с увеличением содержимого индексного регистра носит название автоинкрементной адресации и может быть описано следующим образом:
![]() В первом варианте увеличение содержимого индексного регистра происходит после формирования исполнительного адреса, и этот способ называется постинкрементным автоиндексированием. Во втором случае сначала производится увеличение содержимого индексного регистра, и уже новое значение используется для
|
||
|
||
|
||
Форматы команд 113
|
||
|
||
формирования исполнительного адреса. Тогда говорят о преинкрементном автоиндексировании.
Автоиндексирование с уменьшением содержимого индексного регистра носит название автодекрементной адресации и может быть описано так:
![]() Здесь также возможны два варианта, отличающиеся последовательностью выполнения операций уменьшения содержимого индексного регистра и вычисления исполнительного адреса: постдекрементное автоиндексирование и предекрементное автоиндексирование.
Интересным и весьма полезным является еще один вариант индексной адреса^ ции — индексная адресация с масштабированием и смещением: содержимое индексного регистра умножается на масштабный коэффициент и суммируется с Лс.Мас-штабный коэффициент может принимать значения 1,2,4или 8, для чего в адресной части команды выделяется дополнительное поле. Описанный способ адресации реализован, например, в микропроцессорах фирмы Intel.
Следует особо отметить, что система команд многих ВМ предоставляет возможность различным образом сочетать базовую и индексную адресации в качестве дополнительных способов адресации.
Страничная адресация
Страничная адресация (СТА) предполагает разбиение адресного пространства на страницы. Страница определяется своим начальным адресом, выступающим в качестве базы. Старшая часть этого адреса хранится в специальном регистре —регистре адреса страницы (РАС). В адресном коде команды указывается смещение внутри страницы, рассматриваемое как младшая часть исполнительного адреса. Исполнительный адрес образуется конкатенацией (присоединением) Аск содержимому РАС, как показано на рис. 2.59. На рисунке символ || обозначает операцию конкатенации.
|
||
|
||
![]() |
||
|
||
Рис. 2.59. Страничная адресация
Показатели эффективности страничной адресации имеют вид: Сста - intOofoJV, - lofeA/), ГСТА - Гтон + Гзу,
где М— количество страниц в памяти.
|
||
|
||
|
||
114 Глава 2. Архитектура системы команд
|
||
|
||
Блочная адресация
Блочная адресация используется в командах, для которых единицей обработки служит блок данных, расположенных в последовательных ячейках памяти. Этот способ очень удобен при работе с внешними запоминающими устройствами и в операциях с векторами. Для описания блока обычно берется адрес ячейки, где хранится первый или последний элемент блока, и общее количество элементов блока, заданное числом байтов или ячеек. Вместо длины блока может использоваться специальный признак «конец блока», помещаемый за последним элементом блока
Стековая адресация
Данный вид адресации был рассмотрен при описании стековой архитектуры системы команд.
Распространенность различных видов адресации
Частота использования различных способов адресации существенно зависит от типа АСК. Для машин со стековой архитектурой очевидно, что основным способом адресации является стековая адресация. Для ВМ с аккумуляторной АСК главные способы адресации — это прямая и непосредственная.
Достаточно ясна и ситуация с RISC-архитектурой. Из самой идеи этого подхода вытекает, что преимущественный способ адресации здесь — регистровая адресация.
Более сложным является вопрос о частоте использования различных видов адресации в регистровых ВМ. В рамках этой архитектуры существует множество машин с самыми разнообразными списками команд и различными сочетаниями способов адресации, в силу чего дать однозначный ответ относительно наиболее распространенных вариантов практически невозможно. Сказанное подтверждают результаты, полученные при выполнении программ GCC и Spice на вычислительной машине DEC VAX (рис. 2.60) и на ВМ с микропроцессором класса 80x86 (рис. 2.61).
Из диаграмм видно, что в машине VAX из применявшихся способов адресации доминируют непосредственная, базовая регистровая и косвенная регистровая. Доля не упомянутых в таблице способов адресации не превышает 2%.
|
||
|
||
![]() |
||
|
||
|
||
![]() |
||
|
||
Рис. 2.61. Частота использования методов адресации на программах GCC и Spice (Intel 80x86)
При выполнении программ СС и Spice на ВМ с микропроцессорами серии 80x86 наиболее активно используются прямая и базовая регистровая адресации.
Как видно, сделать однозначный вывод о наибольшей распространенности какого-либо способа адресации для архитектур с РОН достаточно сложно. Единственное общее замечание — интенсивность применения конкретных способов адресации ощутимо зависит от характера решаемой задачи. Это обстоятельство обязательно должно учитываться пользователями при выборе ВМ под конкретное применение.
Способы адресации в командах управления потоком команд
Основными способами адресации в командах управления потоком команд являются прямая и относительная.
Для команд безусловного и условного перехода (ветвления) наиболее типична относительная адресация, когда в адресной части команды указывается смещение адреса точки перехода относительно текущей команды, то есть смещение относительно текущего.содержимого счетчика команд. Использование данного способа адресации позволяет программе выполняться в любом месте памяти — программы становятся перемещаемыми. Среди команд безусловного перехода доля относительной адресации составляет около 90%.
Для команд перехода чрезвычайно важно, насколько далеко адрес перехода отстоит от адреса команды перехода, иными словами, какова типичная величина смещения. В [120] приведены данные о типовой величине смещения, оцененной по программам GCC, Spice, ТеХ; они представлены на рис. 2.62. Результаты, полученные на смесях программ с преимущественной обработкой целочисленных и вещественных данных, показаны на нижнем графике того же рисунка.
Как видно, длина смещения в основном не превышает 8 бит, что соответствует смещению в пределах ±128 относительно команды ветвления. В подавляющем большинстве случаев переход идет в пределах 3-7 команд относительно команды перехода.
Рисунок 2.63 дает представление о преимущественном направлении переходов.
|
||
|
||
|
||
116 Глава 2. Архитектура системы команд
|
||
|
||
![]() |
||
|
||
![]() |
||
|
||
![]() |
||
|
||
Из приведенных данных следует, что в среднем 75% переходов происходит в направлении увеличения адреса. Из переходов в сторону уменьшения адреса около 90% связаны с выполнением циклов.
|
||
|
||
Система операций
|
||
|
||
Системой операций называется список операций, непосредственно выполняемых техническими средствами вычислительной машины. Система операций ВМ опре-
|
||
|
||