Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| reverseenengineering:основы [2025/07/04 17:49] – [Некоторые основные команды ассемблера] Lex | reverseenengineering:основы [2025/07/04 17:56] (текущий) – [Операнды, коды, форматы] Lex | ||
|---|---|---|---|
| Строка 78: | Строка 78: | ||
| |MOVSX|Пересылка со знаковым расширением |Пересылка данных| | |MOVSX|Пересылка со знаковым расширением |Пересылка данных| | ||
| |MOVZX|Пересылка с нулевым расширением |Пересылка данных| | |MOVZX|Пересылка с нулевым расширением |Пересылка данных| | ||
| - | |MUL|Беззнаковое умножение| Умножение и деление| | + | |MUL|Беззнаковое умножение|Умножение и деление| |
| - | |NEG|Получение дополнительного кода (изменение знака)| Основная арифметика| | + | |NEG|Получение дополнительного кода (изменение знака)|Основная арифметика| |
| |NOP|Пустая операция |Пересылка данных| | |NOP|Пустая операция |Пересылка данных| | ||
| |NOT|Инвертирование |Основная арифметика| | |NOT|Инвертирование |Основная арифметика| | ||
| Строка 129: | Строка 129: | ||
| |XLAT|Перекодирование байта по таблице |Специальные команды| | |XLAT|Перекодирование байта по таблице |Специальные команды| | ||
| |XOR|Логическое исключающее " | |XOR|Логическое исключающее " | ||
| + | |||
| + | ===== ОСНОВНЫЕ КОМАНДЫ АРИФМЕТИКИ ===== | ||
| + | |||
| + | ==== Группа " | ||
| + | |||
| + | > Команды ADD, OR, ADC, SBB, AND, SUB, XOR, CMP - эти восемь команд можно назвать самыми первыми в системе команд x86 (" | ||
| + | |||
| + | > Команда TEST также имеет два операнда. Три ее формы почти такие же, как у команд первой восьмерки и отличаются только в деталях. | ||
| + | |||
| + | > Команды NEG и NOT имеют только один операнд, | ||
| + | |||
| + | > Примечание. Команды умножения и деления помещены в свою отдельную группу: | ||
| + | |||
| + | ==== Операнды, | ||
| + | > | ||
| + | === Порядок операндов === | ||
| + | > На языке ассемблера для команды с двумя операндами принято записывать операнды в следующем порядке: | ||
| + | |||
| + | CMD dst, src | ||
| + | |||
| + | |||
| + | > Здесь CMD - мнемоника команды, | ||
| + | |||
| + | > В операциях вычитания из значения dst вычитается значение src. | ||
| + | |||
| + | > Таким образом, | ||
| + | |||
| + | dst = dst + src | ||
| + | dst = dst - src | ||
| + | |||
| + | === Команды с участием флага переноса === | ||
| + | |||
| + | > Команда ADC выполняет сложение трех слагаемых: | ||
| + | |||
| + | > По команде SBB из значения первого (dst) операнда вычитается значение второго (src) операнда. Из полученного результата вычитается значение флага переноса CF (значение 0 или 1). Результат выполнения операции заносится в первый (dst) операнд. | ||
| + | |||
| + | > Условно это можно показать так: | ||
| + | |||
| + | dst = dst + src + CF | ||
| + | dst = dst - src - CF | ||
| + | |||
| + | ==== Логические операции ==== | ||
| + | |||
| + | > Команды AND, OR, XOR выполняют поразрядные логические операции для двух своих операндов. Для каждой битовой позиции результат определяется так: | ||
| + | |||
| + | ==== Команды с одним операндом ==== | ||
| + | |||
| + | > Команда NEG выполняет арифметическую операцию вычитания операнда из нуля. Фактически это равносильно изменению знака операнда. | ||
| + | |||
| + | > Команда NOT выполняет порязрядную логическую операцию инвертирования, | ||
| + | |||
| + | ==== Сравнение двух операндов ==== | ||
| + | > | ||
| + | ==== Установка флажков ==== | ||
| + | > | ||
| + | ==== ==== | ||
| + | > | ||