Регистр И регистр или память:
|001000dw|modregr/m|
Регистр AX (AL) И непосредственное значение:
|0010010w|--data--|data, если w=1|
Регистр или память И непосредственное значение:
|1010000w|modl00r/m|--data--|data, если w=1|
CALL: Вызов процедуры
-----------------------
О п е р а ц и я: Выполняет короткий или длинный вызов процедуры для
связи подпрограмм. Для возврата из процедуры используется команда RET.
Команда CALL уменьшает содержимое SP на 2 и заносит в стек адрес следующей
команды (из IP), а затем устанавливает в регистре IP относительный адрес
процедуры. Впоследствии команда RET использует значение в стеке для
возврата. Существует четыре типа команды CALL для вызова внутри сегмента и
между сегментами. Команда межсегментного вызова сначала уменьшает SP,
заносит в стек адрес из регистра CS, а затем загружает в стек
внутрисегментный указатель.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д (четыре формата):
Прямая адресация в сегменте:
|11101000|disp-low|diep-high|
Косвенная адресация в сегменте:
|11111111|mod010r/m|
Косвенная адресация между сегментами:
|11111111|mod011r/m|
Прямая адресация между сегментами:
|10011010|offset-low|offset-high|seg-low|seg-high|
CBW: Преобразование байта в слово
-----------------------------------
О п е р а ц и я: Расширяет однобайтовое арифметическое значение в
регистре AL до размеров слова. Команда CBW размножает знаковый бит (7) в
регистре AL по всем Битам регистра АН. См также команду CWD.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 10011000 (без операндов).
CLC: Сброс флага переноса
---------------------------
О п е р а ц и я: Устанавливает значение флага переноса, равное 0, так
что, например, команда ADC не прибавляет единичный бит. Команда CLC не
имеет операндов. См. также команду STD.
Ф л а г и: Команда воздействует на флаг CF (устанавливается в 0).
О б ъ е к т н ы й к о д: 11111000.
CLD: Сброс флага направления
-------------------------------
О п е р а ц и я: Устанавливает значение флага направления, равное 0.
В результате такие строковые операции, как CMPS или MOVS обрабатывают
данные слева направо. См. также команду STD.
Ф л а г и: Команда воздействует на флаг DF (устанавливается в 0).
О б ъ е к т н ы й к о д: 11111100 (без операндов).
CLI: Сброс флага прерывания
-----------------------------
О п е р а ц и я: Запрещает маскируемые внешние прерывания по
процессорной шине INTR посредством установки значения флага прерывания IF
в 0. См. также команду STI.
Ф л а г и: Команда воздействует на флаг IF (устанавливается в 0).
О б ъ е к т н ы й к о д: 11111010 (без операндов).
CMC: Переключение флага переноса
----------------------------------
О п е р а ц и я: Инвертирует флаг CF, т.е. преобразует нулевое
значение флага CF в единичное и наоборот.
Ф л а г и: Команда воздействует на флаг CF (инвертируется).
О б ъ е к т н ы й к о д: 11110101 (без операндов).
CMP: Сравнение
----------------
О п е р а ц и я: Сравнивает содержимое двух полей данных. Фактически
команда CMP вычитает второй операнд из первого, но содержимое полей не
изменяет. Операнды должны иметь одинаковую длину: байт или слово. Команда
CMP может сравнивать содержимое регистра, памяти или непосредственное
значение с содержимым регистра; или содержимое регистра или
непосредственное значение с содержимым памяти. См. также команду CMPS.
Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
О б ъ е к т н ы й к о д (три формата):
Регистр или память с регистром:
|001110dw|modregr/m|
Непосредственное значение с регистром AX (AL):
|0011110w|--data--|data, если w=1|
Непосредственное значение с регистром или памятью:
|100000sw|mod111r/m|--data--|data, если sw=0|
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-битового делимого. См. также команду CBW.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: 10011001 (без операндов).
DAA: Десятичная коррекция для сложения
----------------------------------------
О п е р а ц и я: Корректирует результат сложения двух BCD (десятичных
упакованных) элементов в регистре AL. Если четыре правых бита имеют
значение больше 9 или флаг AF установлен в 1, то команда DAA прибавляет 6
к регистру AL и устанавливает флаг AF. Если регистр AL содержит значение
больше, чем 9F, или флаг CF установлен в 1, то команда DAA прибавляет 60Н
к регистру AL и устанавливает флаг CF. См. также команду DAS.
Ф л а г и: Команда воздействует на флаги AF. CF, PF, SF и 2F (флаг OF
неопределен).
О б ъ е к т н ы й к о д: 00100111 (без операндов).
DAS: Десятичная коррекция для вычитания
-----------------------------------------
О п е р а ц и я: Корректирует результат вычитания двух BCD
(десятичных упакованных) чисел в регистре AL. Если четыре правых бита
имеют значение больше 9 или флаг AF установлен в 1, то команда DAS
вычитает 60Н из регистра AL и устанавливает флаг CF. См. также команду
DAA.
Ф л а г и: Команда воздействует на флаги AF, CF, PF, SF и ZF.
О б ъ е к т н ы й к о д: 00101111 (без операндов).
DEC: Декремент
----------------
О п е р а ц и я: Вычитает 1 из байта или слова в регистре или в
памяти например DEC СХ. См. также команду INC.
Ф л а г и: Команда воздействует на флаги AF, OF, PF, SF и ZF.
О б ъ е к т н ы й к о д (два формата):
Регистр: |01001reg|
Регистр или память: |1111111w|mod001r/m|
DIV: Деление
--------------
О п е р а ц и я: Выполняет деление беззнакового делимого (16 или 32
бит) на беззнаковый делитель (8 или 16 бит). Левый единичный бит
рассматривается как бит данных, а не как минус для отрицательных чисел.
Для 16-битового деления делимое должно находиться в регистре АХ, а
8-битовый делитель возможен в регистре или в памяти, например DIV BH.
Частное от деления получается в регистре AL, а остаток - в регистре AН.
Для 32-битового деления делимое должно находиться в регистровой паре DX:AX
а 16-битовый делитель возможен в регистре или в памяти, например DIV СХ.
Частное от деления получается в регистре AХ, а остаток - в регистре DX.
См. также команду IDIV.
Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF SF и ZF (все
не определены).
О б ъ е к т н ы й к о д: |1111011w|mod110r/m|
ESC: Переключение на сопроцессор
----------------------------------
О п е р а ц и я: Обеспечивает использование сопроцессора для
выполнения специальных операций. Для выполнения арифметических операций
над числами с плавающей запятой используются сопроцессоры 8087 или 80287.
Команда ESC передает в сопроцессор инструкцию и операнд для выполнения
необходимой операции.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |11011xxx|modxxxr/m| (x - любое знач.).
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. См. команды CBW и CWD для
расширения знакового делимого, а также команду DIV.
Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.
О б ъ е к т н ы й к о д: |1111011w|mod111r/m|
IMUL: Целое умножение знаковых величин
----------------------------------------
О п е р а ц и я: Выполняет умножение на знаковый множитель (8 или 16
бит). Левый единичный бит рассматривается как знак минус для отрицательных
чисел. Для 8-битового умножения множимое должно находиться в регистре AL,
а множитель возможен в регистре или в памяти, например IMUL BL.
Произведение получается в регистре АХ. Для 16-битового умножения множимое
должно находиться в регистре АХ, а множитель возможен в регистре или в
памяти, например IMUL BX. Произведение получается в регистровой паре
DX:AX. См. также команду MUL.
Ф л а г и: Команда воздействует на флаги CF и OF (флаги AF PF SF и ZF
не определены).
О б ъ е к т н ы й к о д: |1111011w|mod101r/m|
IN: Ввод байта или слова из порта
-----------------------------------
О п е р а ц и я: Передает из вводного порта один байт в регистр AL
или два байта в регистр АХ). Порт кодируется как фиксированный числовой
операнд (IN АХ,порт#) или как переменная в регистре DX (IN AX,DX).
Процессоры 80186, 80286 и 80386 имеют, кроме того, команду INS (Input