Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник ОЭВМ Трусфус.doc
Скачиваний:
124
Добавлен:
12.03.2015
Размер:
4.82 Mб
Скачать

2.3.3. Структура и типы команд

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

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

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

1. операцию,

2. адрес или значение первого операнда,

3. адрес или значение второго операнда,

4. адрес сохранения результата,

5. адрес следующей команды (или двух альтернативных адресов команды для реализации ветвлений).

Задание операции

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

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

Поле адресов

Если все перечисленные адреса задаются явно (соответствующими полями), то команда имеет четырех- или пятиадресную структуру (рис. 2.5). Два альтернативных адреса следующей команды необходимы для реализации ветвлений.

Код операции

Адрес 1

Адрес 2

Адрес 3

Адрес 4 (4,5)

Рис. 2.5 Структура четырехадресной команды

Четырехадресная структура определяет необходимый набор адресов для задания двухместной операции. Но все указанные адреса задавать в явном виде необязательно. Здесь возможны различные варианты.

Трехадресная система команд

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

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

Например, команда безусловного перехода:

Jmp <адрес передачи управления>.

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

Например, команда JEZ - переход, если признак результата предыдущей команды равен нулю:

JEZ <адрес передачи управления при выполнении условия перехода>

Команды условной передачи управления позволяют разрабатывать разветвляющиеся и циклические программы. Разновидностью команд передачи управления являются команды передачи управления с возвратом (команды переходов на подпрограммы). При выполнении этих команд перед передачей управления на подпрограмму запоминается адрес возврата (содержимое счетчика команд до передачи управления). Адрес возврата используется другой разновидностью команд передачи управления – командами выхода из подпрограммы. Адрес возврата обычно запоминается в специальном регистре PSW (слово состояния программы, семейство PDP-11), ячейке оперативной памяти (семейство IBM/370), или в аппаратном стеке (персональные компьютеры, программно совместимые с IBM PC).

Таким образом, переход к трехадресной системе команд сопровождается:

  • отказом от независимости в расположении отдельных команд в программе,

  • введением в состав процессора специального устройства (счетчика команд), вычисляющего адрес следующей команды,

  • введением в состав команд процессора специальных команд для задания точек нарушения выполнения команд в естественном порядке и указания адресов переходов. Это команды задания условного и безусловного переходов (с возвратом или без возврата).

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

Двухадресная система команд

В качестве адреса результата операции можно использовать адрес одного из исходных операндов. При этом результат операции записывается "поверх" одного из операндов, значение которого теряется, но команда становится компактнее (рис. 2.7).

Это двухадресные команды. В двухадресных командах один адрес рассматривается как адрес-источник, а другой – как адрес-приемник.

Естественно, что в этих командах только операнд-источник можно задавать непосредственным значением.

Неизбежная потеря значения одного из операндов при использовании двухадресных команд потребовала введения в состав команд процессора команды пересылки (копирования) объекта-источника в ячейку приемника. Примером такой команды может служить команда пересылки MOV:

MOV А1, А2.

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

Одноадресная система команд

Дальнейшее уменьшение количества адресов, явно заданных в команде, приводит к одноадресной структуре команд (рис. 2.8).

В процессоре с одноадресной структурой команд предусматривается специальный регистр – аккумулятор. Это регистр, в котором находится один из операндов, и в который записывается результат операции (поверх исходного операнда).

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

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

Сравним эффективность программирования в одноадресной и трехадресной системе команд.

Вычисление оператора С = А+В в трехадресной системе команд можно задать одной командой

ADD <A>, <B>, <C>;

а в одноадресной – тремя командами:

MOVAC <A>; загрузить в регистр-аккумулятор число А

ADD <B>; содержимое аккумулятора увеличить на значение числа В

MOVM <C>; сохранить содержимое аккумулятора в ячейке памяти С.

Здесь в командах используются условные обозначения: угловые скобки задают не значения операндов А, В, С, а их адреса.

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

Например, для оператора A=BC+D–E программа в трехадресной системе команд будет содержать 3 команды:

MULT <B>, <C>, <A>

ADD <A>, <D>, <A>

SUB <A>, <E>, <A>,

а в одноадресной системе – 5 коротких команд:

MOVAC <B>

MULT <C>

ADD <D>

SUB <E>

MOVM <A>.

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

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

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

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

Дальнейшее усовершенствование системы команд привело к усложнению системы адресации ячеек оперативной памяти. Адреса оперативной памяти стали задавать не явно, а компонентами. Для хранения компонентов адреса стали использовать те же регистры. Появилась дополнительная индексная (адресная) арифметика для вычисления адреса по компонентам. Дополнительные регистры стали использоваться для хранения как операндов, так и компонентов адреса. А регистры получили название "регистры общего назначения" ( РОНы).

Многие фирмы (Intel,DEC) для гибкости системы программирования стали использовать множество формул (режимов адресации) для вычисления адресов.

С появлением РОНов команды снова стали двухадресными. Один – адрес оперативной памяти, другой – РОНа, или оба адреса – номера используемых РОНов.

В случае использования РОНов команды, в зависимости от расположения исходных операндов, разделяются на типы: регистр-регистр, регистр-память.

Команды типа регистр-регистр являются наиболее компактными по размерам и быстрыми по выполнению. Они используют короткие адреса и независимы от задержек при обращении к памяти. Как исключение, некоторые ЭВМ (например, IBM/370) сохранили команды и типа память-память.

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

Вопросы для самопроверки:

1. Двухместные операции.

2. Назначение четвертого адреса в четырехадресной команде.

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

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

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

  4. Основные преимущества одноадресной системы команд.

  5. Причины введения в состав процессора РОНов.

  6. Адресация РОНов в командах.

  7. Понятие типов команд: регистр-регистр и регистр-память.