Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Организация ЭВМиС; Орлов С.А., Цилькер Б.Я

..pdf
Скачиваний:
422
Добавлен:
25.12.2020
Размер:
5.43 Mб
Скачать

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

101

 

 

Выбор адресности команд

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

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

Для оценки влияния адресности на каждый из перечисленных элементов воспользуемся методикой и выводами, изложенными в [20].

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

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

EA = NA × RKA ,

где NA — количество команд в программе; RKA — разрядность команды, определяемая в соответствии с формулой (2.1); А — индекс, указывающий адресность команд программы. Оптимальная адресность команды определяется путем решения урав-

нения EAA = 0 при условии, что найденное значение обеспечивает минимум EA.

В [24] показано, что в среднем EA монотонно возрастает с увеличением A. Таким образом, при выборе количества адресов по критерию «емкость ЗУ» предпочтение следует отдавать одноадресным командам.

Адресность и время выполнения программы

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

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

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

выборки второго операнда;записи в память результата.

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

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

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

102

Глава 2. Архитектура системы команд

 

 

алгоритмов, на преимущественную реализацию которых ориентирована конкретная ВМ.

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

TA = NaτaA + NíτíA ,

(2.5)

в котором Na — количество арифметических и логических команд в программе; τaA — время выполнения одной арифметической или логической команды; NН — количество неарифметических команд; τíA — время выполнения одной неарифметической команды; A = {1, 2, 3} — индекс, определяющий количество адресов в команде. В свою очередь, NН можно определить как Ní = Nó + NâA , где NУ — количество команд передачи управления (их число в программе не зависит от адресности), а Nâ — количество вспомогательных команд пересылок данных в регистр сумматора иAиз него.

Время выполнения как арифметической ( τaA ), так и неарифметической ( τíA ) ко-

манды складывается из времени выборки команды из памяти τ0

(τ0 — время, за-

трачиваемое на одно обращение к памяти) и времени считывания/записи данных

Aτ0. В случае арифметической команды следует учесть также время на исполнение

арифметической операции τa. Таким образом, имеем:

 

τaA

= τa + τ0 + Aτ0 = τa + (A +1)τ0,

(2.6)

τíA

= τ0 + Aτ0 = (A +1)τ0,

(2.7)

и выражение (2.5) принимает вид:

 

TA = Na[τa + (A +1)τ0] + (N ó + NâA )(A +1)τ0 .

(2.8)

Подставляя в (2.8) значения A = 1 и A = 3, можно определить разность времен ∆T реализации алгоритма с помощью одноадресных и трехадресных команд, принимая во внимание, что для трехадресных команд N23 = 0 :

T = T1 T3 = 2τî(Nâ1 Na Nó ).

(2.9)

Теперь проанализируем «выгодность» той или иной адресности команды в зависимости от типа целевого алгоритма. Возможные типы алгоритмов условно разделим на три группы:

последовательные;параллельные;комбинированные.

Для последовательного алгоритма результат предшествующей команды используется в последующей. Здесь Nâ1 = 2 , так как требуется всего одна команда предварительной засылки числа в аккумулятор в начале вычисления и одна команда пересылки результата в память в конце вычислений. Если обозначить количество арифметических и логических команд в последовательном алгоритме как Naïîñë

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

103

 

 

( Na = Naïîñë ), то выигрыш во времени для подобного алгоритма ( Tïîñë ), согласно выражению (2.9), составит

Tïîñë = 2τ0 (2 Na ïîñë Ny1 ),

(2.10)

где Nó1 — количество команд передачи управления. Таким образом, в последовательных алгоритмах чем больше Naïîñë , тем выгоднее оказываются одноадресные команды.

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

Na = Naïàð , Nâ1 = 2Naïàð ,

ивыигрыш по времени определяется как

 

 

 

Tïàð = 2τ0(Naïàð Nó2 ),

(2.11)

где

Nó2

— количество операций передачи управления. Таким образом, при

Na

> Nó

2

целесообразно ориентироваться на трехадресные команды.

 

ïàð

 

 

 

В комбинированном алгоритме вычислительный процесс образуют как последовательные, так и параллельные части, при этом

Na = Naïîñë + Naïàð ,

ивыигрыш во времени T комб с учетом (2.10) и (2.11) можно оценить как

Têîìá = ∆Tïàð + ∆Tïîñë = 2τ0(2 + Naïàð Naïîñë Nó ),

(2.12)

где Nó = Nó1 + Nó2 — количество команд передачи управления в обеих частях алгоритма.

