Перейти к содержимому

Что включает в себя система команд процессора

  • автор:

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

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

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

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

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

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

5. Команды переходов.

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

Именно поэтому в данной лекции рассмотрены основные типы команд, имеющиеся у большинства процессоров, и особенности их применения.

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

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

— команды пересылки данных;

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

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

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

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

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

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

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

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

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

Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (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 и совместимых с ним).

Основные команды процессора

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

· команды пересылки данных;

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

· логические команды;

· команды переходов.

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

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

Логические команды производят над операндами логические операции, например, логическое И, логическое ИЛИ, исключающее ИЛИ, очистку, инверсию.

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

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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Базовая система команд микропроцессора

Базовую систему команд микропроцессора можно условно разделить на несколько групп по функциональному назначению:

Кроме базовой системы команд микропроцессора существуют также команды расширений:

  • X87 – расширение, содержащее команды математического сопроцессора (работа с вещественными числами)
  • MMX – расширение, содержащее команды для кодирования/декодирования потоковых аудио/видео данных;
  • SSE – расширение включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных;
  • SSE2 – модификация SSE, содержит инструкции для потоковой обработки целочисленных данных, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше;
  • SSE3, SSE4 – содержат дополнительные инструкции расширения SSE.

В таблице команд приняты следующие обозначения:
r – регистр
m – ячейка памяти
c – константа
8, 16, 32 – размер в битах
На все базовые команды процессора накладываются следующие ограничения:

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

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

Основной командой передачи данных является команда MOV , осуществляющая операцию присваивания:

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

Команда Операнды Пояснение Описание
MOV r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8,c8
r(m)16,c16
r(m)32,c32
r(m)8=r8
r(m)16=r16
r(m)32=r32
r8=r(m)8
r16=r(m)16
r32=r(m)32
r(m)8=с8
r(m)16=с16
r(m)32=с32
Пересылка операндов
XCHG r(m)8, r8
r8, r(m)8
r(m)16,r16
r16, r(m)16
r(m)32, r32
r32, r(m)32
r(m)8 ↔r8
r8 ↔r(m)8
r(m)16↔r16
r16 ↔r(m)16
r(m)32↔r32
r32 ↔r(m)32
Обмен операндов
BSWAP r32 TEMP ← r32
r32[7..0]←TEMP[31..24]
r32[15..8]←TEMP[23..16]
r32[23..16]←TEMP[15..8]
r32[31..24]←TEMP[7..0]
Перестановка байтов из порядка «младший – стар­ший» в порядок «старший – млад­ший»
MOVSX r16, r(m)8
r32, r(m)8
r32, r(m)16
r16,r(m)8 DW ← DB
r32,r(m)8 DD ← DB
r32,r(m)16 DD ← DW
Пересылка с рас­ши­ре­ни­ем форма­та и дублирова­ни­ем знакового бита
MOVZX r16,r(m)8
r32,r/m8
r32,r/m16
r16,r(m)8 DW ← DB
r32,r(m)8 DD ← DB
r32,r(m)16 DD ← DW
Пересылка с рас­ши­ре­ни­ем форма­та и дублирова­ни­ем нулевого бита
XLATXLATB m8 AL=DS:[(E)BX+unsigned AL] Загрузить в AL байт из таблицы в сегменте данных, на начало которой указывает EBX (ВХ); начальное зна­чение AL игра­ет роль смещения
LEA r16, m
r32, m
r16=offset m
r32=offset m
Загрузка эффективного адреса
LDS r16,m16
r32,m16
DS:r=offset m Загрузить пару регистров из памя­ти
LSS SS:r=offset m
LES ES:r=offset m
LFS FS:r=offset m
LGS GS:r=offset m
Команды установки единичного бита

Проверяют условие состояния битов регистра EFLAGS и, если условие выполняется, то младший бит операнда устанавливается в 1, в противном случае в 0. Анализ битов производится аналогич­но условным перехо­дам.

