Становление и эволюция цифровой вычислительной техники 7 страница

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

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

 

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

 

Типовая команда, в общем случае, должна указывать:

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

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

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

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

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

 

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

 

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

· общее число различных команд;

· общую длину команды;

· тип полей команды (фиксированной или переменной длины) и их длина;

· простоту декодирования;

· адресуемость и способы адресации;

· стоимость оборудования для декодирования и исполнения команд.

 

Длина команды

 

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

КОп СА Адресная часть

 

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

 

Общая длина команды RK может быть описана следующим соотношением:

(2.1)

где l — количество адресов в команде; — количество разрядов для записи i-го адреса; — разрядность поля кода операции; RCA — разрядность поля способа адресации.

В большинстве ВМ одновременно уживаются несколько различных форматов команд.

 

Разрядность полей команды

 

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

 

Разрядность поля кода операции

 

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

 

Разрядность поля кода операции

 

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

(2.2)

где int означает округление в большую сторону до целого числа.

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

 

Разрядность адресной части

 

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

Разрядности полей и рассчитываются по формулам:

(2.3)

(2.4)

где — количество ячеек памяти, к которому можно обратиться с помощью i-гo адреса; — количество способов адресации (int означает округление в большую сторону до целого числа).

 

Количество адресов в команде

 

Для определения количества адресов, включаемых в адресную часть, будем использовать термин адресность. В «максимальном» варианте необходимо указать три компонента: адрес первого операнда, адрес второго операнда и адрес ячейки, куда заносится результат операции. В принципе может быть добавлен еще один адрес, указывающий место хранения следующей инструкции. В итоге имеет место четырехадресный формат команды (рис. 2.39). Такой формат поддерживался в ВМ EDVAC, разработанной в 1940-х годах [116].

 

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

 

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

 

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

 

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

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

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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

 

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

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

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

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

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

 

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

 

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

где NA — количество программ в программе; RKa — разрядность команды, определяемая в соответствии с формулой (2.1); А — индекс, указывающий адресность команд программы. С этих позиций оптимальная адресность команды определяется путем решения уравнения при условии, что найденное значение обеспечивает минимум ЕА. В [29] показано, что в среднем ЕА монотонно возрастает с увеличением А. Таким образом, при выборе количества адресов по критерию «емкость ЗУ» предпочтение следует отдавать одноадресным командам.

 

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

 

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

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

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

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

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

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

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

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

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

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

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

(2.5)

в котором Nа — количество арифметических и логических команд в программе; τаА - время выполнения одной арифметической или логической команды; NН — количество неарифметических команд; τНа — время выполнения одной неарифметической команды; А = {1, 2, 3} — индекс, определяющий количество адресов в команде. В свою очередь, NН можно определить как , где Ny — количество команд передачи управления (их число в программе не зависит от адресности), a — количество вспомогательных команд пересылок данных в регистр сумматора и из него.

Время выполнения как арифметической (τаА), так и неарифметической (τНа) команды складывается из времени выборки команды из памяти τ00 — время, затрачиваемое на одно обращение к памяти) и времени считывания/записи данных Аτ0. В случае арифметической команды следует учесть также вклад на исполнение арифметической операции τа. Таким образом, имеем:

(2.6)

(2.7)

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

(2.8)

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

(2.9)

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

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

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

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

Для последовательного алгоритма результат предшествующей команды используется в последующей. Здесь NB1 = 2, так как требуется всего одна команда предварительной засылки числа в сумматор (аккумулятор) в начале вычисления и одна команда пересылки результата в память в конце вычислений. Если обозначить количество арифметических и логических команд в последовательном алгоритме как , то выигрыш во времени для подобного алгоритма (∆Тпосл), согласно выражению (2.9), составит

, (2.10)

где Ny1 — количество команд передачи управления. Таким образом, в последовательных алгоритмах чем больше Naпосл , тем выгоднее оказываются одноадресные команды.

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

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

(2.11)

где Ny2 — количество операций передачи управления. Таким образом, при Nапар>Ny2 целесообразно ориентироваться на трехадресные команды.

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

,

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

(2.12)

где Ny=Ny1+Ny2 — количество команд передачи управления в обеих частях алгоритма.

Из (2.12) следует, что при Naпосл + Ny >2 + Naпар предпочтение следует отдать одноадресным командам.

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

 

Адресность и эффективность использования памяти

 

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

 

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

 

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

 

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

Помимо того, что в адресном поле могут быть указаны только константы, еще одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова. В [120] приведены данные о типичной длине непосредственного операнда для программ GCC, Spice и ТеХ, выполнявшихся на вычислительной машине DEC VAX (рис. 2.46).

В 50-60% команд с непосредственной адресацией длина операнда не превышает 8 бит, а в 75-80% — 16 бит. Таким образом, в подавляющем числе случаев шестнадцати разрядов вполне достаточно, хотя для вычисления адресов могут потребоваться и более длинные константы.

Рисунок 2.47 дает представление о распространенности непосредственной адресации в командах различных типов. На верхней диаграмме показана статистика для программ GCC, Spice и ТеХ. Нижняя диаграмма иллюстрирует «популярность» непосредственной адресации в приложениях с преимущественно целочисленными и вещественными вычислениями, однако следует иметь в виду, что средний процент использования непосредственной адресации по всем командам составляет 35% для целочисленных вычислений и 10% — в программах, ориентированных на обработку чисел с плавающей запятой.

 

Рис. 2.46. Распределение длин непосредственных операндов для трех программ

 

 

 

Рис. 2.47. Частота использования непосредственной адресации в командах разных типов

 

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

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

 

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

 

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

 

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

 

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

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

 

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

 

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

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

 

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

 

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

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

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

 

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

 

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








Дата добавления: 2019-04-03; просмотров: 260;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.052 сек.