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

Расширения системы команд по мере развития микропроцессорной техники

Рейтинг:   / 0

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

  1. В специализированных графических процессорах используются специальные команды, облегчающие выполнение операций линейной интерполяции, которые очень часто используются при преобразованиях графических данных.
  2. В специализированных графических процессорах могут быть команды, выполняющие достаточно сложные операции с группами простых элементов данных, например, с двумерными блоками в памяти (это фрагменты изображений). Более подробно этот вопрос затронем, обсуждая графические данные.
  3. В процессорах Pentium MMX реализована группа новых команд. Каждая из команд MMX способна выполнять одно и то же действие одновременно над несколькими "короткими" операндами, расположенными в "длинных" MMX-регистрах. Здесь реализована идеология SIMD (“Single Instruction - Multiple Data” - "одна команда -несколько элементов данных”), позволяющая получать несколько результатов при выполнении каждой MMX-команды. Это частный случай более обширной группы команд, упомянутой в предыдущем пункте.
  4. В разновидности процессоров, известной под названием "цифровые сигнальные процессоры" (DSP - Digital Signal Processors) часто реализованы команды, облегчающие вычисление "цифровой свертки" Y=Sum(Xi*Ki). Операция цифровой свертки очень часто используется в алгоритмах обработки сигналов. Сигнальные процессоры нередко имеют также своеобразную архитектуру, программную модель, хорошо приспособленную для действий с отсчетами сигналов.
  5. В однокристальных микроконтроллерах M68HC12 фирмы Motorola реализованы специальные команды, облегчающие программирование алгоритмов "нечеткой логики" (Fuzzy Logic).

Команды ввода - вывода (обмена с периферийными устройствами)

Рейтинг:   / 0

Фактически команды ввода-вывода - это тоже команды пересылки. Основное отличие между пересылками "регистр-память" и пересылками из/в периферийное устройство ПУ состоит в том, что скорость функционирования ПУ может существенно отличаться от скорости работы процессора и поэтому ПУ далеко не всегда бывает готово к обмену.

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

Варианты структуры взаимодействия процессора и УВВ:

  • а) УВВ имеют свою систему нумерации (адресации), и в системе команд есть отдельные команды I/O, (как в IBM PC):
    IN - команда ввода из ВНУ;
    OUT - команда вывода на ВНУ.

В этом случае в формате команды УВВ предусматривается своя система адресации.

  • б) Обращение к УВВ такое же, как к памяти, часть адресов использована для ВНУ (ввод / вывод, отображенный на память).

Достоинства: можно использовать для обмена с ВНУ всю систему команд, в том числе, команды обработки, что сокращает программу.

Недостатки:

  • команда ввода/вывода длиннее и дольше выполняется, чем в случае а);
  • сложнее устройство декодирования адреса в ВНУ.

Команды обработки

Рейтинг:   / 0

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

Минимальный набор арифметических команд очень мал. Это (например):

  • сложение - ADD;
  • инвертирование - COM / NOT (такая ЭВМ действительно была: PDP-8 (DEC));
  • прибавление "единицы" - INC.

Все остальное можно сделать, комбинируя эти команды.

Однако в современном микропроцессоре арифметических команд обычно больше:

  • SUB - вычитание;
  • CMP - сравнение операндов. Эта команда выполняет вычитание операндов, по результату изменяет флаги, после чего результат теряется (команда предназначена для проверки условий);
  • NEG - смена знака операнда;
  • ASR, ASL, SAR, SAL - арифметические сдвиги операнда (Arithmetic Shift to Right/Left);
  • INC, DEC - увеличение или уменьшение операнда на 1;
  • ADC, SBC/SBB - операции с переносом C (carry-bit) - для выполнения действий с повышенной точностью, когда операнд занимает несколько слов;
  • SXT, SEX, CBW, CWD, CDQ - расширение знака (преобразование в формат с повышенной разрядностью);
  • MUL, DIV - умножение и деление беззнаковых и знаковых чисел.
  • Набор операций с плавающей точкой, включающий обычно значительное количество команд (несколько десятков), в которые часто входят команды вычисления элементарных функций - Sin, Cos, Log, Exp и т.п.

Логические команды

Логические команды - это команды побитовой обработки.

  • OR - поразрядное логическое сложение. Фактически это команда побитовой установки (т.е. записи "единицы" в заданные биты операнда). Пример:
    or opr, 0Ch ;Установка в 1 битов в позициях 2 и 3 в операнде al

Если исходно в al содержался, например, операнд  1101 10012, то после выполнения команды в al будет содержаться: 1101 1101 (отмечены установленные биты). Второй операнд - обычно константа, задавая которую, программист указывает, какие биты следует установить (он на жаргоне программистов носит название "маска").

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

  • AND - поразрядное логическое умножение. Это команда побитового сброса (записи в заданные биты "нулей"). Пример:
    and bh, 0Fh ;Сброс старшей тетрады (старшего ниббла) в байтовом операнде.