Команда Операнды Пояснение
SETA
SETNBE
r(m)8 CF=0 и ZF=0
SETAE
SETNB
SETNC
CF=0
SETB
SETC
SETNAE
CF=1
SETBE
SETNA
CF=1 или ZF=1
SETE
SETZ
ZF=1
SETG
SETNLE
ZF=0 и SF=OF
SETGE
SETNL
SF=OF
SETL
SETNGE
SF!=OF
SETLE
SETNG
SF!=OF или ZF=1
SETNE
SETNZ
ZF=0
SETNO OF=0
SETNP
SETPO
PF=0
SETNS SF=0
SETO OF=1
SETP
SETPE
PF=1
SETS SF=1
Команды работы со стеком
Команда Операнды Пояснение Описание
PUSH r(m)32
r(m)16
c32
ESP=ESP-4; SS:ESP=r(m)32/c
SP=SP-2; SS:SP=r(m)16
Поместить операнд в вершину стека
POP r(m)32
r(m)16
r(m)32=SS:ESP; ESP=ESP+4
r(m)16=SS:SP; SP=SP+2;
Извлечь операнд из вершины стека
PUSHA
PUSHAD
r(m)32
r(m)16
Поместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
POPA
POPAD
Извлечь из стека содержимое и заполнить регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
PUSHF Поместить в вершину стека регистр EFLAGS
POPF Извлечь содержимое вершины стека и заполнить регистр EFLAGS
Команды ввода-вывода

Микропроцессор может передавать данные в порты ввода-вывода, которые поддерживаются аппаратно и используют соответствующие своим предназначениям линии ввода-вывода процессора. Аппаратное адресное пространство ввода-вывода процессора не является физическим адресным пространством памяти. Адресное пространство ввода-вывода состоит из 64Кбайт индивидуально адресуемых 8-битных портов ввода-вывода, имеющих адреса 0…FFFFh. Адреса 0F8h…0FFh являются резервными. Любые два последовательных 8-битных порта могут быть объединены в 16-битный порт, 4 последовательных 8-битных порта – в 32-битный порт.

Команда Операнды Пояснение Описание
IN AL,c8
AX,c8
EAX,c8
AL,DX
AX,DX
EAX,DX
AL= port byte
AX= port word
EAX= port dword
AL= [DX-port]
AX= [DX-port]
EAX= [DX-port]
Ввод из порта
OUT c8, AL
c8, AX
c8, EAX
DX, AL
DX, AX
DX, EAX
port byte=AL
port word=AX
port dword=EAX
[DX-port]=AL
[DX-port]=AX
[DX-port]=EAX
Вывод в порт
INSB
INSW
INSD
ES:(E)DI = [DX-port] Вводит данные из порта, адресуемого DX в ячейку памяти ES:[(E)DI]. После ввода 1, 2 или 4-байтного слова данных EDI/DI корректируется на 1,2,4. При наличии префикса REP процесс продолжается, пока EСХ>0
OUTSB
OUTSW
OUTSD
[DX-port]=DS:(E)SI Выводит данные из ячейки памяти, определяемой регистрами DS:[(E)SI], в порт, адрес которого находится в DX. После вывода данных производится коррекция указателя ESI/SI на 1,2 или 4
Команды целочисленной арифметики
Команда Операнды Пояснение Описание
ADD r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8=r(m)8+с8
r(m)16=r(m)16+с16
r(m)32=r(m)32+c32
r(m)8=r(m)8+r8
r(m)16=r(m)16+r16
r(m)32=r(m)32+r32
r8=r8+r(m)8
r16=r16+r(m)16
r32=r32+r(m)32
Сложение целых чисел
ADC Сложение целых чисел с учетом флага переноса CF
INC r(m)8
r(m)16
r(m)32
r/m8=r/m8±1
r(m)16=r(m)16±1
r(m)32=r(m)32±1
Увеличение на 1
DEC Уменьшение на 1
SUB r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8=r(m)8-с8
r(m)16=r(m)16-с16
r(m)32=r(m)32-c32
r(m)8=r(m)8-r8
r(m)16=r(m)16-r16
r(m)32=r(m)32-r32
r8=r8-r(m)8
r16=r16-r(m)16
r32=r32-r(m)32
Вычитание целых чисел
SBB Вычитание с учетом флага переноса CF
CMP r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8-с8
r(m)16-с16
r(m)32-c32
r(m)8-r8
r(m)16-r16
r(m)32-r32
r8-r(m)8
r16-r(m)16
r32-r(m)32
Сравнение целых чисел
По результату сравнения устанавливаются флаги
CF PF
AF ZF
SF OF
NEG r(m)8
r(m)16
r(m)32
r(m)8=-r(m)8
r(m)16=-r(m)16
r(m)32=-r(m)32
Изменение знака числа
MUL r(m)8
r(m)16
r(m)32
AX=AL*r(m)8
DX:AX=AX*r(m)16
EDX:EAX=EAX*r(m)32
Умножение без знака
IMUL r(m)8
r(m)16
r(m)32
r16,r(m)16
r32,r(m)32
r16,r(m)16,c
r32,r(m)32,c
r16,c
r32,c
AX=AL*r(m)8
DX:AX=AX*r(m)16
EDX:EAX=EAX*r(m)32
r16=r16*r(m)16
r32=r32*r(m)32
r16=r(m)16*c16
r32=r(m)32*c32
r16=r16*c16
r32=r32*c32
Умножение со знаком
DIV r(m)8
r(m)16
r(m)32
AL=AX/r(m)8, AH=mod
AX=DX:AX/r(m)16, DX=mod
EAX=EDX:EAX/r(m)32, EDX=mod
Деление без знака
IDIV Деление со знаком

