Основы микропроцессорной техники

Раздел 3. Функционирование процессора


«Структура курса | Раздел 1 | Раздел 2 | Раздел 3 | Раздел 4 | Раздел 5 | Раздел 6 | Раздел 7 | Глава 8 | Дополнения

Раздел 3 - Страницы: «| 1 | 2 | 3 | 4 | 5

3.3. Система команд процессора

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

  • команды пересылки данных;
  • арифметические команды;
  • логические команды;
  • команды переходов.

Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник (Destination). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода / вывода. АЛУ в данном случае не используется.

Арифметические команды выполняют операции сложения, вычитания, умножения, деления, увеличение на единицу (инкементування), уменьшение на единицу (декрементування) и т.д. Этим командам нужно один или два входных операнды. Формируют команды один выходной операнд.

Логические команды выполняют над операндами логические операции, например, логическое И, логическое ИЛИ, операцию "неравнозначности", очистки, инверсию, разнообразные сдвиги (вправо, влево, арифметический сдвиг, циклический сдвиг. Этим командам, как и арифметическим, нужно один или два входных операнды, и формируют они один выходной операнд.

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

Согласно результата каждой выполненной команды устанавливаются или очищаются биты регистра состояния процессора (PSW). Но надо помнить, что не все команды изменяют все имеющиеся в PSW флаги. Это определяется особенностями каждого конкретного процессора.

В разных процессоров системы команд существенно отличаются, но в своей основе они очень похожи. Количество команд у процессоров также является разной. Например, у упоминавшегося уже процессора МС68000 всего 61 команда, а у процессора 8086 - 133 команды. В современных мощных процессоров количество команд достигает нескольких сотен. В то же время существуют процессоры с сокращенным набором команд (так называемые RISC-процессоры), в которых за счет максимального сокращения количества команд достигается увеличение эффективности и скорости их выполнения.

Рассмотрим теперь особенности четырех выделенных групп команд процессора более подробно.

3.3.1. Команды переслкы данных

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

  • загрузка (запись) содержания во внутренние регистры процессора;
  • сохранение в памяти содержимого внутренних регистров процессора;
  • копирования содержимого из одной области памяти в другую;
  • запись в устройства ввода / вывода и чтения с устройств ввода / вывода.

В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок - MOVB) но с разными методами адресации операндов.

В других процессорах кроме команды MOV существует еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров - разные команды (их обозначения обычно строятся с использованием слова LOAD - загрузки). Часто выделяются специальные команды для сохранения в стеке и для исключения из стека (PUSH - сохранить в стеке, POP - вытащить из стека). Эти команды выполняют пересылку с автоинкрементным и с автодекрементною адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде).

Иногда в систему команд вводится специальная команда MOVS для строчной (или цепного) пересылка данных (например, в процессоре 8086). Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов (MOVSB), т.е. инициирует не один цикл обмена магистралью, а несколько. При этом адрес памяти, с которой происходит взаимодействие, увеличивается на 1 или на 2 после каждого обращения или уменьшается на 1 или на 2 после каждого обращения. То есть в неявном виде применяется автоинкрементным или автодекрементна адресация.

В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода / вывода. Команда IN используется для ввода (чтения) информации с устройства ввода / вывода, а команда OUT используется для вывода (записи) в устройство ввода / вывода. Обмен информацией в этом случае происходит между регистром-аккумулятором и устройством ввода / вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлено команды строчного (цепного) ввода (команда INS) и строчного вывода (команда OUTS). Эти команды позволяют пересылать целый массив (строка) данных из памяти в устройство ввода / вывода (OUTS) или с устройства ввода / вывода в память (INS). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS).

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

3.3.2. Арифметические команды

Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:

  • команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);
  • команды операций с плавающей запятой (сложение, вычитание, умножение, деление);
  • команды очистки;
  • команды инкремент и декремент;
  • команда сравнения.

Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда добавления (ADD) вычисляет сумму двух кодов. Команда вычитания (SUB) вычисляет разность двух кодов. Команда умножения (MUL) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления (DIV) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака.

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

Команды очистки (CLR) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется.

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

Наконец, команда сравнения (сказывается CMP) предназначена для сравнения двух входных операндов. По сути, она вычисляет разницу этих двух операндов, но выходного операнда не формирует, а всего лишь меняет биты в регистре состояния процессора (PSW) за результатом этого вычитание. Следующая по команде сравнения команда (в основном это команда перехода) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений (о командах перехода речь пойдет в разделе 3.3.4). В некоторых процессорах предусмотрены команды цепного сравнения двух последовательностей операндов, находящихся в памяти (например, в процессоре 8086 и совместимых с ним).


«Структура курса Раздел 3 - Страницы:« | 1 | 2 | 3 | 4 | 5 | »