Команды в алфавитном порядке
Addr
адрес памяти
Addr-high
первый байт адреса (старший)
Addr-low
левый (младший) байт адреса
Data
непосредственный операнд (8 бит при w=0 и 16 бит при w= 1)
Data-high
правый (старший) байт непосредственного операнда
Data-low
левый (младший) байт непосредственного операнда
Disp
смещение (относительный адрес)
Rеg
ссылка на регистр.
AAA
Коррекция ASCII-формата для сложения
Операция: Корректирует сумму двух ASCII-байтов в регистре AL. В случае, если правые четыре бита регистра AL имеют значение больше 9 или флаг AF установлен в 1, то команда AAA прибавляет к регистру АН единицу и устанавливает флаги AF и CF. Команда всегда очищает четыре левых бита в регистре AL.
Флаги: Команда воздействует на флаги AF и CF (флаги OF, PF, SF и ZF не определены).
Объектный код: 00110111 (без операндов).
AAD
Коррекция ASCII-формата для деления
Операция: Корректирует ASCII-величины для деления. Команда AAD используется перед делением неупакованных десятичных чисел в регистре AХ (удаляет тройки ASCII-кода). Эта команда корректирует делимое в двоичное значение в регистре AL для последующего двоичного деления. Затем умножает содержимое регистра AН на 10, прибавляет результат к содержимому регистра AL и очищает AН. Команда AAD не имеет операндов.
Флаги: Команда воздействует на флаги PF, CF, ZF (флаги AF CF и OF не определены).
Объектный код: |11010101|00001010|.
AAМ
Коррекция ASCII-формата для умножения
Операция: Команда AAM используется для коррекции результата умножения двух неупакованных десятичных чисел. Команда делит содержимое регистра AL на 10, записывает частное в регистр AН, а остаток в регистр AL.
Флаги: Команда воздействует на флаги PF, SF и ZF (флаги AF CF и OF не определены).
Объектный код: |11010100|00001010| (без операндов).
AAS
Коррекция ASCII-формата для вычитания
Операция: Корректирует разность двух ASCII-байтов в регистре AL. В случае, если первые четыре бита имеют значение больше 9 или флаг CF установлен в 1, то команда AAS вычитает 6 из регистра AL и 1 из регистра АН, флаги AF и CF при этом устанавливаются в 1. Команда всегда очищает левые четыре бита в регистре AL.
Флаги: Команда воздействует на флаги AF и CF (флаги OF PF SF и ZF не определены).
Объектный код: 00111111 (без операндов).
ADC
Сложение с переносом
Операция: Обычно используется при сложении многословных величин для учета бита переполнения в последующих фазах операции. В случае, если флаг CF установлен в 1, то команда ADC сначала прибавляет 1 к операнду 1. Команда всегда прибавляет операнд 2 к операнду 1, аналогично команде ADD.
Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
ADD
Сложение двоичных чисел
Операция: Прибавляет один байт или одно слово в памяти, регистре или непосредственно к содержимому регистра или прибавляет один байт или слово в регистре или непосредственно к памяти.
Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
AND
Логическое И
Операция: Команда выполняет поразрядную конъюнкцию (И) битов двух операндов. Операнды представляют собой одно- или двухбайтовые величины в регистре или памяти. Второй операнд может содержать непосредственные данные. Команда AND проверяет два операнда поразрядно. В случае, если два проверяемых бита равны 1, то в первом операнде устанавливается единичное значение бита, в других случаях — нулевое.
Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).
CALL
Вызов процедуры
Операция: Выполняет короткий или длинный вызов процедуры для связи подпрограмм. Для возврата из процедуры используется команда RET. Команда CALL уменьшает содержимое SP на 2 и заносит в стек адрес следующей команды (из IP), а затем устанавливает в регистре IP относительный адрес процедуры. Впоследствии команда RET использует значение в стеке для возврата. Существует четыре типа команды CALL для вызова внутри сегмента и между сегментами. Команда межсегментного вызова сначала уменьшает SP, заносит в стек адрес из регистра CS, а затем загружает в стек внутрисегментный указатель.
Флаги: Не меняются.
CBW
Преобразование байта в слово
Операция: Расширяет однобайтовое арифметическое значение в регистре AL до размеров слова. Команда CBW размножает знаковый бит (7) в регистре AL по всем Битам регистра АН.
Флаги: Не меняются.
Объектный код: 10011000 (без операндов).
CLC
Сброс флага переноса
Операция: Устанавливает значение флага переноса, равное 0, так что, например, команда ADC не прибавляет единичный бит. Команда CLC не имеет операндов.
Флаги: Команда воздействует на флаг CF (устанавливается в 0).
Объектный код: 11111000.
CLD
Сброс флага направления
Операция: Устанавливает значение флага направления, равное 0. В результате такие строковые операции, как CMPS или MOVS обрабатывают данные слева направо.
Флаги: Команда воздействует на флаг DF (устанавливается в 0).
Объектный код: 11111100 (без операндов).
CLI
Сброс флага прерывания
Операция: Запрещает маскируемые внешние прерывания по процессорной шине INTR посредством установки значения флага прерывания IF в 0.
Флаги: Команда воздействует на флаг IF (устанавливается в 0).
Объектный код: 11111010 (без операндов).
CMC
Переключение флага переноса
Операция: Инвертирует флаг CF, то есть, преобразует нулевое значение флага CF в единичное и наоборот.
Флаги: Команда воздействует на флаг CF (инвертируется).
Объектный код: 11110101 (без операндов).
CMP
Сравнение
Операция: Сравнивает содержимое двух полей данных. Фактически команда CMP вычитает второй операнд из первого, но содержимое полей не изменяет. Операнды должны иметь одинаковую длину: байт или слово. Команда CMP может сравнивать содержимое регистра, памяти или непосредственное значение с содержимым регистра; или содержимое регистра или непосредственное значение с содержимым памяти.
Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
CMPS/CMPSB/CMPSW
Сравнение строк
Операция: Сравнивают строки любой длины. Этим командам обычно предшествует префикс REPn, например REPE CMPSB. Команда CMPSB сравнивает память по байтам, а команда CMPSW — по словам. Первый операнд этих команд адресуется регистровой парой DS:SI, а второй — регистровой парой ES:DI. В случае, если флаг DF установлен в 0, то сравнение происходит слева направо, регистры SI и DI при этом увеличиваются после каждого сравнения. В случае, если флаг DF установлен в 1, то сравнение происходит справа налево, а регистры SI и DI при этом уменьшаются после каждого сравнения.
Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
Объектный код: 1010011w.
CWD
Преобразование слова в двойное слово
Операция: Расширяет арифметическое значение в регистре АХ до размеров двойного слова в регистровой паре DX:AX, дублируя при этом знаковый бит (15-й бит в регистре АХ) через регистр DX. Обычно используется для получения 32-битового делимого.
Флаги: Не меняются.
Объектный код: 10011001 (без операндов).
DAA
Десятичная коррекция для сложения
Операция: Корректирует результат сложения двух BCD (десятичных упакованных) элементов в регистре AL. В случае, если четыре правых бита имеют значение больше 9 или флаг AF установлен в 1, то команда DAA прибавляет 6 к регистру AL и устанавливает флаг AF. В случае, если регистр AL содержит значение больше, чем 9F, или флаг CF установлен в 1, то команда DAA прибавляет 60Н к регистру AL и устанавливает флаг CF.
Флаги: Команда воздействует на флаги AF. CF, PF, SF и 2F (флаг OF неопределен).
Объектный код: 00100111 (без операндов).
DAS
Десятичная коррекция для вычитания
Операция: Корректирует результат вычитания двух BCD (десятичных упакованных) чисел в регистре AL. В случае, если четыре правых бита имеют значение больше 9 или флаг AF установлен в 1, то команда DAS вычитает 60Н из регистра AL и устанавливает флаг CF.
Флаги: Команда воздействует на флаги AF, CF, PF, SF и ZF.
Объектный код: 00101111 (без операндов).
DEC
Декремент
Операция: Вычитает 1 из байта или слова в регистре или в памяти например DEC СХ.
Флаги: Команда воздействует на флаги AF, OF, PF, SF и ZF.
DIV
Деление
Операция: Выполняет деление беззнакового делимого (16 или 32 бит) на беззнаковый делитель (8 или 16 бит). Левый единичный бит рассматривается как бит данных, а не как минус для отрицательных чисел. Для 16-битового деления делимое должно находиться в регистре АХ, а 8-битовый делитель возможен в регистре или в памяти, например DIV BH. Частное от деления получается в регистре AL, а остаток — в регистре AН. Для 32-битового деления делимое должно находиться в регистровой паре DX:AX а 16-битовый делитель возможен в регистре или в памяти, например DIV СХ. Частное от деления получается в регистре AХ, а остаток — в регистре DX.
Флаги: Команда воздействует на флаги AF, CF, OF, PF SF и ZF (все не определены).
ESC
Переключение на сопроцессор
Операция: Обеспечивает использование сопроцессора для выполнения специальных операций. Команда ESC передает в сопроцессор инструкцию и операнд для выполнения необходимой операции.
Флаги: Не меняются.
HLT
Останов микропроцессора
Операция: Приводит процессор в состояние останова, в котором происходит ожидание прерывания. При завершении команды HLT регистры CS:IP указывают на следующую команду. При возникновении прерывания процессор записывает в стек регистры CS и IP и выполняет подпрограмму обработки прерывания. При возврате из подпрограммы команда IRET восстанавливает регистры CS и IP из стека и управление передается на команду, следующую за командой HLT.
Флаги: Не меняются.
Объектный код: 11110100 (без операндов).
IDIV
Целое деление знаковых величин
Операция: Выполняет деление знакового делимого (16 или 32 бит) на знаковый делитель (8 или 16 бит). Левый единичный бит рассматривается как знак минус для отрицательных чисел. Для 16-битового деления делимое должно находиться в регистре АХ, a 8-битовый делитель возможен в регистре или в памяти, например IDIV DL. Частное от деления получается в регистре AL, а остаток — в регистре АН. Для 32-битового деления делимое должно находиться в регистровой паре DX:AX, а 16-битовый делитель возможен в регистре или в памяти, например IDIV BX. Частное от деления получается в регистре АХ, а остаток — в регистре DX.
Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
IMUL
Целое умножение знаковых величин
Операция: Выполняет умножение на знаковый множитель (8 или 16 бит). Левый единичный бит рассматривается как знак минус для отрицательных чисел. Для 8-битового умножения множимое должно находиться в регистре AL, а множитель возможен в регистре или в памяти, например IMUL BL. Произведение получается в регистре АХ. Для 16-битового умножения множимое должно находиться в регистре АХ, а множитель возможен в регистре или в памяти, например IMUL BX. Произведение получается в регистровой паре DX:AX.
Флаги: Команда воздействует на флаги CF и OF (флаги AF PF SF и ZF не определены).
IN
Ввод байта или слова из порта
Операция: Передает из вводного порта один байт в регистр AL или два байта в регистр АХ). Порт кодируется как фиксированный числовой операнд (IN АХ,порт#) или как переменная в регистре DX (IN AX,DX).
Флаги: Не меняются.
INC
Инкремент
Операция: Прибавляет 1 к байту или слову в регистре или в памяти, например INC СХ.
Флаги: Команда воздействует на флаги AF, OF, PF, SF и ZF.
INT
Прерывание
Операция: Прерывает выполнение программы и передает управление по одному из 256 адресов (векторов прерывания). Команда INT выполняет следующее:
1) уменьшает значение SP на 2 и заносит в стек флаговый регистр, сбрасывает флаги IF и TF;
2) уменьшает значение SP на 2 и заносит регистр CS в стек, старшее слово из вектора прерывания помещает в регистр CS;
3) уменьшает значение SP на 2 и заносит регистр IP в стек, младшее слово из вектора прерывания помещает в регистр IP.
Флаги: Команда воздействует на флаги IF и TF.
INTO
Прерывание по переполнению
Операция: Приводит к прерыванию при возникновении переполнения (флаг OF установлен в 1) и выполняет команду IRET 4. Адрес подпрограммы обработки прерывания (вектор прерывания) находится по адресу 10Н.
Флаги: Не меняются.
Объектный код: 11001110 (без операндов).
IRET
Возврат из обработки прерывания
Операция: Обеспечивает возврат из подпрограммы обработки прерывания. Команда IRET выполняет следующее:
1) помещает слово из вершины стека в регистр IP и увеличивает значение SP на 2;
2) помещает слово из вершины стека в регистр CS и увеличивает значение SP на 2;
3) помещает слово из вершины стека во флаговый регистр и увеличивает значение SP на 2.
Флаги: Команда воздействует на все флаги.
Объектный код: 11001111 (бег операндов).
JA/JNBE
Переход по «выше» или «не ниже или равно»
Операция: Используется после проверки беззнаковых данных для передачи управления по другому адресу. В случае, если флаг CF равен нулю (нет переноса) и флаг ZF равен нулю (не нуль), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JAE/JNB
Переход по «выше или равно» или «не ниже»
Операция: Используется после проверки беззнаковых данных для передачи управления по другому адресу. В случае, если флаг CF равен нулю (нет переноса), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JB/JNAE
Переход по «ниже» или «не выше или равно»
Операция: Используется после проверки беззнаковых данных для Передачи управления по другому адресу. В случае, если флаг CF равен единице (есть перенос), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JBE/JNA
Переход по «ниже или равно» или «не выше»
Операция: Используется после проверки беззнаковых данных для передачи управления по другому адресу. В случае, если флаг CF равен единице (есть перенос) или флаг AF равен единице, то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JC
Переход по переносу
Операция: Идентична JB/JNAE.
JCXZ
Переход по «CX равно нулю»
Операция: Выполняет передачу управления по указанному в операнде адресу, если значение в регистре CX равно нулю. Команда JCXZ может быть полезна в начале циклов LOOP.
Флаги: Не меняются.
JE/JZ
Переход по «равно» или по «нулю»
Операция: Используется после проверки знаковых или беззнаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен единице (нулевое состояние), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JG/JNLE
Переход по «больше» или «не меньше или равно»
Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен нулю (не нуль) и флаги SF и OF одинаковы (оба 0 или оба 1), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JGE/JNL
Переход по «больше или равно» или «не меньше»
Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаги SF и OF одинаковы (оба 0 или оба 1), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JL/JNGE
Переход по «меньше» или «не больше или равно»
Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаги SF и OF различны, то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JLE/JNG
Переход по «меньше или равно» или «не больше»
Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен единице (нулевое состояние) и флаги SF и OF различны, то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JMP
Безусловный переход
Операция: Выполняет переход по указанному адресу при любых условиях. Команда JMP заносит в регистр IP необходимый адрес перехода. Существует пять типов команды JMP для передачи управления внутри сегмента или между сегментами. При межсегментном переходе в регистр CS заносится также новый сегментный адрес.
Флаги: Не меняются.
JNC
Переход если нет переноса
Операция: Идентична JAE/JNB.
JNE/JNZ
Переход по «не равно» или по «не нуль»
Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен нулю (ненулевое состояние), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
INO
Переход, если нет переполнения
Операция: Используется для передачи управления по определенному адресу после проверки на отсутствие переполнения. В случае, если флаг OF равен, нулю (нет переполнения), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JNP/JPO
Переход, если нет паритета или паритет нечетный
Операция: Приводит к передаче управления по определенному адресу, если в результате операции обнаружено отсутствие паритета или паритет нечетный. Нечетный паритет в данном случае означает, что в результате операции в младших восьми битах получено нечетное число битов. В случае, если флаг PF равен нулю (нечетный паритет), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JHS
Переход, если нет знака
Операция: Приводит к передаче управления по определенному адресу, если в результате операции получен положительный знак. В случае, если флаг SF равен нулю (положительное), то команда JNS прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JO
Переход по переполнению
Операция: Приводит к передаче управления по определенному адресу, если в результате операции получено состояние переполнения. В случае, если флаг OF равен единице (переполнение), то команда JO прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JP/JPE
Переход, если есть паритет или паритет четный
Операция: Приводит к передаче управления по определенному адресу, если в результате операции обнаружен четный паритет. Четный паритет в данном случае означает, что в результате операции в младших восьми битах получено четное число битов. В случае, если флаг PF равен единице (четный паритет), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
JS
Переход по знаку
Операция: Передает управления по определенному адресу, если в результате операции получен отрицательный знак. В случае, если флаг SF равен единице (отрицательно), то команда JS прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.
Флаги: Не меняются.
LAHF
Загрузка флагов в регистр АН
Операция: Загружает значение флагового регистра в регистр АН. Команда LAHF заносит правый байт флагового регистра в регистр АН в следующем виде:
SZ * A * P * C (* обозначает неиспользуемые биты)
Флаги: Не меняются.
Объектный код: 10011111 (без операндов)
LDS
Загрузка регистра сегмента данных
Операция: Инициализирует начальный адрес сегмента данных и адрес смещения к переменной для обеспечения доступа к данной переменной. Команда LDS загружает в необходимые регистры четыре байта из области памяти, содержащей относительный адрес и сегментный адрес. Сегментный адрес помещается в регистр DS, а относительный адрес — в любой из общих или индексных регистров или в регистровый указатель. Следующая команда загружает относительный адрес в регистр DI:
LDS DI,адрес_памяти
Флаги: Не меняются.
LES
Загрузка регистра дополнительного сегмента
Операция: Инициализирует начальный адрес дополнительного сегмента и адрес смещения к переменной для обеспечения доступа к данной переменной.
Флаги: Не меняются.
LOCK
Блокировка шины доступа к данным
Операция: Запрещает другим (сопроцессорам одновременно изменять элементы данных. Команда LOCK представляет собой однобайтовый префикс, который можно кодировать непосредственно перед любой командой. Данная операция посылает сигнал в другой процессор, запрещая использование данных, пока не будет завершена следующая команда.
Флаги: Не меняются.
Объектный код: 11110000
LODS/LODSB/LODSW
Загрузка однобайтовой или двухбайтовой строки
Операция: Загружает из памяти один байт в регистр AL или одно слово в регистр AХ. Несмотря на то, что команда LODS выполняет строковую операцию, нет смысла использовать ее с префиксом REP. Регистровая пара DS:SI адресует в памяти байт (для LODSB) или слово (для LODSW), которые загружаются в регистр AL или AХ соответственно. В случае, если флаг DF равен нулю, то операция прибавляет 1 (для байта) или 2 (для слова) к регистру SI.
В случае, если флаг DF равен единице, то операция вычитает 1 (для байта) или 2 (для слова) из регистра SI.
Флаги: Не меняются.
Объектный код: 1010110w (без операндов).
LOOP
Цикл
Операция: Управляет выполнением группы команд определенное число раз. До начала цикла в регистр CX должно быть загружено число выполняемых циклов. Команда LOOP находится в конце цикла, где она уменьшает значение в регистре СХ на единицу. В случае, если значение в регистре CX не равно нулю, то команда передает управление по адресу, указанному в операнде (прибавляет к регистру IP значение операнда); в противном случае управление передается на следующую после LOOP команду (происходит выход из цикла).
Флаги: Не меняются.
LOOPE/LOOPZ
Цикл, если равно или нуль
Операция: Управляет выполнением группы команд определенное число раз или пока установлен флаг ZF (в единичное состояние). Команды LOOPE/LOOPZ аналогичны команде LOOP, за исключением того, что по этим командам цикл прекращается либо по нулевому значению в регистре CX, либо по нулевому значению флага ZF (ненулевое состояние).
Флаги: Не меняются.
LOOPNE/LOOPNZ
Цикл, если не равно или не нуль
Операция: Управляет выполнением группы команд определенное число раз или пока сброшен флаг ZF (в нулевое состояние). Команды LOOPNE/LOOPNZ аналогичны команде LOOP за исключением того, что по этим командам цикл прекращается либо по нулевому значению в регистре CX, либо по единичному значению флага ZF (нулевое состояние).
Флаги: Не меняются.
MOV
Пересылка данных
Операция: Пересылает один байт или одно слово между регистрами или между регистром и памятью, а также передает непосредственное значение в регистр или в память. Команда MOV не может передавать данные между двумя адресами памяти (для этой цели служит команда MOVS). Существует семь типов команды MOV.
Флаги: Не меняются.
MOVS/MOVSB/MOVSW
Пересылка строки байт или строки слов
Операция: Пересылает данные между областями памяти. Команды MOVS(B/W) обычно используются с префиксом REP. Команда MOVSB пересылает любое число байтов, а команда MOVSW — любое число слов. Перед выполнением команды регистровая пара DS:SI должна адресовать источник пересылки («откуда») а регистровая пара ES:DI — получатель пересылки («куда»). В случае, если флаг DF равен нулю, то операция пересылает данные слева направо и увеличивает регистры SI и DI. В случае, если флаг DF равен единице то операция пересылает данные справа налево и уменьшает регистры SI и DI.
Флаги: Не меняются.
Объектный код: 1010010w (без операндов).
MUL
Беззнаковое умножение
Операция: Умножает беззнаковое множимое (8 или 16 бит) на беззнаковый множитель (8 или 16 бит). Левый единичный бит рассматривается как бит данных, но не как знак минус для отрицательных чисел. Для 8-битового умножения множимое должно находиться в регистре AL, а множитель возможен в регистре или в памяти, например MUL CL. Произведение получается в регистре АХ. Для 16-битового умножения множимое должно находиться в регистре АХ, а множитель возможен в регистре или в памяти, например MUL ВХ. Произведение получается в регистровой паре DX:AX.
Флаги: Команда воздействует на флаги CF и OF (флаги AF, PF, SF и ZF не определены).
NEG
Изменение знака числа
Операция: Меняет двоичное значение из положительного в отрицательное и из отрицательного в положительное. Команда NEG вычисляет двоичное дополнение от указанного операнда: вычитает операнд из нуля и прибавляет единицу. Операндом может быть байт или слово в регистре или в памяти.
Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
NOP
Нет операции
Операция: Применяется для удаления или вставки машинных кодов или для задержки выполнения программы. Команда NOP выполняет операцию XCHG АХ,АХ, которая ничего не меняет.
Флаги: Не меняются.
Объектный код: 10010000 (без операндов)
NOT
Логическое НЕТ
Операция: Меняет нулевые биты на единичные и наоборот. Операндом может быть байт или слово в регистре или в памяти.
Флаги: Не меняются.
OR
Логическое ИЛИ
Операция: Выполняет поразрядную дизъюнкцию (ИЛИ) над битами двух операндов. Операндами являются байты или слова в регистрах или в памяти, второй операнд может иметь непосредственное значение. Команда OR обрабатывает операнды побитово. В случае, если любой из проверяемых бит равен единице, то бит в операнде 1 становится равным единице, в противном случае бит в операнде 1 не изменяется.
Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF неопределен).
OUT
Вывод байта или слова в порт
Операция: Передает в выводной порт байт из регистра AL или слово из регистра AХ. Порт кодируется как фиксированный числовой операнд (OUT порт#,АХ) или как переменная в регистре DX (OUT DX.AX). Процессоры имеют, кроме того, команду OUTS (Output String — вывод строки).
Флаги: Не меняются.
POP
Извлечение слова из стека
Операция: Передает слово (помещенное ранее в стек) в указанный операнд. Регистр SP указывает на текущее слово в вершине стека. Команда POP извлекает слово из стека и увеличивает значение в регистре SP на 2. Существует три типа команды POP в зависимости от операнда: общий регистр, сегментный регистр, слово в памяти.
Флаги: Не меняются.
POPA
Извлечение из стека всех общих регистров
Операция: Извлекает из стека восемь значений в регистры Dl, SI BP, SP, BX, DX, CX, AX в указанной последовательности и увеличивает регистр SP на 16. Регистры обычно записываются в стек ранее соответствующей командой PUSHA.
Флаги: Не меняются.
Объектный код: 01100001 (без операндов).
POPF
Извлечение флагов из стека
Операция: Передает биты (помещенные ранее в стек) во флаговый регистр. Регистр SP указывает на текущее слово в вершине стека. Команда POPF передает биты из этого слова во флаговый регистр и увеличивает значение в регистре SP на 2. Обычно команда PUSHF записывает значения флагов в стек, а команда POPF восстанавливает эти флаги.
Флаги: Команда воздействует на все флаги.
Объектный код: 10011101 (без операндов).
PUSH
Занесение слова в стек
Операция: Сохраняет значение слова (адрес или элемент данных) в стеке для последующего использования. Регистр SP указывает на текущее слово в вершине стека. Команда PUSH уменьшает значение в регистре SP на 2 и передает слово из указанного операнда в новую вершину стека. Существует три типа команды PUSH в зависимости от операнда: общий регистр, сегментный регистр или слово в памяти.
Флаги: Не меняются.
PUSHA
Занесение в стек всех общих регистров
Операция: Записывает в стек восемь значений регистров AX, CX, DX, BX, SP, BP, SI, DI в указанной последовательности и уменьшает регистр SP на 16. Обычно команда POPA позже восстановит эти регистры из стека.
Флаги: Не меняются.
Объектный код: 01100000 (без операндов).
PUSHF
Занесение флагов в стек
Операция: Сохраняет значения флагов из флагового регистра в стеке для последующего использования. Регистр SP указывает на текущее слово в вершине стека. Команда PUSHF уменьшает значение в регистре SP на 2 и передает флаги в новую вершину стека.
Флаги: Не меняются.
Объектный код: 10011100 (без операндов).
RCL и RCR
Циклический сдвиг влево через перенос и циклический сдвиг вправо через перенос
Операция: Выполняет циклический сдвиг битов (ротацию) влево или вправо через флаг CF. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Ротация на один бит кодируется в команде значением 1; ротация более чем на один бит требует указания регистра CL, который содержит счетчик. Для команды RCL значение флага CF записывается в бит 0, а. самый левый бит записывается во флаг CF; все другие биты сдвигаются влево. Для команды RCR значение флага CF записывается в самый левый бит, а бит 0 записывается во флаг CF; все другие биты сдвигаются вправо.
Флаги: Команда воздействует на флаги CF и OF.
REP/REPE/REPZ/REPNE/REPNZ
Повтор строковой операции
Операция: Повторяет строковую операцию определенное число раз. Используется в качестве префикса повторения перед строковыми командами CMPS, MOVS, SCAS, STOS. Счетчик повторений должен быть загружен в регистр CX до выполнения строковой команды. Операция уменьшает регистр CX на 1 при каждом выполнении строковой команды. Для префикса REP операция повторяется, пока содержимое регистра CX не достигнет нуля. Для префикса REPE/REPZ операция повторяется, пока регистр CX содержит ненулевое значение и флаг ZF равен 1 (нулевое состояние). Для префикса REPNE/REPNZ операция повторяется, пока регистр CX содержит ненулевое значение и флаг ZF равен 0 (ненулевое состояние).
Флаги: Определяются соответствующей строковой командой.
Объектныйкод: REP/REPNE: 11110010 REPE: 11110011
RET
Возврат из процедуры
Операция: Возвращает управление из процедуры, вызванной ранее командой CALL. Команда CALL может передавать управление внутри одного сегмента или между сегментами. Команда RET заносит слово из вершины стека в регистр IP и увеличивает значение SP на 2. Для межсегментного возврата команда RET, кроме того, заносит слово из новой вершины стека в регистр CS и еще раз увеличивает значение SP на 2. Любой числовой операнд команды (например, RET 4) прибавляется к указателю стека SP.
Флаги: Не меняются.
ROL и ROR
Циклический сдвиг влево и циклический сдвиг вправо
Операция: Выполняет циклический сдвиг битов (ротацию) влево или вправо. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Ротация на один бит кодируется в команде значением 1; ротация более чем на один бит требует указания регистра CL, который содержит счётчик. Для команды ROL самый левый бит записывается в бит 0; все другие биты сдвигаются влево. Для команды ROR бит 0 записывается в самый левый бит; все другие биты сдвигаются вправо.
Флаги: Команда воздействует на флаги CF и OF.
SAHF
Установка флагов из регистра АН
Операция: Данная команда обеспечивает совместимость с процессором 8080 для пересылки значений флагов из регистра АН во флаговый регистр. Команда SAHF пересылает определенные биты из регистра АН во флаговый регистр в следующем виде:
SZ * A * P * C (* обозначает неиспользуемые биты)
Флаги: Не меняются.
Объектный код: 10011110 (без операндов)
SAL, SAR, SHL и SHR
Сдвиг влево или вправо
Операция: Выполняет сдвиг битов влево или вправо. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Сдвиг на один бит кодируется в команде значением 1; сдвиг более чем на один бит требует указания регистра CL, который содержит счетчик сдвига.
Команда SAR выполняет арифметический сдвиг, который учитывает знак сдвигаемого значения. Команды SHL и SHR выполняют логический сдвиг и рассматривают знаковый бит как обычный бит данных. Команда SAL выполняется аналогично команде SHL. Команды SAL и SHL сдвигают биты влево определенное число раз и правый освобождающийся бит заполняют нулевым значением.
Команда SHR сдвигает биты вправо определенное число раз и левый освобождающийся бит заполняет нулевым значением. Команда SAR сдвигает биты вправо определенное число раз и левый освобождающийся бит заполняет значением знакового бита (0 или 1). Во всех случаях значения битов, выдвигаемых за разрядную сетку, теряются.
Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).
SBB
Вычитание с заемом
Операция: Обычно используется при вычитании многословных двоичных величин для учета единичного бита переполнения в последующей фазе операции. В случае, если флаг CF установлен в 1, то команда SBB сначала вычитает 1 из операнда 1. Команда SBB всегда вычитает операнд 2 из операнда 1,