Система команд центрального процессора
Любая компьютерная программа представляет собой последовательность отдельных команд.
Команда - это описание операции, которую должен выполнить компьютер. Как правило, у команды есть свой двоичный код, исходные данные [операнды] и результат.
Например, у команды "сложить два числа" операндами являются слагаемые, а результатом - их сумма. А у команды "стоп" операндов нет, а результатом является прекращение работы программы.
Для записи команды вместо двоичных кодов можно использовать восьмеричные или шестнадцатеричные коды, а также мнемоническое кодирование. В последнем случае каждая команда представляется последовательностью из двух, трех или четырех мнемонических символов. Большинство мнемонических кодов - это сокращения английских названий команд:
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].
Длина каждой машинной команды равна двум байтам. Первый байт содержит код операции, последний байт образует поле операндов. В приведенной ниже таблице перечислены и кратко описаны команды, показанные в шестнадцатеричном представлении. Буквы ХХ используются для указания в поле операндов длины шестнадцатеричных чисел, являющихся адресами ячеек памяти.
Код | Операнд | Мнемоника | Описание |
001 | XX | LOD P | Загрузка в аккумулятор двоичного кода числа из ячейки памяти с адресом P |
002 | XX | STO P | Сохранение двоичного кода числа, хранящегося в аккумуляторе, в ячейке памяти с адресом P |
003 | XX | ADD P | Суммирование двоичных кодов чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, с записью результата в аккумулятор |
004 | XX | SUB P | Вычитание двоичного кода числа, хранящегося в ячейке памяти с адресом P, из содержимого аккумулятора с записью результата в аккумулятор |
005 | XX | OR P | Выполнение поразрядной операции "ИЛИ" над двоичными кодами чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, и размещение результата в аккумуляторе |
006 | XX | AND P | Выполнение поразрядной операции "И" над двоичными кодами чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, и размещение результата в аккумуляторе |
007 | XX | XOR P | Выполнение поразрядной операции "Исключающее ИЛИ" над двоичными кодами чисел, хранящихся в аккумуляторе и ячейке памяти с адресом P, и размещение результата в аккумуляторе |
008 | 00 | ROL | Выполнение операции циклического сдвига влево над двоичным кодом числа, хранящегося в аккумуляторе |
009 | 00 | ROR | Выполнение операции циклического сдвига вправо над двоичным кодом числа, хранящегося в аккумуляторе |
00A | XX | JMP P | Выполняется переход к команде, размещенной в ячейке памяти по адресу P |
00B | XX | JZ P | Выполняется переход к команде, размещенной в ячейке памяти по адресу P, если двоичный код числа в аккумуляторе равен 0 |
00C | 00 | HLT | Прекращение выполнения программы |