|
||
104 Глава 2. Архитектура системы команд
|
||
|
||
и затратами времени Г на доступ к адресуемым данным. Затраты оборудования определяются суммой
где СВА — затраты аппаратных средств, обеспечивающих вычисление исполнительных адресов; СЗУ — затраты памяти на хранение адресных кодов команд. Обычно СЗУ » СВА, поэтому при оценке затрат оборудования ограничиваются учетом величины Сзу. Затраты времени Т определяются суммой времени £ФИЛформирова-ния исполнительного адреса и времени-i3y выборки или записи операнда:
-» = ФИА + ^ЗУ·
В настоящее время используются различные виды адресации, наиболее распространенные из которых рассматриваются ниже.
Непосредственная адресация
При непосредственной адресации (НА) в адресном поле команды вместо адреса содержится непосредственно сам операнд (рис. 2.45). Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры.
|
||
|
||
|
||
|
||
Когда операндом является число, оно обычно представляется в дополнительном коде. При записи в регистр, имеющий разрядность, превышающую длину непосредственного операнда, операнд размещается в младшей части регистра, а оставшиеся свободными позиции заполняются значением знакового бита операнда.
Помимо того, что в адресном поле могут быть указаны только константы, еще одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова. В [120] приведены данные о типичной длине непосредственного операнда для программ GCC, Spice и ТеХ, выполнявшихся на вычислительной машине DEC VAX (рис. 2.46).
В 50-60% команд с непосредственной адресацией длина операнда не превышает 8 бит, ав 75-80% — 16 бит. Таким образом, в подавляющем числе случаев шестнадцати разрядов вполне достаточно, хотя для вычисления адресов могут потребоваться и более длинные константы.
Рисунок 2.47 дает представление о распространенности непосредственной адресации в командах различных типов. На верхней диаграмме показана статистика для программ GCC, Spice и ТеХ. Нижняя диаграмма иллюстрирует «популярность» непосредственной адресации в приложениях с преимущественно целочисленными и вещественными вычислениями, однако следует иметь в виду, что средний процент использования непосредственной адресации по всем командам составляет 35% для целочисленных вычислений и 10% — в программах, ориентированных на обработку чисел с плавающей запятой.
|
||
|
||
|
||
Форматы команд 105
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
10 6 Глава 2. Архитектура системы команд
|
||
|
||
Из приведенных диаграмм видно, что наиболее интенсивно данный' вид адресации используется в арифметических операциях и командах сравнения. В то же время загрузка констант в большинстве программ, очевидно, не такая частая операция.
Непосредственная адресация сокращает время выполнения команды, так как не требуется обращение к памяти за операндом. Кроме того, экономится память, поскольку отпадает необходимость в ячейке для хранения операнда. В плане эффективности этот способ можно считать «идеальным» (СНА= О, ТНА= 0), и его можно рекомендовать к использованию во всех ситуациях, когда тому не препятствуют вышеупомянутые ограничения.
Прямая адресация
При прямой или абсолютной адресации (ПА) адресный код прямо указывает номер ячейки памяти, к которой производится обращение (рис. 2.48), то есть адресный код совпадает с исполнительным адресом;
|
||
|
||
|
||
|
||
При всей простоте использования способ имеет существенный недостаток — ограниченный размер адресного пространства, так как для адресации к памяти большой емкости нужно «длинное» адресное поле. Однако более существенным несовершенством можно считать то, что адрес, указанный в команде, не может быть изменен в процессе вычислений (во всяком случае, такое изменение не рекомендуется) . Это ограничивает возможности по произвольному размещению программы в памяти.
Прямую адресацию характеризуют следующие показатели эффективности: СПА = int(log2N,), ПА - t3y, где N; — количество адресуемых операндов.
Косвенная адресация
Одним из путей преодоления проблем, свойственных прямой адресации, может служить прием, когда с помощью ограниченного адресного поля команды указывается адрес ячейки, в свою очередь, содержащей полноразрядный адрес операнда (рис. 2.49). Этот способ известен как косвенная адресация (КА). Запись (Лк)озна-чает содержимое ячейки, адрес которой указан в скобках.
При косвенной адресации содержимое адресного поля команды остается неизменным, в то время как косвенный адрес в процессе выполнения программы можно изменять. Это позволяет проводить вычисления, когда адреса операндов заранее неизвестны и появляются лишь в процессе решения задачи. Дополнительно такой прием упрощает обработку массивов и списков, а также передачу параметров подпрограммам. ■
|
||
|
||
|
||
Форматы команд 107
|
||
|
||
|
||
|
||
Рис. 2.49. Косвенная адресация
Недостатком косвенной адресации является необходимость в двухкратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду ( = 2t3y). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда. Способу свойственны следующие затраты оборудования:
где яч — разрядность ячейки памяти, хранящей исполнительный адрес; NA — количество ячеек для хранения исполнительных адресов; К,— количество адресуемых операндов. Здесь выражение int(log27Vy определяет разрядность сокращенного адресного поля команды (обычно NA«NJ.
В качестве варианта косвенной адресации, правда, достаточно редко используемого, можно упомянуть многоуровневую или каскадную косвенную адресацию: исп = (··■ (А\д-)> когда к исполнительному адресу ведёт цепочка косвенных адресов. В этом случае один из битов в каждом адресе служит признаком косвенной адресации. Состояние бита указывает, является ли содержимое ячейки очередным адресом в цепочке адресов или это уже исполнительный адрес операнда. Особых преимуществ у такого подхода нет, но в некоторых специфических ситуациях он оказывается весьма удобным, например при обработке многомерных массивов. В то же время очевиден и его недостаток — для доступа к операнду требуется три и более обращений к памяти.
Регистровая адресация
Регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (рис. 2.50). Идентификатор регистра в дальнейшем будем обозначать буквой R. Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один из 8 или 16 регистров общего назначения (РОН).
Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти. Малое число РОН позволяет сократить длину адресного поля команды, то есть СРА « СПА. Кроме того, pa = рои» гДерон ~~ время выборки операнда из регистра общего назначения, при-
|
||
|
||