Байт способа адресации, если он присутствует, занимает второй байт машинного кода и состоит из следующих трех элементов:
1) mod — двухбитового кода, имеющего значения 11 для ссылки на регистр и 00, 01 и 10 для ссылки на память;
2) reg — трехбитового указателя регистра;
3) r/m — трехбитового указателя регистра или памяти (r — регистр, m — адрес памяти).
Кроме того, первый байт машинного кода может содержать бит «а», который указывает направление потока между операндом 1 и операндом 2.
Биты MOD
Два бита mod определяют адресацию регистра или памяти.
Биты REG
Три бита reg (вместе с битом w) определяют конкретный восьми- или шестнадцатибитовый регистр.
Биты R/M
Три бита г/m (регистр/память) совместно с битами mod определяют способ адресации.
Команды в алфавитном порядке
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 не определены).
Операция: Корректирует разность двух 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.