Назад (Информатика).

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

Любая компьютерная программа представляет собой последовательность отдельных команд.

Команда - это описание операции, которую должен выполнить компьютер. Как правило, у команды есть свой двоичный код, исходные данные [операнды] и результат.

Например, у команды "сложить два числа" операндами являются слагаемые, а результатом - их сумма. А у команды "стоп" операндов нет, а результатом является прекращение работы программы.

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

LOD от Load [загрузить]
STO от Store [сохранить]
ADD от Add [сложить]
SUB от Subtract [вычесть]
JMP от Jump [перейти]
JZ от Jump if zero [перейти если ноль]
ROL от Rotate left [сдвинуть циклически влево]
ROR от Rotate right [сдвинуть циклически вправо]
HLT от Halt [остановить]

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

Команды передачи данных

К этой категории относятся те команды, при выполнении которых происходит перемещение данных из одного места в другое. Процедура выполнения команд передачи данных больше напоминает копирование информации с одного места в другое, а не обычное их перемещение. Для передачи данных между ЦП и основной памятью существуют специальные термины. Запрос на заполнение регистра содержимым ячейки памяти обычно называют командой загрузки [LOAD], а запрос на передачу содержимого регистра в ячейку основной памяти - командой сохранения [STORE].

Арифметические и логические команды

Арифметические и логические команды указывают блоку управления на необходимость запросить выполнение определенных действий арифметико-логического блока. Как следует из самого названия арифметико-логического блока, он также предусматривает выполнение группы операций, отличающихся от основных арифметических действий. К ним относятся обычные логические операции AND [И], OR [ИЛИ] и XOR [Исключающее ИЛИ]. В основном они используются для манипуляции отдельными битами некоторого регистра; при этом состояние остальных регистров остается неизменным. Другая группа операций, реализованная в большинстве типов арифметико-логических блоков, состоит из команд, позволяющих перемещать содержимое регистров влево или вправо в пределах самих этих регистров. Такие операции называются операциями сдвига [SHIFT] или вращения [ROTATE], в зависимости от того, что происходит с битами, выходящими при перемещении содержимого регистра за его пределы. При операции сдвига эти биты просто отбрасываются, а при операции вращения - биты, покидающие пределы регистра с одного конца, помещаются во вновь вставляемые позиции на другом конце регистра. Последняя операция называется также циклическим сдвигом.

Команды управления

Команды управления предназначены для управления ходом выполнения программы, а не обработки каких-либо данных. Данная категория включает много интересных команд, например группа команд перехода [JUMP] или ветвления [BRANCH]. Они используются для перенаправления управляющего блока на выполнение команды, отличной от той, которая является очередной в выполняемой последовательности. Команды перехода реализуются в двух вариантах: команды безусловного перехода и команды условного перехода. К первому варианту относится команда типа "Пропустите все команды до этапа 5", а ко второму - команда типа "Если полученное число равно 0, то перейдите к этапу 5". Разница между ними состоит в том, что при выполнении команды условного перехода изменение последовательности произойдет только при выполнении указанного условия.

Пример описания системы команд

Рассматриваемая гипотетическая машина имеет регистр команд, регистр адреса и аккумулятор. Длина регистра команд и регистра адреса равна одному байту, а длинна аккумулятора - двум байтам.

Память рассматриваемой машины состоит из 256 ячеек. Длина каждой ячейки равна двум байтам. Адрес любой ячейки памяти может быть представлен восьмибитовыми числами от 00000000 до 11111111 [в шестнадцатеричном представлении от 00 до FF].

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

КодОперандМнемоникаОписание
001XXLOD P Загрузка в аккумулятор двоичного кода числа из ячейки памяти с адресом P
002XXSTO P Сохранение двоичного кода числа, хранящегося в аккумуляторе, в ячейке памяти с адресом P
003XXADD P Суммирование двоичных кодов чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, с записью результата в аккумулятор
004XXSUB P Вычитание двоичного кода числа, хранящегося в ячейке памяти с адресом P, из содержимого аккумулятора с записью результата в аккумулятор
005XXOR P Выполнение поразрядной операции "ИЛИ" над двоичными кодами чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, и размещение результата в аккумуляторе
006XXAND P Выполнение поразрядной операции "И" над двоичными кодами чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, и размещение результата в аккумуляторе
007XXXOR P Выполнение поразрядной операции "Исключающее ИЛИ" над двоичными кодами чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, и размещение результата в аккумуляторе
00800ROL Выполнение операции циклического сдвига влево над двоичным кодом числа, хранящегося в аккумуляторе
00900ROR Выполнение операции циклического сдвига вправо над двоичным кодом числа, хранящегося в аккумуляторе
00AXXJMP P Выполняется переход к команде, размещенной в ячейке памяти по адресу P
00BXXJZ P Выполняется переход к команде, размещенной в ячейке памяти по адресу P, если двоичный код числа в аккумуляторе равен 0
00C00HLT Прекращение выполнения программы