Если, например, исходно в регистре bh содержался операнд 1101 10012, то после выполнения команды в регистре bh будет содержаться 0000 10012 (отмечены очищенные биты). Действие команды AND можно описать следующим образом: команда безусловно сбрасывает в 0 биты в тех позициях первого операнда, которые отмечены "нулями" в маске, оставляя прочие биты первого операнда неизменными.

  • XOR - поразрядное исключающее ИЛИ, eXclusive OR (иногда на русском эту операцию называют "ЛИБО"). Эта двухоперандная команда фактически выполняет выборочное инвертирование битов. Например:
    xor cl,0F0h ;Инвертирование битов старшей тетрады

Если исходно в cl содержалось 1101 10012, то после выполнения команды в cl будет содержаться 0010 10012 (отмечены проинвертированные биты). Действие команды xor можно описать так: команда инвертирует в первом операнде биты в позициях, которые отмечены в маске "единицами", оставляя прочие биты неизменными.

  • TEST - проверка битовых полей. Команда чаще всего двухоперандная, выполняет поразрядное логическое умножение операндов и по результату операции изменяет состояние флагов "нуля" zf и "знака" sf, после чего результат операции теряется.
  • NOT, COM - инвертирование операнда (замена значения каждого бита на противоположное). Это однооперандная команда.

Сдвиги

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

  1. ROR, ROL, RCR, RCL - циклические сдвиги. При циклическом сдвиге то, что выходит за границу разрядной сетки, помещается в освобождающуюся позицию на другом конце операнда.
  2. ASR, ASL/SAR, SAL - арифметические сдвиги. Эта разновидность сдвига осуществляется таким образом, что результат оказывается эквивалентен умножению (при сдвиге влево) или делению (при сдвиге вправо) операнда на основание системы счисления, т.е. на 2. Сравните: если "сдвинуть" цифры в десятичном числе на разряд влево, результат будет эквивалентен исходному числу, умноженному на 10 (12 и 120 после сдвига). Более подробно особенности арифметического сдвига обсуждаются при рассмотрении системы команд процессоров х86.
  3. SHL, SHR - логические сдвиги. При выполнении логических сдвигов биты, "выдвигаемые" из разрядной сетки, теряются, а противоположный конец операнда заполняется "нулями".

Каждая из упомянутых разновидностей может также иметь варианты.

Например, в составе системы команд х86 различают пять видов сдвигов.

Проверки и передача управления

Рейтинг:   / 0

Эти команды позволяют реализовать конструкции:

IF ... THEN ... ELSE
REPEAT ... UNTIL
WHILE ... DO
FOR ... DO
GOTO ...

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

  • равенство нулю;
  • знак;
  • перенос;
  • арифметическое переполнение;
  • перенос между тетрадами и др......

Команды проверки

  • TEST - проверка отдельных битов (логическим умножением).
  • CMP - сравнение операндов.

Кроме того, признаки устанавливаются после выполнения многих команд. Обратите внимание на то, что нет единых правил поведения признаков. (В процессорах фирмы Motorola при пересылке флаги "нуля" и "знака" изменяются, а в процессорах Intel - нет).

Команды ветвления по условию

B** / J*** от слов ( branch / jump). Их может быть 10...30 штук. (например, BNE - переход, если не равно 0). Набор команд ветвления обсуждается при рассмотрении системы команд процессоров х86.

Адресация в командах ветвления может быть разного типа:

  • а) полный адрес перехода;
  • б) относительная (смещение);
  • в) пропуск команды.

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

Команда безусловной передачи управления

JMP Адресация делается такой, чтобы можно было "прыгнуть" в любое место программной памяти ("длинная" адресация).

Команда организации цикла

Позволяет организовать в программе структуры FOR ... DO более простым способом, чем с помощью команд ветвления.

LOOP*

Команда обращения к подпрограмме (вызов процедуры)

JSR, JMS, CALL

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

При обращении / возврате надо обеспечить:

  • а) передачу управления в любое место памяти, поэтому "длинная" адресация;
  • б) возврат в то место, откуда был вызов (т.е. место вызова должно автоматически запоминаться);
  • в) запоминание промежуточных результатов, имеющихся к моменту вызова (содержимое регистров процессора, а, при рекурсивном вызове, процедуры, - надо запоминать и промежуточные результаты работы самой процедуры). Для запоминания чаще всего используется стек (участок ОЗУ или специальное ОЗУ со стековой адресацией). Часть вышеперечисленной информации запоминается автоматически при выполнении команды CALL, а сохранение оставшегося - дело программиста.

 

Команды пересылки

Рейтинг:   / 0

Пересылки общего назначения

Пересылки общего назначения MOV, L**, LD*, LOD* (от Load - загрузить), ST* (от Store - сохранить). Передают слово/байт данных из одной части ЭВМ в другую без изменения. Иногда в эту группу включают также и команды ввода-вывода для ЭВМ у которых область адресов внешних устройств включена в общее адресное пространство.

Пересылки из/в стек

Пересылки из/в стек: PUSH (втолкнуть), POP (вынуть). Обычно отличаются тем, что используют стековую адресацию (задаваемую неявно.

Пересылки двоичных слов

Пересылки двоичных слов, представляющих собой адреса операндов или части (компоненты) адресов. Для операций с адресами нередко в процессор вводят специальные команды. Это связано с тем, что разрядность адреса в процессоре не всегда совпадает с разрядностью АЛУ и регистров.

Пересылки между элементами вычислительного ядра

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

Яндекс.Метрика