Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| reverseenengineering:основы [2025/07/04 17:34] – [Некоторые основные команды ассемблера] Lex | reverseenengineering:основы [2025/07/04 17:56] (текущий) – [Операнды, коды, форматы] Lex | ||
|---|---|---|---|
| Строка 2: | Строка 2: | ||
| =====Некоторые основные команды ассемблера===== | =====Некоторые основные команды ассемблера===== | ||
| - | Команда^Выполняемая операция^Группа^ | + | ^Команда^Выполняемая операция^Группа^ |
| + | |AAA|ASCII-коррекция после сложения|Десятичная арифметика| | ||
| + | |AAD|ASCII-коррекция регистра AX перед делением|Десятичная арифметика| | ||
| + | |AAM|ASCII-коррекция регистра AX после умножения|Десятичная арифметика| | ||
| + | |AAS|ASCII-коррекция после вычитания|Десятичная арифметика| | ||
| + | |ADC|Сложение с переносом|Основная арифметика| | ||
| + | |ADD|Сложение|Основная арифметика| | ||
| + | |AND|Логическое " | ||
| + | |ARPL|Коррекция поля RPL селектора|Привилегированные| | ||
| + | |BOUND|Контроль нахождения индекса массива в границах|Специальные команды| | ||
| + | |BSF|Сканирование бита вперед|Работа с битами| | ||
| + | |BSR|Сканирование бита назад|Работа с битами| | ||
| + | |BSWAP|Перестановка байтов (внутри 32-бит. регистра)|Пересылка данных| | ||
| + | |BT|Проверка бита|Работа с битами| | ||
| + | |BTC|Проверка бита и дополнение|Работа с битами| | ||
| + | |BTR|Проверка бита и сброс в 0|Работа с битами| | ||
| + | |BTS|Проверка бита и установка в 1|Работа с битами| | ||
| + | |CALL|Вызов процедуры|Переходы и процедуры| | ||
| + | |CBW|Преобразование байта в слово|Пересылка данных| | ||
| + | |CDQ|Преобразование двойного слова в счетверенное слово|Пересылка данных| | ||
| + | |CLC|Сброс флажка переноса|Установка флажков| | ||
| + | |CLD|Сброс флажка направления|Установка флажков| | ||
| + | |CLI|Сброс флажка прерывания|Установка флажков| | ||
| + | |CLTS|Сброс флажка переключения задачи|Привилегированные| | ||
| + | |CMC|Инвертирование флажка переноса|Установка флажков| | ||
| + | |CMP|Сравнение двух операндов|Основная арифметика| | ||
| + | |CMPS|Сравнение цепочечных операндов|Цепочечные команды| | ||
| + | |CMPXCHG|Сравнение и обмен|Специальные команды| | ||
| + | |CWD|Преобразование слова в двойное слово|Пересылка данных| | ||
| + | |CWDE|Преобразование слова в двойное слово|Пересылка данных| | ||
| + | |DAA|Десятичная коррекция AL после сложения|Десятичная арифметика| | ||
| + | |DAS|Десятичная коррекция AL после вычитания|Десятичная арифметика| | ||
| + | |DEC|Декремент на 1|Инкремент и декремент| | ||
| + | |DI|Беззнаковое деление|Умножение и деление| | ||
| + | |ENTER|Образование стекового кадра для параметров процедуры|Переходы и процедуры| | ||
| + | |ES|Универсальная единая команда для сопроцессора с плавающей точкой|Сопроцессор| | ||
| + | |F..|Команды сопроцессора с плавающей точкой|Сопроцессор| | ||
| + | |HLT|Останов|Привилегированные| | ||
| + | |IDIV|Знаковое деление|Умножение и деление| | ||
| + | |IMUL|Знаковое умножение|Умножение и деление| | ||
| + | |IN|Ввод из порта|Системные команды| | ||
| + | |INC|Инкремент на 1|Инкремент и декремент| | ||
| + | |INS|Ввод из порта в цепочку|Цепочечные команды| | ||
| + | |INT|Вызов процедуры прерывания |Вызов прерывания| | ||
| + | |INTO|Вызов процедуры прерывания 4, если OF=1 |Вызов прерывания| | ||
| + | |INVD|Недостоверность кэш-памяти |Системные команды| | ||
| + | |INVLPG|Недостоверность элемента буфера TLB |Системные команды| | ||
| + | |IRET|Возврат из прерывания |Вызов прерывания| | ||
| + | |J(cond)|Условная передача управления |Условные команды| | ||
| + | |JCXZ-JECXZ|Переход, | ||
| + | |JMP|Безусловная передача управления |Переходы и процедуры| | ||
| + | |LAHF|Пересылка из регистра флажков в регистр AH|Установка флажков| | ||
| + | |LAR|Загрузка байта прав доступа|Привилегированные| | ||
| + | |LDS|Загрузка полного указателя (для DS)|Сегментные регистры| | ||
| + | |LEA|Загрузка эффективного адреса |Специальные команды| | ||
| + | |LEAVE|Отмена действия команды ENTER перед выходом из процедуры|Переходы и процедуры| | ||
| + | |LES|Загрузка полного указателя (для ES) |Сегментные регистры| | ||
| + | |LFS|Загрузка полного указателя (для FS) |Сегментные регистры| | ||
| + | |LGDT|Загрузка регистра глобальной дескрипторной таблицы |Привилегированные| | ||
| + | |LGS|Загрузка полного указателя (для GS) |Сегментные регистры| | ||
| + | |LIDT|Загрузка регистра дескрипторной таблицы прерываний |Привилегированные| | ||
| + | |LLDT|Загрузка регистра локальной дескрипторной таблицы |Привилегированные| | ||
| + | |LMSW|Загрузка слова состояния машины |Привилегированные| | ||
| + | |LOCK|Префикс выдачи сигнала LOCK# | ||
| + | |LODS|Загрузка цепочечного операнда в аккумулятор |Цепочечные команды| | ||
| + | |LOOP|Управление циклом со счетчиком в регистре CX |Условные команды| | ||
| + | |LOOPE-LOOPZ|Управление циклом со счетчиком в регистре CX |Условные команды| | ||
| + | |LOOPNE-LOOPNZ|Управление циклом со счетчиком в регистре CX |Условные команды| | ||
| + | |LSL|Загрузка предела сегмента |Системные команды| | ||
| + | |LSS|Загрузка полного указателя (для SS) |Сегментные регистры| | ||
| + | |LTR|Загрузка регистра задачи |Привилегированные| | ||
| + | |MOV|Пересылка данных |Пересылка данных| | ||
| + | |MOV(spec)|Пересылка в специальные регистры и из них |Привилегированные| | ||
| + | |MOVS|Пересылка данных из цепочки в цепочку |Цепочечные команды| | ||
| + | |MOVSX|Пересылка со знаковым расширением |Пересылка данных| | ||
| + | |MOVZX|Пересылка с нулевым расширением |Пересылка данных| | ||
| + | |MUL|Беззнаковое умножение|Умножение и деление| | ||
| + | |NEG|Получение дополнительного кода (изменение знака)|Основная арифметика| | ||
| + | |NOP|Пустая операция |Пересылка данных| | ||
| + | |NOT|Инвертирование |Основная арифметика| | ||
| + | |OR|Логическое включающее " | ||
| + | |OUT|Вывод в порт |Системные команды| | ||
| + | |OUTS|Вывод цепочки в порт |Цепочечные команды| | ||
| + | |POP|Извлечение слова из стека |Работа со стеком| | ||
| + | |POPA|Извлечение из стека всех общих регистров |Работа со стеком| | ||
| + | |POPF|Извлечение из стека в регистр флажков |Работа со стеком| | ||
| + | |PUSH|Засылка операнда в стек |Работа со стеком| | ||
| + | |PUSHA|Засылка в стек всех общих регистров |Работа со стеком| | ||
| + | |PUSHF|Засылка в стек регистра флажков |Работа со стеком| | ||
| + | |RCL|Циклический сдвиг влево с участием флажка CF |Команды сдвига| | ||
| + | |RCR|Циклический сдвиг вправо с участием флажка CF |Команды сдвига| | ||
| + | |REP|Префикс повторения цепочечной операции |Цепочечные команды| | ||
| + | |REPE-REPZ|Префикс повторения цепочечной операции |Цепочечные команды| | ||
| + | |REPNE-REPNZ|Префикс повторения цепочечной операции |Цепочечные команды| | ||
| + | |RET|Возврат из процедуры |Переходы и процедуры| | ||
| + | |ROL|Циклический сдвиг влево |Команды сдвига| | ||
| + | |ROR|Циклический сдвиг вправо |Команды сдвига| | ||
| + | |SAHF|Пересылка регистра AH в регистр флажков |Установка флажков| | ||
| + | |SAL|Сдвиг влево (умножение на 2) |Команды сдвига| | ||
| + | |SALC|Установка регистра AL по флажку CF |Установка флажков| | ||
| + | |SAR|Сдвиг вправо (знаковое деление на 2) |Команды сдвига| | ||
| + | |SBB|Вычитание с заемом |Основная арифметика| | ||
| + | |SCAS|Сравнение (сканирование) цепочечных данных |Цепочечные команды| | ||
| + | |SET(cond)|Установка байта по условию |Условные команды| | ||
| + | |SGDT|Сохранение регистра глобальной дескрипторной таблицы |Привилегированные| | ||
| + | |SHL|Сдвиг влево (умножение на 2) |Команды сдвига| | ||
| + | |SHLD|Двойной сдвиг влево |Команды сдвига| | ||
| + | |SHR|Сдвиг вправо (беззнаковое деление на 2) |Команды сдвига| | ||
| + | |SHRD|Двойной сдвиг вправо |Команды сдвига| | ||
| + | |SIDT|Сохранение регистра дескрипторной таблицы прерываний |Привилегированные| | ||
| + | |SLDT|Сохранение регистра локальной дескрипторной таблицы |Привилегированные| | ||
| + | |SMSW|Сохранение слова состояния машины |Привилегированные| | ||
| + | |STC|Установка флажка переноса |Установка флажков| | ||
| + | |STD|Установка флажка направления |Установка флажков| | ||
| + | |STI|Установка флажка прерывания |Установка флажков| | ||
| + | |STOS|Сохранение цепочечных данных |Цепочечные команды| | ||
| + | |STR|Сохранение регистра задачи |Привилегированные| | ||
| + | |SUB|Вычитание |Основная арифметика| | ||
| + | |TEST|Логическое сравнение |Основная арифметика| | ||
| + | |VERR|Проверка сегмента на считывание |Системные команды| | ||
| + | |VERW|Проверка сегмента на запись |Системные команды| | ||
| + | |WAIT|Ожидание |Системные команды| | ||
| + | |WBINVD|Обратная запись и недостоверность кэш-памяти |Системные команды| | ||
| + | |XADD|Обмен и сложение |Специальные команды| | ||
| + | |XCHG|Обмен данными - регистр/ | ||
| + | |XLAT|Перекодирование байта по таблице |Специальные команды| | ||
| + | |XOR|Логическое исключающее " | ||
| + | ===== ОСНОВНЫЕ КОМАНДЫ АРИФМЕТИКИ ===== | ||
| - | AAA ASCII-коррекция | + | ==== Группа "Основная арифметика" ==== |
| - | | + | |
| - | AAM ASCII-коррекция регистра AX после умножения Десятичная арифметика | + | > Команды ADD, OR, ADC, SBB, AND, SUB, XOR, CMP - эти восемь команд можно назвать самыми первыми в системе команд x86 ("первая |
| - | AAS ASCII-коррекция после вычитания Десятичная арифметика | + | |
| - | ADC Сложение с переносом Основная арифметика | + | > Команда TEST также имеет два операнда. Три ее формы почти такие |
| - | ADD Сложение Основная арифметика | + | |
| - | AND Логическое " | + | > Команды NEG и NOT имеют только один операнд, их формат намного проще. |
| - | ARPL Коррекция поля RPL селектора Привилегированные | + | |
| - | BOUND Контроль нахождения индекса массива в границах Специальные | + | > Примечание. Команды |
| - | BSF Сканирование бита вперед Работа с битами | + | |
| - | BSR Сканирование бита назад Работа с битами | + | ==== Операнды, коды, форматы ==== |
| - | BSWAP | + | > |
| - | BT Проверка бита Работа с битами | + | === Порядок операндов === |
| - | BTC Проверка бита и дополнение Работа с битами | + | > На языке ассемблера для команды |
| - | BTR Проверка бита и сброс в 0 Работа с битами | + | |
| - | BTS Проверка бита и установка в 1 Работа с битами | + | |
| - | CALL Вызов процедуры Переходы и процедуры | + | |
| - | CBW Преобразование байта в слово Пересылка данных | + | |
| - | CDQ Преобразование двойного | + | > Здесь CMD - мнемоника команды, dst (destination) - приемник, src (source) - источник. Результат выполнения операции заносится в первый операнд |
| - | CLC Сброс флажка переноса Установка флажков | + | |
| - | CLD Сброс флажка направления Установка флажков | + | > В операциях вычитания из значения dst вычитается значение |
| - | CLI Сброс флажка прерывания Установка флажков | + | |
| - | CLTS Сброс флажка переключения задачи Привилегированные | + | > Таким образом, операции |
| - | | + | |
| - | CMP Сравнение двух операндов Основная | + | dst = dst + src |
| - | CMPS Сравнение цепочечных операндов Цепочечные | + | dst = dst - src |
| - | CMPXCHG | + | |
| - | CWD Преобразование слова в двойное слово Пересылка данных | + | === Команды |
| - | CWDE Преобразование слова в двойное слово Пересылка данных | + | |
| - | DAA Десятичная коррекция AL после сложения Десятичная арифметика | + | > Команда ADC выполняет сложение трех слагаемых: первого (dst) операнда, второго (src) операнда и флага переноса CF (значение 0 или 1). Результат выполнения операции заносится |
| - | DAS Десятичная коррекция AL после | + | |
| - | | + | > По команде |
| - | DIV | + | |
| - | ENTER Образование стекового | + | > Условно это можно показать так: |
| - | ESC | + | |
| - | F... | + | dst = dst + src + CF |
| - | HLT Останов Привилегированные | + | dst = dst - src - CF |
| - | IDIVЗнаковое деление Умножение и деление | + | |
| - | IMUL Знаковое умножение Умножение и деление | + | ==== Логические операции ==== |
| - | | + | |
| - | INC Инкремент на 1 Инкремент и декремент | + | > Команды |
| - | | + | |
| - | INT Вызов | + | ==== Команды с одним операндом ==== |
| - | INTO Вызов процедуры прерывания 4, если OF=1 Вызов прерывания | + | |
| - | INVD Недостоверность кэш-памяти Системные | + | > Команда NEG выполняет арифметическую операцию вычитания операнда из нуля. Фактически это |
| - | INVLPG | + | |
| - | IRET Возврат из прерывания Вызов прерывания | + | > Команда |
| - | J(cond) | + | |
| - | | + | ==== Сравнение двух операндов |
| - | / | + | > |
| - | JMP Безусловная | + | ==== Установка флажков ==== |
| - | LAHF Пересылка из регистра флажков в регистр AH Установка флажков | + | > |
| - | LAR Загрузка байта прав доступа Привилегированные | + | ==== ==== |
| - | LDS Загрузка | + | > |
| - | LEA Загрузка эффективного адреса Специальные команды | + | |
| - | LEAVE Отмена действия команды ENTER перед выходом из процедуры Переходы и процедуры | + | |
| - | LES Загрузка полного указателя (для ES) Сегментные регистры | + | |
| - | | + | |
| - | LGDT Загрузка регистра глобальной дескрипторной таблицы Привилегированные | + | |
| - | LGS Загрузка полного указателя (для GS) Сегментные регистры | + | |
| - | LIDT Загрузка регистра дескрипторной таблицы прерываний Привилегированные | + | |
| - | | + | |
| - | LMSW Загрузка слова состояния | + | |
| - | LOCK Префикс выдачи сигнала LOCK# Системные | + | |
| - | LODS Загрузка цепочечного операнда в аккумулятор Цепочечные команды | + | |
| - | LOOP Управление циклом со счетчиком в регистре CX Условные команды | + | |
| - | LOOPE | + | |
| - | / | + | |
| - | LOOPNE | + | |
| - | / | + | |
| - | LSL Загрузка предела сегмента Системные команды | + | |
| - | LSS Загрузка полного | + | |
| - | LTR Загрузка регистра задачи Привилегированные | + | |
| - | MOV Пересылка данных Пересылка данных | + | |
| - | MOV(spec) Пересылка в специальные регистры и из них Привилегированные | + | |
| - | MOVS Пересылка данных из цепочки в цепочку Цепочечные команды | + | |
| - | | + | |
| - | MOVZX Пересылка с нулевым расширением Пересылка данных | + | |
| - | MUL Беззнаковое умножение Умножение и деление | + | |
| - | NEG Получение дополнительного | + | |
| - | NOP Пустая | + | |
| - | NOT Инвертирование Основная арифметика | + | |
| - | OR Логическое включающее " | + | |
| - | OUT Вывод в порт Системные команды | + | |
| - | OUTS Вывод цепочки в порт Цепочечные команды | + | |
| - | POP Извлечение слова из стека Работа со стеком | + | |
| - | POPA Извлечение из стека всех общих регистров Работа | + | |
| - | POPF Извлечение | + | |
| - | PUSH Засылка операнда в стек Работа со стеком | + | |
| - | PUSHA Засылка в стек всех общих регистров Работа со стеком | + | |
| - | PUSHF Засылка в стек регистра флажков Работа со стеком | + | |
| - | RCL Циклический сдвиг влево с участием флажка CF Команды сдвига | + | |
| - | RCR Циклический сдвиг вправо с участием флажка CF Команды сдвига | + | |
| - | REP Префикс повторения | + | |
| - | REPE | + | |
| - | /REPZ Префикс повторения цепочечной операции Цепочечные команды | + | |
| - | REPNE | + | |
| - | / | + | |
| - | RET Возврат из процедуры Переходы и процедуры | + | |
| - | ROL Циклический сдвиг влево Команды сдвига | + | |
| - | ROR Циклический сдвиг вправо Команды сдвига | + | |
| - | SAHF Пересылка регистра AH в регистр флажков Установка флажков | + | |
| - | | + | |
| - | SALC Установка регистра AL по флажку CF Установка флажков | + | |
| - | SAR Сдвиг вправо (знаковое деление на 2) Команды сдвига | + | |
| - | SBB Вычитание с заемом Основная арифметика | + | |
| - | SCAS Сравнение (сканирование) цепочечных данных Цепочечные команды | + | |
| - | SET(cond) Установка байта по условию Условные | + | |
| - | SGDT Сохранение регистра глобальной дескрипторной таблицы Привилегированные | + | |
| - | SHL Сдвиг влево (умножение на 2) Команды сдвига | + | |
| - | SHLD Двойной сдвиг влево Команды сдвига | + | |
| - | SHR Сдвиг вправо (беззнаковое деление на 2) Команды сдвига | + | |
| - | SHRD Двойной сдвиг вправо Команды | + | |
| - | SIDT Сохранение регистра дескрипторной таблицы | + | |
| - | SLDT Сохранение регистра локальной дескрипторной таблицы Привилегированные | + | |
| - | SMSW Сохранение слова состояния машины Привилегированные | + | |
| - | STC Установка флажка переноса Установка флажков | + | |
| - | STD Установка флажка | + | |
| - | STI Установка флажка | + | |
| - | | + | |
| - | STR Сохранение | + | |
| - | SUB Вычитание Основная арифметика | + | |
| - | TEST Логическое | + | |
| - | VERR Проверка сегмента на считывание Системные | + | |
| - | VERW Проверка сегмента на запись Системные | + | |
| - | WAIT Ожидание Системные команды | + | |
| - | WBINVD | + | |
| - | | + | |
| - | XCHG Обмен данными - регистр/ | + | |
| - | XLAT Перекодирование байта по таблице Специальные | + | |
| - | | + | |