Скачиваний:
518
Добавлен:
16.04.2015
Размер:
3.42 Mб
Скачать

1.5.2. Система команд

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

Полную совокупность всех операций, реализуемых в МК и отражающих его возможности, называют системой команд.

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

  • команды пересылок, обеспечивающие обмен данными между регистрами и ячейками памяти;

  • команды арифметических операций;

  • команды, реализующие логические операции и операции сдвига;

  • команды передачи управления, по которым производится обращение к подпрограммам, выполняются условные и безусловные переходы;

  • команды операций над битами.

В данном разделе, дающем общее понятие о системе команд, дано описание только основных команд, наиболее часто встречающихся в МК. Естественно, что у МК различных семейств могут быть и другие команды, расширяющие рассматриваемый нами набор команд каждой группы, или даже не относящиеся к ним, и их изучение нужно продолжить после выбора конкретного МК.

Команды пересылки данных предназначены для передачи данных между ячейками памяти или регистрами МК без изменения этих данных. Фактически они определяют операцию копирования данных из источника в приемник, причем содержимое источника, как правило, сохраняется.

К этой же группе команд относятся команды занесения и извлечения информации из стека, а также команды обмена информацией между двумя половинами одного регистра.

Следующие две группы являются командами обработки данных и выполняют операции преобразования данных в АЛУ. По числу используемых операндов их можно разделить на одно- и двуместные операции. Команды данных групп формируют признаки результатов: знак результата или его нулевое значение, перенос из старшего разряда, переполнение результата и др.

Команды арифметических операций, как и следует из их названия, предназначены для выполнения арифметических действий сложения, вычитания, умножения и деления. Сюда же можно отнести одноместные команды инкремента (прибавление единицы) и декремента (вычитание единицы). Естественно, что команды инкремента и декремента легко можно заменить командами суммирования с единицей или вычитания единицы, но их вводят в систему команд большинства МК, поскольку они выполняются гораздо быстрее, чем суммирование и вычитание.

Логические команды рассматривают каждый операнд не как число, а как набор отдельных битов и выполняют над ними следующие побитовые логические операции: И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ.

В практике программирования логические операции большей частью используются для решения следующих задач:

  • операция И используется для принудительной очистки заданных битов одного из операндов, для чего во втором операнде задается так называемая маска, в которой разряды, требующие очистки, установлены в нуль;

  • операция ИЛИ применяется для принудительной установки заданных битов одного из операндов, при этом во втором операнде задается маска, в которой разряды, подлежащие установке в единицу, равны единице;

  • операция ИСКЛЮЧАЮЩЕЕ ИЛИ используется для инверсии заданных битов одного из операндов и для этого во втором операнде задается маска, в которой биты, подлежащие инверсии, установлены в единицу.

Команды сдвигов предназначены для побитного сдвига кода операнда и могут быть разделены по следующим признакам:

  • направление сдвига (влево или вправо);

  • тип сдвига (арифметический, логический или циклический).

В соответствии с этими признаками наиболее распространенные операции сдвига представлены в табл. 1.1.

Одно из часто используемых применений команд сдвига – быстрое умножение и деление целых чисел на степени двойки.

Логический сдвиг байта влево на n разрядов (с заполнением освобождающихся справа разрядов нулями) эквивалентен его умножению на 2 в степени n, логический сдвиг вправо – целочисленному делению на ту же величину (при этом выдвигаемые младшие разряды содержат остаток от деления).

Нетрудно видеть, что деление на степень двойки при помощи логического сдвига вправо корректно работает только для беззнаковых или положительных чисел. Для исключения несоответствия введена команда арифметического сдвига вправо, при котором значение старшего знакового разряда байта сохраняется. Команды арифметического и логического сдвигов влево одинаковы и, по сути, являются одной командой с двумя разными названиями.

Циклические сдвиги позволяют сдвигать биты кода операнда по кругу с заполнением освобождающихся разрядов выдвигаемыми с другой стороны разрядами. При циклических сдвигах с переносом в кольцо сдвига входит флаг переноса C слова состояния программы.

Команды передачи управления используются для изменения естественного последовательного порядка выполнения команд в программе.

Таблица 1.1

Тип сдвига

Направление

Пояснение

Арифметический

Влево

Вправо

Логический

Влево

Вправо

Циклический

Влево

Вправо

Циклический

через перенос

Влево

Вправо

Эти команды записывают в счетчик команд новое значение, вызывая не выполнение следующей по порядку команды, а переход к выполнению команды, адрес которой задан условием перехода. Они включают в себя команды условного и безусловного перехода, а также команды вызова подпрограмм и возврата по окончании их выполнения.

Команды безусловных переходов вызывают переход на новый адрес вне зависимости от каких-либо условий. В качестве операнда в них используется адрес команды, на которую необходимо перейти для дальнейшего выполнения программы.

Команды условных переходов вызывают переход только при выполнении заданного условия. В момент проверки условия счетчик команд содержит адрес следующей за командой перехода команды. Если условие перехода, заданное в команде, выполняется, то производится загрузка в счетчик команд адреса перехода и выполнение команды по этому адресу. В противном случае процессорное ядро выбирает и выполняет следующую по порядку команду.

Команда вызова подпрограммы осуществляет безусловный переход по адресу входа в подпрограмму (адресу ее первой команды). Отличием ее от обычной команды безусловного перехода является то, что первым действием при ее выполнении является автоматическое сохранение текущего значения счетчика команд (адрес возврата). Для возврата из подпрограммы используется специальная команда возврата, которая извлекает из стека сохраненный адрес возврата и записывает его в счетчик команд, обеспечивая тем самым продолжение выполнения основной программы.

Для реализации возможности не группового, а независимого управления отдельными битами регистров в большинстве МК предусмотрен набор команд работы с битами. Поскольку в этот набор включены команды очистки, установки и пересылки битов, логические команды над отдельными битами, команды условных переходов по состоянию бита, то его часто называют булевым, или битовым, процессором. Наличие команд битового процессора позволяет существенно сократить объем кода управляющих программ и время их выполнения.

Соседние файлы в папке Микроконтроллеры