reverseenengineering:основы

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

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