Особого внимания среди рассмотренных команд целочисленной арифметики заслуживает команда CMP , которая вычитает второй операнд из первого и не сохраняет результат, а устанавливает биты OF, SF, ZF, AF, PF, CF регистра признаков EFLAGS в соответствии с результатом. Команда CMP чаще всего предшествует командам знакового или беззнакового условных переходов.

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

Выполнение логических операций описано здесь

Команда Операнды Пояснение Описание
AND r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8=r(m)8 Ф с8
r(m)16=r(m)16 Ф с16
r(m)32=r(m)32 Ф c32
r(m)8=r(m)8 Ф r8
r(m)16=r(m)16 Ф r16
r(m)32=r(m)32 Ф r32
r8=r8 Ф r(m)8
r16=r16 Ф r(m)16
r32=r32 Ф r(m)32
Логическое умножение (И), конъюнкция
OR Логическое сложение (ИЛИ), дизъюнкция
XOR Исключающее ИЛИ
NOT r(m)8
r(m)16
r(m)32
r(m)8=
Сдвиговые команды

Выполнение сдвиговых операций в языке Си рассмотрено здесь .

Команда Операнды Пояснение Описание
SHR r(m)8
r(m)8,CL
r(m)8,с
r(m)16
r(m)16,CL
r(m)16,c
r(m)32
r(m)32,CL
r(m)32,c
r(m)8 на 1 раздяд
r(m)8 на CL разрядов
r(m)8 на с разрядов
r(m)16 на 1 разряд
r(m)16 на CL разрядов
r(m)16 на c разрядов
r(m)32 на 1 разряд
r(m)32 на CL разрядов
r(m)32 на c разрядов
Логический сдвиг вправо
SAR Арифметический сдвиг вправо (старшие разряды заполняются значением знакового)
SHL
SAL
Логический (арифметический) сдвиг влево
ROR Циклический сдвиг вправо
ROL Циклический сдвиг влево
RСR Циклический сдвиг вправо через перенос
RCL Циклический сдвиг влево через перенос

Команды циклического сдвига

Команды циклического сдвига выполняются в соответствии со схемой

