76543210 |
MRM |
Имя |
Описание |
00xxx0xx |
Да |
ALU-G1 |
АЛУ с двумя операндами. Номер функции [5:3] |
00xxx10x |
|
ALU-G2 |
АЛУ с аккумулятором и непосредственным значением. Номер функции [5:3] |
000xx110 |
|
PUSH-S |
Сохранение сегмента в стек. Номер сегмента [5:4] |
00001111 |
|
EXT |
Префикс расширения опкода |
000xx111 |
|
POP-S |
Чтение из стека в сегмент. Номер сегмента в опкоде [5:4], кроме CS (01b) |
001xx110 |
|
SEG-P1 |
Выбор префикса для операции с данными, номер префикса в [5:4] |
001xx111 |
|
DECIMAL |
Десятичная коррекция после сложения 00 DAA, вычитания 01 DAS; ASCII коррекция 10 AAA после сложения, вычитания 11 AAS |
01000xxx |
|
INC |
Инкремент 16-битного регистра [2:0] |
01001xxx |
|
DEC |
Декремент 16-битного регистра [2:0] |
01010xxx |
|
PUSH-R |
Сохранить в стек 16-битный регистр [2:0] |
01011xxx |
|
POP-R |
Извлечь из стека 16-битный регистр [2:0] |
01100000 |
|
PUSHA |
Сохранить все 16-битные регистры общего назначения в стек |
01100001 |
|
POPA |
Восстановить 16-битные регистры из стека |
01100010 |
Да |
BOUND |
Проверка границ массива |
01100011 |
Да |
ARPL |
Коррекция RPL |
0110010x |
|
SEG-P2 |
Выбор префикса FS: или GS: |
01100110 |
|
OPSIZE |
Расширение 32 бит для операнда |
01100111 |
|
ADSIZE |
Расширение 32 бит для адреса |
011010x0 |
|
PUSH-I |
Сохранить непосредственное значение в стек |
011010x1 |
Да |
IMUL |
Умножить операнд на непосредственное значение и записать в регистр |
0110110x |
|
INSx |
Получение данных из порта |
0110111x |
|
OUTSx |
Запись данных в порт |
0111xxxx |
|
JUMPC |
Условный переход, условия в [3:0] |
100000xx |
Да |
ALU-G3 |
АЛУ с операндом и непосредственным значением, номер функции REG-часть [5:3] MODRM |
1000010x |
Да |
TEST |
Логическое AND над операндом и непосредственным значением, без записи результата |
1000011x |
Да |
XCHG-RM |
Обмен операндов местами |
100010xx |
Да |
MOV-RM |
Перемещение из операнда 2 в операнд 1 |
100011x0 |
Да |
MOV-S |
Перемещение из/в сегментный регистр из операнда (регистр/память) |
10001101 |
Да |
LEA |
Загрузка эффективного адреса в регистр |
10001111 |
Да |
POP-RM |
Извлечение из стека и сохранение в регистр или в память |
10011011 |
|
FWAIT |
Ожидание пока FPU не закончит работу |
11110000 |
|
LOCK |
Префикс, который зачем-то блокирует шину данных |
10010xxx |
|
XCHG-R |
Обмен регистра AX с другим регистром [2:0] |
10011000 |
|
CBW |
Знаковое расширение AL до AX |
10011001 |
|
CWD |
Знаковое расширение AX до DX:AX |
10011010 |
|
CALL-F |
Дальний вызов процедуры (сегмент:смещение) |
10011100 |
|
PUSHF |
Сохранить в стек флаги |
10011101 |
|
POPF |
Восстановить флаги из стека |
10011110 |
|
SAHF |
Записать значение из регистра AH во флаги |
10011111 |
|
LAHF |
Загрузить флаги в регистр AH |
101000xx |
|
MOV-A |
Перемещение из памяти или в память аккумулятора |
1010100x |
|
TEST-I |
Операция TEST над аккумулятором и непосредственным значением |
1010010x |
|
MOVSx |
Копирование из памяти DS:SI в память ES:DI |
1010011x |
|
CMPSx |
Сравнение строк из памяти DS:SI и ES:DI |
1010101x |
|
STOSx |
Сохранение аккумулятора в память ES:DI |
1010110x |
|
LODSx |
Загрузка из DS:SI в аккумулятор |
1010111x |
|
SCASx |
Чтение из памяти ES:DI и сравнение с аккумулятором |
1011xxxx |
|
MOV-I |
Запись непосредственного значения в регистр |
1100000x |
Да |
ROT-I |
Сдвиговая операция, функция номер MODRM[5:3], с количеством шагов от 0 до 255 |
1100001x |
|
RET |
Возврат из процедуры. Если [0]=1, то также добавляется SP+Immediate |
1100010x |
Да |
LXS |
LES,LDS Загрузка 32-х битного значения из памяти в сегментный регистр и регистр |
1100011x |
Да |
MOV-RMI |
Чтение из памяти или регистра и запись в регистр |
11001000 |
|
ENTER |
Создание фрейма в стеке |
11001001 |
|
LEAVE |
Удаление фрейма из стека |
1100101x |
Да |
RETF |
Дальний возврат из процедуры. Аналогично RET, может восстанвливать SP+Immediate |
110011x0 |
|
INT3 |
Вызов 3-го прерывания |
11001110 |
|
INTO |
Вызов 4-го прерывания если OF=1 |
11001101 |
|
INT |
Вызов i-го прерывания |
11001111 |
|
IRET |
Возврат из прерывания |
110100xx |
Да |
ROT-1CL |
Сдвиговая операция, но либо на 1 бит, либо на указанное в регистре CL |
11010100 |
|
AAM |
Десятичная коррекция после умножения |
11010101 |
|
AAD |
Десятичная коррекция после деления |
11010110 |
|
SALC |
Недокументированная инструкция копирования CF во все биты регистра AL |
11010111 |
|
XLATB |
На основе DS:BX извлекается из памяти байт и записывается в AL |
11011xxx |
Да |
FPU |
Инструкции Floating Point Unit |
1110000x |
|
LOOPZF |
Ветвление пока CX не равен 0 с проверкой на ZeroFlag |
11100010 |
|
LOOP |
Ветвление пока CX не равен 0 |
11100011 |
|
JCXZ |
Переход если CX=0 |
1110x10x |
|
IN |
Чтение из порта |
1110x11x |
|
OUT |
Запись в порт |
11101000 |
|
CALL |
Вызов процедуры (NEAR) |
11101001 |
|
JMP |
Переход по адресу (NEAR) |
11101010 |
|
JMP-F |
Переход по адресу (FAR) |
11101011 |
|
JMP-S |
Короткий переход в пределах -128..127 (SHORT) |
11110001 |
|
INT1 |
Вызов прерывания 1 |
1111001x |
|
REPx |
Префикс REPNZ/REPZ |
11110100 |
|
HLT |
Остановка процессора |
11110101 |
|
CMC |
Инверсия флага CF |
11111000 |
|
CLC |
Сброс флага CF |
1111100x |
|
STC |
Установка флага CF |
11111010 |
|
CLI |
Сброс флага IF |
1111101x |
|
STI |
Установка флага IF |
11111100 |
|
CLD |
Сброс флага DF |
1111110x |
|
STD |
Установка флага DF |
1111011x |
Да |
GRP1 |
Инструкции TEST/NOT/NEG/MUL/IMUL/DIV/IDIV, функция в [5:3] MODRM |
1111111x |
Да |
GRP2 |
Инструкции INC/DEC/CALL/CALL-F/JMP/JMP-F/PUSH-RM, функция в [5:3] MODRM |