90 lines
17 KiB
Plaintext
90 lines
17 KiB
Plaintext
мнемоника ориг на англ опкод длина в байтах пояснение
|
||
переместить_имм MOV reg, imm (кодируется динамически) 7-10 Переместить непосредственное значение в регистр. Поддерживает 8/16/32/64 битные регистры
|
||
переместить MOV reg, reg 48 89 + ModR/M 3 Переместить данные из одного регистра в другой (64-бит)
|
||
загрузить MOV reg, mem 48 8B + ModR/M 2-9 Загрузить значение из памяти в регистр. Поддержка всех форм адресации
|
||
сохранить MOV mem, reg 48 89 + ModR/M 2-9 Сохранить значение регистра в память. Поддержка всех форм адресации
|
||
загрузить_байт_из_памяти MOV reg8, mem8 8A + ModR/M 2-6 Загрузить байт из памяти в 8-битный регистр
|
||
сохранить_байт MOV mem8, reg8 88 + ModR/M 2-6 Сохранить 8-битный регистр в память
|
||
загрузить_адрес LEA reg, mem 48 8D + ModR/M 3-9 Загрузить эффективный адрес (вычисленный адрес, не значение по адресу)
|
||
переместить_с_нулями MOVZX reg, mem8 48 0F B6 + ModR/M 4-10 Загрузить байт из памяти с расширением нулями до 32/64 бит
|
||
переместить_со_знаком MOVSX reg, mem8 48 0F BE + ModR/M 4-10 Загрузить байт из памяти с расширением знака до 32/64 бит
|
||
загрузить_байт MOV reg8, imm8 (кодируется динамически) 2-3 Загрузить непосредственный байт в 8-битный регистр (B0+reg + imm8)
|
||
сравнить_с CMP reg, imm (кодируется динамически) 6-8 Сравнить регистр с непосредственным значением
|
||
сравнить CMP reg, reg 48 39 + ModR/M 3 Сравнить два регистра
|
||
сравнить_байт CMP reg8, reg8 38 + ModR/M 2 Сравнить два 8-битных регистра
|
||
проверить TEST reg, reg 48 85 + ModR/M 3 Логическое сравнение (побитовое И), не изменяет операнды
|
||
прибавить ADD reg, reg 48 01 + ModR/M 3 Сложить два регистра
|
||
прибавить_непосредственно ADD reg, imm (кодируется динамически) 6-8 Прибавить непосредственное значение к регистру
|
||
прибавить_байт ADD reg8, reg8 00 + ModR/M 2 Сложить два 8-битных регистра
|
||
вычесть SUB reg, reg 48 29 + ModR/M 3 Вычесть второй регистр из первого
|
||
вычесть_непосредственно SUB reg, imm (кодируется динамически) 6-8 Вычесть непосредственное значение из регистра
|
||
вычесть_байт SUB reg8, reg8 28 + ModR/M 2 Вычесть два 8-битных регистра
|
||
увеличить INC reg FF /0 + ModR/M 2-3 Увеличить регистр на 1 (не меняет CF)
|
||
уменьшить DEC reg FF /1 + ModR/M 2-3 Уменьшить регистр на 1 (не меняет CF)
|
||
умножить MUL reg/mem F7 /4 + ModR/M 2-9 Беззнаковое умножение RAX = RAX * операнд. Результат в RDX:RAX
|
||
умножить_знаковое IMUL reg/mem F7 /5 + ModR/M 2-9 Знаковое умножение RAX = RAX * операнд. Результат в RDX:RAX
|
||
разделить DIV reg/mem F7 /6 + ModR/M 2-9 Беззнаковое деление RDX:RAX / операнд. Частное в RAX, остаток в RDX
|
||
разделить_знаковое IDIV reg/mem F7 /7 + ModR/M 2-9 Знаковое деление RDX:RAX / операнд. Частное в RAX, остаток в RDX
|
||
и AND reg, reg 48 21 + ModR/M 3 Побитовое И двух регистров
|
||
или OR reg, reg 48 09 + ModR/M 3 Побитовое ИЛИ двух регистров
|
||
исключающее_или XOR reg, reg 48 31 + ModR/M 3 Побитовое исключающее ИЛИ двух регистров
|
||
инвертировать NOT reg F7 /2 + ModR/M 2-3 Побитовое НЕ (инверсия всех бит)
|
||
отрицать NEG reg F7 /3 + ModR/M 2-3 Арифметическое отрицание (дополнительный код)
|
||
переход JMP rel32 E9 5 Безусловный переход на 32-битное смещение
|
||
короткий_переход JMP SHORT rel8 EB 2 Короткий безусловный переход на 8-битное смещение
|
||
переход_если_равно JE/JZ rel32 0F 84 6 Условный переход если равно (ZF=1)
|
||
переход_если_неравно JNE/JNZ rel32 0F 85 6 Условный переход если не равно (ZF=0)
|
||
переход_если_меньше JL rel32 0F 8C 6 Условный переход если меньше (знаковое, SF≠OF)
|
||
переход_если_больше JG rel32 0F 8F 6 Условный переход если больше (знаковое, ZF=0 и SF=OF)
|
||
переход_если_меньше_или_равно JLE rel32 0F 8E 6 Условный переход если меньше или равно (знаковое)
|
||
переход_если_больше_или_равно JGE rel32 0F 8D 6 Условный переход если больше или равно (знаковое)
|
||
переход_если_перенос JC rel32 0F 82 6 Условный переход если перенос (CF=1). Для беззнаковых: меньше
|
||
переход_если_нет_переноса JNC rel32 0F 83 6 Условный переход если нет переноса (CF=0). Для беззнаковых: больше/равно
|
||
переход_если_ноль JZ rel32 0F 84 6 Условный переход если ноль (ZF=1). Синоним JE
|
||
переход_если_не_ноль JNZ rel32 0F 85 6 Условный переход если не ноль (ZF=0). Синоним JNE
|
||
короткий_переход_если_равно JE SHORT rel8 74 2 Короткий условный переход если равно
|
||
короткий_переход_если_неравно JNE SHORT rel8 75 2 Короткий условный переход если не равно
|
||
короткий_переход_если_меньше JL SHORT rel8 7C 2 Короткий условный переход если меньше (знаковое)
|
||
короткий_переход_если_больше JG SHORT rel8 7F 2 Короткий условный переход если больше (знаковое)
|
||
короткий_переход_если_меньше_или_равно JLE SHORT rel8 7E 2 Короткий условный переход если меньше или равно
|
||
короткий_переход_если_больше_или_равно JGE SHORT rel8 7D 2 Короткий условный переход если больше или равно
|
||
короткий_переход_если_перенос JC SHORT rel8 72 2 Короткий условный переход если перенос
|
||
короткий_переход_если_нет_переноса JNC SHORT rel8 73 2 Короткий условный переход если нет переноса
|
||
короткий_переход_если_ноль JZ SHORT rel8 74 2 Короткий условный переход если ноль
|
||
короткий_переход_если_не_ноль JNZ SHORT rel8 75 2 Короткий условный переход если не ноль
|
||
вызвать CALL rel32 E8 5 Вызов процедуры (подпрограммы). Адрес возврата в стек
|
||
вернуться RET C3 1 Возврат из процедуры. Адрес из стека
|
||
втолкнуть PUSH reg 50 + reg 1-2 Поместить регистр в стек (RSP = RSP - 8)
|
||
вытолкнуть POP reg 58 + reg 1-2 Извлечь регистр из стека (RSP = RSP + 8)
|
||
втолкнуть_непосредственно PUSH imm32 68 5 Поместить 32-битное значение в стек
|
||
втолкнуть_байт PUSH imm8 6A 2 Поместить 8-битное значение в стек с расширением знака
|
||
втолкнуть_из_памяти PUSH mem FF /6 + ModR/M 2-9 Поместить в стек значение из памяти
|
||
вытолкнуть_в_память POP mem 8F /0 + ModR/M 2-9 Извлечь из стека в память
|
||
сдвиг_влево SHL reg, imm 48 C1 E0 + ModR/M 4 Логический сдвиг влево (умножение на 2)
|
||
сдвиг_вправо SHR reg, imm 48 C1 E8 + ModR/M 4 Логический сдвиг вправо (деление на 2 без знака)
|
||
сдвиг_арифметический_вправо SAR reg, imm 48 C1 F8 + ModR/M 4 Арифметический сдвиг вправо (деление на 2 со знаком)
|
||
вращать_влево ROL reg, imm 48 C1 C0 + ModR/M 4 Вращение бит влево (биты не теряются)
|
||
вращать_вправо ROR reg, imm 48 C1 C8 + ModR/M 4 Вращение бит вправо (биты не теряются)
|
||
цикл LOOP rel8 E2 2 Инструкция цикла: RCX = RCX - 1; если RCX != 0, переход
|
||
обменять XCHG reg, reg 48 87 + ModR/M 3 Обменять значения двух регистров
|
||
обменять_с_памятью XCHG mem, reg 48 87 + ModR/M 2-9 Обменять значение регистра и памяти
|
||
вызов_системы SYSCALL 0F 05 2 Системный вызов в ядро Linux
|
||
прервать INT imm8 CD 2 Программное прерывание. Номер прерывания из операнда
|
||
войти_в_систему SYSENTER 0F 34 2 Быстрый системный вызов (32-битный режим)
|
||
остановить HLT F4 1 Остановить процессор до следующего прерывания
|
||
нет_операции NOP 90 1 Нет операции. Процессор ничего не делает
|
||
отладка INT3 CC 1 Точка останова для отладчика
|
||
переместить_байт MOVSB A4 1 Переместить байт: [RDI] = [RSI]; RSI++, RDI++
|
||
переместить_слово MOVSW A5 1 Переместить слово (2 байта): [RDI] = [RSI]; RSI+=2, RDI+=2
|
||
сравнить_байты CMPSB A6 1 Сравнить байты: сравнить [RSI] и [RDI]; RSI++, RDI++
|
||
сканировать_байт SCASB AE 1 Сканировать байт: сравнить AL и [RDI]; RDI++
|
||
установить_перенос STC F9 1 Установить флаг переноса CF = 1
|
||
сбросить_перенос CLC F8 1 Сбросить флаг переноса CF = 0
|
||
установить_направление STD FD 1 Установить флаг направления DF = 1 (строковые операции назад)
|
||
сбросить_направление CLD FC 1 Сбросить флаг направления DF = 0 (строковые операции вперёд)
|
||
втолкнуть_флаги PUSHF 9C 1 Поместить регистр флагов в стек
|
||
вытолкнуть_флаги POPF 9D 1 Извлечь регистр флагов из стека
|
||
ввод_байта IN imm8 E4 2 Ввод байта из порта ввода-вывода в AL
|
||
вывод_байта OUT imm8 E6 2 Вывод байта из AL в порт ввода-вывода
|
||
идентифицировать_процессор CPUID 0F A2 2 Получить информацию о процессоре (производитель, возможности)
|
||
прочитать_счётчик RDTSC 0F 31 2 Прочитать счётчик времени (TSC) в EDX:EAX |