ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.12.2021
Просмотров: 5255
Скачиваний: 8
94 Глава 2. Архитектура системы команд
1
Рис. 2.34.
Частота использования команд управления потоком команд
команды обязательно входят в АСК любой ВМ. Для их обозначения в языке
ассемблера обычно используется английское
jump
(прыжок). Команда
безусловного перехода обеспечивает переход по заданному адресу без проверки
каких-либо условий.
Условный переход
происходит только при соблюдении определенного условия,
в противном случае выполняется следующая по порядку команда программы. Боль-
шинство производителей ВМ в своих ассемблерах обозначают подобные команды
словом
branch
(ветвление). Статистика случаев, когда переход имеет место, приве-
дена на рис. 2.35.
Рис. 2.35.
Частота выполнения условия перехода
Условием, на основании которого осуществляется переход, чаще всего высту-
пают признаки результата предшествующей арифметической или логической
операции. Каждый из признаков фиксируется в своем разряде регистра флагов
процессора. Возможен и иной подход, когда решение о. переходе принимается
зависимости от состояния одного из регистров общего назначения, куда предвари-
тельно помещается результат операции сравнения. Третий вариант — это объеди-
нение операций сравнения и перехода в одной команде.
В системе команд ВМ для каждого признака результата предусматривается
команда ветвления (иногда — две: переход при наличии признака и переход при
его отсутствии). Большая часть условных переходов связана с проверкой взаим-
ного соотношения двух величин или с равенством (неравенством) некоторой ве-
личины нулю. Последний вид проверок используется в программах наиболее ин-
тенсивно, о чем свидетельствуют статистические данные, приведенные на рис. 2.36.
На верхней диаграмме показаны частоты употребления разных видов условий для
программ GCC, Spice и ТеХ, выполнявшихся на
MIPS 2000. Нижняя диаг-
рамма дает представление о результатах, полученных для двух тестовых смесей
Типы команд 95
Рис. 2.36. Средняя частота использования различных условий перехода
в командах ветвления
программ, где в одной из смесей превалировали
вычисления, а в
другой — вычисления с плавающей запятой.
Помимо приведенных на рис. 2.36 данных необходимо отметить, что по резуль-
татам тех же исследований доля команд, где проверяются простые условия (= или
<>), составляет в среднем 50%. Кроме того, в качестве одного из операндов в ко-
мандах, вычисляющих результат сравнения, как правило, выступает константа.
Доля таких команд для уже упоминавшихся программ составляет: GCC — 84%,
Spice - 92%,
- 83%.
Одной из форм команд условного перехода являются
команды пропуска.
В них
адрес перехода отсутствует, а при выполнении
происходит пропуск сле-
дующей команды, то есть предполагается, что отсутствующий в команде адрес сле-
дующей команды эквивалентен адресу текущей команды, увеличенному на длину
пропускаемой команды. Такой прием позволяет сократить длину команд передачи
управления.
Для всех языков программирования характерно интенсивное использование
механизма процедур. Процедура может быть вызвана в любой точке программы.
Для ВМ такой вызов означает, что в этой точке необходимо выполнить процедуру,
после чего вернуться в точку, непосредственно следующую за местом вызова.
Процедурный механизм базируется на
командах вызова процедуры,
обеспечи-
вающих переход из текущей точки программы к начальной команде процедуры,
и
командах возврата из процедуры,
для возврата в точку, непосредственно распо-
96 Глава 2. Архитектура системы команд
ложенную за командой вызова. Такой режим предполагает наличие средств для
сохранения текущего состояния содержимого счетчика команд в момент вызова
(запоминание адреса точки возврата) и его восстановления при выходе из проце-
дуры.
Форматы команд
Типовая команда, в общем случае, должна указывать:
• подлежащую выполнению операцию;
• адреса исходных данных (операндов), над которыми выполняется операция;
• адрес, по которому должен быть помещен результат операции.
В соответствии с этим команда состоит из двух частей: операционной и
ной (рис. 2.37).
Рис. 2.37. Структура команды
Формат команды
определяет ее структуру, то есть количество двоичных раз-
рядов, отводимых под всю команду, а также количество и расположение отдель-
ных полей команды.
Полем
называется совокупность двоичных разрядов, кодиру-
ющих составную часть команды. При создании ВМ выбор формата команды влияет
на многие характеристики будущей машины. Оценивая возможные форматы, нуж-
но учитывать следующие факторы:
• общее число различных команд;
• общую длину команды;
• тип полей команды (фиксированной или переменной длины) и их длина;
• простоту декодирования;
• адресуемость и способы адресации;
• стоимость оборудования для декодирования и исполнения команд.
Длина команды
Это важнейшее обстоятельство, влияющее на организацию и емкость памяти, струк-
туру шин, сложность и быстродействие ЦП. С одной стороны, удобно иметь в рас-
поряжении мощный набор команд, то есть как можно больше кодов операций, опе-
рандов, способов адресации, и максимальное адресное пространство. Однако все
это требует выделения большего количества разрядов под каждое поле команды,
что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из
памяти желательно, чтобы команда была как можно короче, а ее длина была равна
или кратна ширине шины данных. Для упрощения аппаратуры и повышения быс-
тродействия ВМ длину команды обычно выбирают кратной байту, поскольку
в большинстве ВМ основная память организована в виде 8-битовых ячеек. В рам-
ках системы команд одной ВМ могут использоваться разные форматы команд.
Обычно это связано с применением различных способов адресации. В таком слу-
команд 97
чае в состав кода команды вводится поле для задания способа адресации (СА),
и обобщенный формат команды приобретает вид, показанный на рис. 2.38.
Рис. 2.38. Обобщенный формат команды
Общая длина команды
может быть описана следующим соотношением:
где
I
— количество адресов в команде;
—
количество разрядов для записи i-гo
адреса;
-- разрядность поля кода операции;
— разрядность поля способа
адресации.
В большинстве ВМ одновременно уживаются несколько различных форматов
команд.
Разрядность полей команды
Как уже говорилось, в любой команде можно выделить операционную и адресную
части. Длины соответствующих полей определяются различными факторами, ко-
торые целесообразно рассмотреть по отдельности.
Разрядность поля кода операции
двоичных разрядов, отводимых под код операции, выбирается так,
чтобы можно было представить любую
операций. Если система команд предпо-
лагает
различных операций, то минимальная разрядность поля кода опера-
ции
определяется следующим образом:
где
означает округление в оольшую сторону до целого числа.
При заданной длине кода команды приходится искать компромисс между раз-
рядностью поля кода операции и адресного поля. Большее количество возможных
операций предполагает длинное поле кода операции, что ведет к сокращению ад-
ресного поля, то есть к сужению адресного пространства. Для устранения этого
противоречия иногда длину поля кода операции варьируют. Изначально под код
операции отводится некое фиксированное число разрядов, однако для отдельных
команд это поле расширяется за счет нескольких битов, отнимаемых у адресного
поля. Так, например, может быть увеличено число различных команд пересылки
данных. Необходимо отметить, что «урезание» части адресного поля ведет к со-
кращению возможностей адресации, и подобный прием рекомендуется только в тех
командах, где подобное сокращение может быть оправданным.
Разрядность адресной части
В адресной части команды содержится информация о местонахождении исход-
ных данных и месте сохранения результата операции. Обычно местонахождение
98 Глава 2. Архитектура системы команд
каждого из операндов и результата задается в команде путем указания адреса со-
ответствующей ячейки основной памяти или номера регистра процессора. Прин-
ципы использования информации из адресной части команды определяет
система
адресации.
Система адресации задает
число адресов в команде
команды и принятые
способы адресации.
Разрядности полей
и
рассчитываются по формулам:
(2.3)
(2.4)
где
— количество ячеек памяти, к которому можно обратиться с помощью
адреса;
— количество способов адресации (int означает округление в большую
сторону до целого числа).
Количество адресов в команде
Для определения количества адресов, включаемых в адресную часть, будем исполь-
зовать термин
адресность.
В «максимальном» варианте необходимо указать три
компонента: адрес первого операнда, адрес второго операнда и адрес ячейки, куда
заносится результат операции. В принципе может быть добавлен еще один адрес,
место хранения следующей инструкции. В итоге имеет место
четы-
рехадресный формат команды
(рис. 2.39). Такой формат поддерживался в ВМ
разработанной в
годах
Рис.
2.39. Четырехадресный формат команды
В фон-неймановских ВМ необходимость в четвертом адресе отпадает, поскольку
команды располагаются в памяти в порядке их выполнения, и адрес очередной
команды может быть получен за счет простого увеличения адреса текущей коман-
ды в счетчике команд. Это позволяет перейти к
трехадресному формату команды
(рис. 2.40). Требуется только добавить в систему команд ВМ команды, способные
изменять порядок вычислений.
Рис. 2.40.
Трехадресный формат команды
К сожалению, и в трехадресном формате длина команды может оказаться весь-
ма большой. Так, если адрес ячейки основной памяти имеет длину 32 бита, а длина
кода операции — 8 бит, то длина команды составит 104 бита (13 байт).