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

Система команд процессора

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

Функциональная полнота — это достаточность системы команд для описания любого алгоритма. Требование функциональной полноты не является слиш­ком жестким. Доказано, что свойством функциональной полноты обладает система, включающая всего три команды (система Поста): присвоение О, присвоение 1, проверка на 0. Однако составление программ в такой системе команд крайне неэффективно.

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

Система команд процессора характеризуется тремя аспектами: форматами, способами адресации и системой операций.

Под форматом команды следует понимать длину команды, количество, раз­мер, положение, назначение и способ кодировки ее полей.

Команды, как и любая информация в ЭВМ, кодируются двоичными словами, которые должны содержать в себе следующие виды информации:

□ тип операции, которую следует реализовать в данной команде (КОП);

□ место в памяти, откуда следует взять первый операнд (А1);

□ место в памяти, откуда следует взять второй операнд (А2);

□ место в памяти, куда следует поместить результат (A3).

Каждому из этих видов информации соответствует своя часть двоичного сло­ва — поле, а совокупность полей (их длины, расположение в командном слове, способ кодирования информации) называется форматом команды. В свою очередь, некоторые поля команды могут делиться на подполя. Формат команды, поля которого перечислены выше, называетсятрехадресным (рис. 2.1, а).

. Форматы команд: а — трехадресный; б — двухадресный; в — одноадресный;

г — безадресный

Команды трехадресного формата занимают много места в памяти, в то же время далеко не всегда поля адресов используются в командах эффективно. [Действительно, наряду с двухместными операциями (сложение, деление, Конъюнкция и др.) встречаются и одноместные (инверсия, сдвиг, инкремент др.), для которых третий адрес не нужен. При выполнении цепочки вычис-ний часто результат предыдущей операции используется в качестве опе-да для следующей. Более того, нередко встречаются команды, для кото-операнды не определены (СТОП) или подразумеваются самим кодом раций (DAA, десятичная коррекция аккумулятора).

ому в системах команд реальных ЭВМ трехадресные команды встреча-я редко. Чаще используются двухадресные команды (рис. 2.1,6), в этом "ае в бинарных операциях результат помещается на место одного из опе-ов.

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

ьная система команд обычно имеет команды нескольких форматов, при-тип формата определяется в поле КОП.

12. Способы адресации

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

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

□ Прямая — в этом случае в адресном поле располагается адрес операнда. Разновидность — прямая регистровая адресация, адресующая не ячейку памяти, а РОН. Поле адреса регистра имеет в команде значительно мень­шую длину, чем поле адреса памяти.

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

□ Косвенная — в поле адреса команды располагается адрес ячейки памяти, в которой хранится адрес операнда ("адрес адреса"). Такой способ позволяет оперировать адресами как данными, что облегчает организацию циклов, обработку массивов данных и др. Его основной недостаток — потеря вре­мени на двойное обращение к памяти — сначала за адресом, потом — за операндом. Разновидность — косвенно-регистровая адресация, при кото­рой в поле команды размещается адрес РОН, хранящего адрес операнда. Этот способ, помимо преимущества обычной косвенной адресации, позво­ляет обращаться к большой памяти с помощью коротких команд и не тре­бует двойного обращения к памяти (обращение к регистру занимает го­раздо меньше времени, чем к памяти).

□ Относительная— адрес формируется как сумма двух слагаемых: базы, хранящейся в специальном регистре или в одном из РОН, и смещения, из­влекаемого из поля адреса команды. Этот способ позволяет сократить длину команды (смещение может быть укороченным, правда в этом слу­чае не вся память доступна в команде) и/или перемещать адресуемые массивы информации по памяти (изменяя базу). Разновидности— ин­дексная и базово-индексная адресации. Индексная адресация предполага­ет наличие индексного регистра вместо базового. При каждом обращении содержимое индексного регистра автоматически модифицируется (обычно увеличивается или уменьшается на 1). Базово-индексная адресация фор­мирует адрес операнда как сумму трех слагаемых: базы, индекса и сме­щения.

□ Безадресная — поле адреса в команде отсутствует, а адрес операнда или не имеет смысла для данной команды, или подразумевается по умолчанию. Часто безадресные команды подразумевают действия над содержимым аккумулятора. Характерно, что безадресные команды нельзя применить к другим регистрам или ячейкам памяти.

Одной из разновидностей безадресного обращения является использование т. н. магазинной памяти или стека. Обращение к такой памяти напоминает обращение с магазином стрелкового оружия. Имеется фиксированная ячейка, называемая верхушкой стека. При чтении слово извлекается из верхушки, а все остальное содержимое "поднимается вверх" подобно па­тронам в магазине, так что в верхушке оказывается следующее по порядку слово. Одно слово нельзя прочитать из стека дважды. При записи новое слово помещается в верхушку стека, а все остальное содержимое "опус­кается вниз" на одну позицию. Таким образом, слово, помещенное в стек первым, будет прочитано последним. Говорят, что стек поддерживает дисциплину LIFO — Last In First Out (последний пришел — первый ушел). Реже используется безадресная память типа очередь с дисциплиной FIFO — First In First Out (первый пришел — первый ушел).