Команды коррекции двично-десятичных чисел

Команды коррекции двоично-десятичных чисел не имеют операндов и используют операнд по умолчанию, хранящийся в регистре AX (паре регистров AH:AL ).

Команды преобразования типов

Команды преобразования типов предназначены для корректного изменения размера операнда, заданного неявно в регистре-аккумуляторе ( EAX , AX , AL ). Непосредственно после аббревиатуры команды операнд не указывается.

Команда Пояснение Описание
CBW AX=(DW)AL 2 байта ← 1 байт
CWDE EAX=(DD)AX 4 байта ← 2 байта
CWD DX:AX=(DD)AX 4 байта ← 2 байта
CDQ EDX:EAX=(DQ)EAX 8 байт ← 4 байта
Команды управления флагами

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

Команда Пояснение Описание
CLC CF = 0 Сброс бита переноса
CLD DF=0 Сброс бита направления
CMC CF=!CF Инверсия бита переноса
STC CF=1 Установка бита переноса
STD DF=1 Установка бита направления
STI IF=1 Установка бита прерывания
Команды прерываний

Команды прерываний предназначены для управления программными прерываниями.
Прерывание – это, как правило, асинхронная остановка работы процессора, вызванная началом работы устройства ввода-вывода. Исключением являются синхронные прерывания, возникающие при определении некоторых предопределенных условий в процессе выполнения команды.
Когда поступает сигнал о прерывании, процессор останавливает выполнение текущей программы и переключается на выполнение обработчика прерывания, заранее записанного для каждого прерывания.
Архитектура IA-32 поддерживает 17 векторов аппаратных прерываний и 224 пользовательских.
Команда INT вызывает обработчик указанного операндом прерывания (константой). Операнд определяет номер вектора системного прерывания BIOS от 0 до 255, представленный в виде беззнакового 8-битного целого числа. При вызове обработчика прерывания в стеке сохраняются регистры EIP, CS и EFLAGS.
Прерывание по переполнению вызывается отдельной командой INTO и имеет вектор 04h.

Команда Пояснение Описание
INT с EIP → стек
CS → стек
EFLAGS → стек
переход к вектору c
Программное прерывание
INTO OF=1 Прерывание по переполнению
IRET EFLAGS ← стек
CS ← стек
EIP ← стек
возврат
Возврат из обработчика прерывания
Команды передачи управления
Команда Операнды Пояснение Описание
JMP метка
r(m)16
r(m)32
метка
адрес в r(m)16
адрес в r(m)32
Безусловный переход на адрес, указанный операндом

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

Команда Операнды Пояснение Описание
CALL метка
r(m)16
r(m)32
метка
адрес в r(m)16
адрес в r(m)32
Вызов процедуры, указанной операндом
RET
c16

Удаляет из стека c16 байт
Возврат из процедуры

Команды поддержки языков высокого уровня

Команда Операнды Пояснение Описание
ENTER c16, c8 PUSH EBP
MOV EBP, ESP
Подготовка стека при входе в процедуру. Константа с16 указывает количество байт, резервируемых в стеке для локальных идентификаторов, константа с8 определяет вложенность процедуры
LEAVE POP EBP Приведение стека в исходное состояние
BOUND r16, m16&16
r32, m32&32
m16<r16<m16&16
m32<r16<m32&32
Проверка индекса массива: сравнивает значение в регистре, заданном первым операндом с двумя значениями, расположенными последовательно в ячейке памяти, адресуемой вторым операндом.

Команды организации циклов — используют регистр ECX по умолчанию в качестве счетчика числа повторений цикла. Каждый раз при выполнении команды LOOPсс значение регистра ECX уменьшается на 1, а затем сравнивается с 0. Если ECX =0 , выполнение цикла заканчивается, и продолжает выполняться код программы, записанный после команды LOOPcc . Если ECX содержит ненулевое значение, то осуществляется переход по адресу операнда команды LOOPcc .

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *