Характеристика системы команд процессора
Система команд - это набор допустимых для данного процессора управляющих кодов и способов адресации данных. Система команд жестко связана с конкретным типом процессора, поскольку определяется аппаратной структурой блока дешифрации команд, и обычно не обладает переносимостью на другие типы процессоров (хотя может иметь место совместимость “снизу-вверх” в рамках серии процессоров, как, например, в серии i80x86 ).
С физической точки зрения код команды ничем не отличается от обычных данных в двоичном коде, размещенных в памяти вычислителя. Конкретный двоичный код воспринимается и обрабатывается процессором как команда в том случае, когда он попадает в процессор в фазе чтения кода команды.
С логической точки зрения в двоичном коде команды существуют группы разрядов –поля – с различным функциональным назначением (рис. 3.3).
Рис. 3.3 Типовая структура формата команды:
1 - поле кода операции (КОП) объемом 1 или 2 байта;
2 - поле адресной части команды (АЧ) объемом от 1 до 4 байт.
На рис.3.3 показаны два основных поля в формате команды:
КОП - код операции - двоичный код, однозначно указывающий процессору на выполнение конкретных действий (пересылка, сложение и т.п.), и определяющий при этом форму задания адресов операндов;
АЧ- адресная часть - двоичное число, которое может представлять собой адрес (адреса) операндов, значение операнда, адрес следующей команды (адрес перехода, передачи управления ). Следовательно, формат команды – это совокупность таких ее характеристик, как количество, размер и назначение полей.
Язык программирования, максимально приближенный к системе команд конкретного микропроцессора – это Ассемблер. В этом языке коду каждой команды МП поставлена в соответствие определенная мнемоника – краткое буквенное название команды, например:
Пересылка данных – MOV (от англ. move)
Сложение – ADD
Переход по программе – JMP (от англ. jump) и т.д.
(!) Вспомнить примеры команд из лабораторных работ
Для программиста система команд представляется как минимально необходимый набор команд для реализации вычислений и управления ходом вычислительного процесса. В систему команд традиционно входят такие группы:
· пересылка данных (регистр-регистр, регистр-память, память-регистр, специфические команды типа память-память);все команды пересылки выполняют, по сути, копирование данных из ячейки-источника в ячейку-приемник;
· арифметические операции (+, –, *, : );
· логические операции (and, or, xor, not) и операции сдвига;
· ввод-вывод – специфические команды для передачи данных между процессором и устройствами ввода-вывода, размещенными в адресном пространстве ввода-вывода;
· передача управления – при выполнении такой команды процессор записывает в счетчик команд PC адрес следующей команды, взятый из адресной части текущей команды;
· специальные – останов, сброс, управление прерываниями, управление режимом пониженного энергопотребления и т.п.
Способ адресации – это способ получения процессором адреса операнда или перехода на основании информации из адресной части команды. Различают следующие основные способы адресации:
· прямая – адрес операнда или перехода содержится в АЧ команды;
· непосредственная – в АЧ команды содержится значение операнда;
· регистровая – в коде команды содержится указание на один или два регистра процессора, являющихся источниками операндов или приемником результата;
· косвенная регистровая – в коде команды содержится указание на какой-либо регистр процессора, содержимое которого при выполнении команды интерпретируется процессором как адрес ячейки памяти, содержащей операнд;
· косвенная базовая (иногда – индексная) – адрес операнда формируется (вычисляется) процессором в ходе выполнения команды как сумма содержимого одного из регистров и смещения (числа), задаваемого в команде, либо как сумма содержимого двух регистров. Таким образом, базовая или индексная формы адресации также являются разновидностью косвенной адресации.
Регистры, которые можно использовать для реализации косвенной адресации, часто называют указательнымирегистрами: в самом деле, они как бы “указывают” на ту ячейку памяти, в которой содержится операнд. Использование косвенной адресации более предпочтительно, поскольку такой подход позволяет создавать универсальные, легко перенастраиваемые (используется термин «переносимые»), и позиционно независимые программы. Применение прямой адресации “привязывает” программу к конкретным ячейкам памяти, и при этом резко снижается возможность ее использования в различных проектах. Важнейшая особенность косвенной адресации заключается в том, что адрес операнда должен формироваться в процессе выполнения программы (в то время, как в случае использования прямой адресации адреса всех операндов должны быть определены и указаны при написания текста программы).
Реализация основных способов адресации схематично показана на рис. 3.4.
(!) Вспомнить примеры команд для различных способов адресации
из лабораторных работ
Разновидностью косвенной адресации является стековая адресация с использованием содержимого регистра SP. При этом в процессе доступа к данным выполняется автоуменьшение или автоувеличение содержимого регистра SP. Подробнее стековая адресация будет рассмотрена далее.
Для обеспечения переносимости программ также используют относительнуюадресацию в командах передачи управления. При этом в адресной части команды содержится не абсолютный адрес перехода, а только смещение в байтах от текущего значения счетчика команд до адреса требуемой команды. Полный адрес перехода вычисляется процессором в ходе выполнения команды. Применение относительной адресации позволяет уменьшить объем программы.
Рис. 3.4. Схемы реализации основных способов адресации данных