Под командой понимают совокупность сведений, необходимых процессору для выполнения определенного действия в процессе выполнения программы. Множество команд конкретного микропроцессора образуют его систему команд.
Операнды в командах микропроцессора представляются в самой простейшей форме в виде цифровых слов, исходные операнды и результаты выполнения операций хранятся в конкретных регистрах или ячейках памяти. Каждая команда выполняет какое-то элементарнейшее действие, в котором участвуют структурные элементы микропроцессора. Нельзя написать программу, не зная структуру микропроцессора, – структура микропроцессора и набор его команд (возможных действий) жестко связаны между собой. Из-за этой жесткой связи разные микропроцессоры могут иметь различные системы команд.
Вместе с тем, из-за того, что общие подходы к структурной организации различных микропроцессоров все же одни и те же, наборы их команд весьма сходны. В этом смысле без учета конкретных особенностей каждого микропроцессора говорят об общем языке их программирования – Ассемблере.
Ассемблер это язык программирования самого низкого уровня. При работе со сложными микропроцессорными системами, например, с персональными компьютерами, чаще всего используются языки высокого уровня – Паскаль, Бейсик и др. Однако следует иметь в виду, что прежде чем программа, написанная на этих языках будет выполняться, она сначала должна быть преобразована в форму «понятную» центральному узлу компьютера – микропроцессору, в форму, интерпретируемую командами языка ассемблера.
Выбор системы команд является сложнейшей и важнейшей задачей проектирования микропроцессора, т. к. набор команд определяет область и эффективность его применения. Теоретически ограничений на число команд микропроцессора нет – каждый дополнительный бит, отводимый под код операций, удваивает число возможных команд. Однако, как показывает практика программирования, при реализации обширной системы команд программисты начинают пользоваться только ее некоторым подмножеством – чем сложнее команда, тем более вероятно, что ее действия можно интерпретировать группой более простых команд. Кроме того, при формировании набора команд возникает дилемма: с одной стороны, чем сложнее команда, тем быстрее выполняется программа из-за сокращения числа обращений к внешней памяти, с другой стороны сложная команда требует большего времени обработки внутри микропроцессора.
Важной характеристикой команды является ее формат, определяющий длину команды и состав элементов, из которых она состоит. Обязательным элементом команды является код операции, определяющий выполняемое над операндами действие. Другим обязательным элементом является ее адресная часть, которая тем или иным образом показывает, где находятся операнды. Это может осуществляться указанием адреса ячейки памяти, регистра общего назначения и т. д. Команда может состоять из одного, двух или трех байтов, последовательно расположенных в ПЗУ. В двухбайтной команде второй байт почти всегда определяет собой непосредственные данные, с которыми должна оперировать команда. В трехбайтной команде – второй и третий байт всегда определяют, соответственно, младший и старший байт шестнадцатиразрядного адреса, по которому осуществляется пересылка данных. Примеры форматов команд будут приведены далее при конкретном рассмотрении некоторых МП.
Классифицируя команды, легче всего их разделить на группы по функциональному признаку. Хотя в целом системы команд различных микропроцессоров могут существенно отличаться друг от друга, обычно выделяют пять основных групп команд:
1. Группа команд пересылки выполняет операции обмена данными между регистрами или между регистрами и памятью.
2. Группа команд арифметических операции выполняет операции сложения, вычитания, инкрементирования или декрементирования данных в регистрах или ячейках памяти.
3. Группа команд логических операций выполняет операции И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, сравнения, сдвига или дополнения данных в регистрах или ячейках памяти.
4. Группа команд ветвления выполняет операции условного и безусловного переходов по программе, условного и безусловного вызовов подпрограммы, а также условного и безусловного возвратов из подпрограммы.
5. Группа команд управления и операций со стеком и УВВ выполняет операции ввода-вывода, операции со стеком, с прерываниями, определяют различные режимы работы микропроцессора и т. д.
При выполнении ряда команд устанавливаются и хранятся некоторые признаки их выполнения, эти признаки учитывают при выполнении своих действий другие команды.
Любой из микропроцессоров оперирует, по крайней мере, с пятью признаками состояния: НУЛЬ (Zero), ЗНАК (Sign), ПАРИТЕТ (Parity). ПЕРЕНОС (Carry), ВСПОМОГАТЕЛЬНЫЙ ПЕРЕНОС (Auxiliary Carry), каждый из которых занимает 1 бит регистра признаков. Если признак имеет место, то соответствующий ему бит, установлен в состояние единицы; если признак отсутствует, то соответствующий ему бит, установлен в состояние логического нуля.
Если не рассматривать все возможные случаи, при которых команды изменяют содержимое регистра признаков, признаки формируются следующим образом:
НОЛЬ: если результат выполнения команды нулевой, то признак устанавливается в 1, в противном случае в 0.
ЗНАК: если старший значащий бит результата операции имеет значение 1, то признак устанавливается в 1, в противном случае в 0.
ПАРИТЕТ: если сумма по модулю 2 всех разрядов результата операции равна нулю (если число единиц в результате четное), то признак устанавливается в 1, в противном случае (если число единиц в результате нечетное) в 0.
ПЕРЕНОС: если в результате выполнения команды из старшего разряда возникает перенос (при суммировании) или заем (при вычитании или сравнении), то признак устанавливается в 1, в противном случае в 0.
ВСПОМОГАТЕЛЬНЫЙ ПЕРЕНОС: если в результате выполнения операции возникает перенос из разряда 3 в разряд 4, то признак устанавливается в 1, в противном случае в 0. Этот признак возникает при выполнении операций сложения, вычитания, инкрементирования, декрементирования, сравнения и логических операций, но используется только по команде DAA (десятичная коррекция) при выполнении операций сложения и инкрементирования десятичных двоично-кодированных чисел.
В зависимости от системы команд конкретного микропроцессора перечисленный набор признаков может дополняться другими.