Из (2.12) следует, что при Naïîñë + Nó > 2 + Naïàð предпочтение следует отдать одноадресным командам.

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

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

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

104

Глава 2. Архитектура системы команд

 

 

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

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

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

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

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

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

Выбор способов адресации является одним из важнейших вопросов разработки системы команд и всей ВМ в целом, при этом существенное значение имеет не только удобство программирования, но и эффективность способа. Для оценки эффективности различных способов адресации обратимся к методике и выводам, изложенным в [20]. Согласно предложенной методике, эффективность способа адресации можно характеризовать двумя показателями: затратами оборудования C и затратами времени T на доступ к адресуемым данным. Затраты оборудования определяются суммой:

C = CВА + CЗУ ,

(2.13)

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

105

 

 

где CВА — затраты аппаратных средств, обеспечивающих вычисление исполнительных адресов; CЗУ — затраты памяти на хранение адресных кодов команд. Обычно CЗУ >> CВА, поэтому при оценке затрат оборудования ограничиваются учетом величины CЗУ. Затраты времени T определяются суммой времени tФИА формирования исполнительного адреса и времени tЗУ выборки или записи операнда:

T = tФИА + tЗУ .

(2.14)

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

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

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

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

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

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

В 50–60% команд с непосредственной адресацией длина операнда не превышает 8 битов, а в 75–80% — 16 битов и лишь в 20–25% случаев непосредственный операнд имеет длину более 16 битов. По оценке Э. Таненбаума [152], в 98% случаев непосредственный операнд укладывается в 13 битов. Таким образом, в подавляющем числе случаев шестнадцати разрядов вполне достаточно, хотя для вычисления адресов могут потребоваться и более длинные константы.

Исследования показывают, что средний процент использования непосредственной адресации по всем командам составляет 35% для целочисленных вычислений и 10% — в программах, ориентированных на обработку чисел с плавающей запятой. Наиболее интенсивно данный вид адресации используется в арифметических операциях и командах сравнения. В то же время загрузка констант в большинстве программ не такая частая операция.

Непосредственная адресация сокращает время выполнения команды, так как не требуется обращение к памяти за операндом. Кроме того, экономится память, поскольку отпадает необходимость в ячейке для хранения операнда. В плане эффективности этот способ можно считать «идеальным» (CНА = 0, TНА = 0) и его можно рекомендовать к использованию во всех ситуациях, когда тому не препятствуют вышеупомянутые ограничения.

106

Глава 2. Архитектура системы команд

 

 

Прямая адресация

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

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

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

Прямую адресацию характеризуют следующие показатели эффективности: CПА = = log2 Ni, TПА = tЗУ, где Ni — количество адресуемых операндов.

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

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

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

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

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

107

 

 

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

CКА = RЯЧ + log2NА ≥ log2(Ni + NА) €,

(2.15)

где RЯЧ — разрядность ячейки памяти, хранящей исполнительный адрес; NА — количество ячеек для хранения исполнительных адресов; Ni — количество адресуемых операндов. Здесь выражение log2NА определяет разрядность сокращенного адресного поля команды (обычно NА << Ni).

Вкачестве варианта косвенной адресации, правда, достаточно редко используемого, можно упомянуть многоуровневую или каскадную косвенную адресацию:

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

Вто же время очевиден и его недостаток — для доступа к операнду требуется три и более обращений к памяти.

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

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

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

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

108

Глава 2. Архитектура системы команд

 

 

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

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

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

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

TКРА = tРОН + tЗУ; СКРА = RРОН + log2NА ≥ log2(Ni + NA) ,

(2.16)

где RРОН — разрядность регистров общего назначения.

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

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

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

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

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

109

 

 

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

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

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

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

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

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

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

110

Глава 2. Архитектура системы команд

 

 

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

Эффективность данного способа адресации (обозначим его СА — «относительно Счетчика Адресация») можно описать выражениями:

TСА = tРОН + tСЛ + tЗУ ; CСА = log2Ni RСК,

(2.17)

где RСК — разрядность счетчика команд; tСЛ — время сложения составляющих исполнительного адреса.

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

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

Рис. 2.47. Базовая регистровая адресация: а — с базовым регистром; б — с использованием одного из РОН

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

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

Разрядность смещения RСМ и, соответственно, затраты оборудования определяют-

ся из условия

RÑÌ = CÁÐÀ = log2

(max(NÎÏ ))

, где NÎÏ

— количество операндов

i-й программы.

 

i

i

 

i

 

 

 

 

 

 

 

Затраты времени составляют: TБРА = tРОН + tСЛ + tЗУ .