Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| reverseenengineering:регитсры [2025/07/01 17:28] – [ECX] Lex | reverseenengineering:регитсры [2025/07/04 17:33] (текущий) – [Регистры общего назначения] Lex | ||
|---|---|---|---|
| Строка 49: | Строка 49: | ||
| ===== Регистры общего назначения ===== | ===== Регистры общего назначения ===== | ||
| - | ^ Имя регистра | + | ^ Имя регистра |
| | EAX | Аккумулятор (Accumulator) | | EAX | Аккумулятор (Accumulator) | ||
| | EBX | База (Base) | | EBX | База (Base) | ||
| Строка 58: | Строка 58: | ||
| > EAX (extended accumulator register). Часто используется для операций ввода-вывода, | > EAX (extended accumulator register). Часто используется для операций ввода-вывода, | ||
| + | |||
| + | > При расширении до 32 бит, 16-битные регистры стали частью новых 32-битных регистров. Например, | ||
| + | |||
| + | > При переходе к 64-битным регистрациям, | ||
| + | |||
| + | > Таким образом, | ||
| ==== EBX ==== | ==== EBX ==== | ||
| > EBX (base register). Применяется как указатель на данные в сегменте данных и для хранения адресов. | > EBX (base register). Применяется как указатель на данные в сегменте данных и для хранения адресов. | ||
| + | |||
| + | > Один из восьми основных регистров общего назначения в архитектуре x86 и x86-64 процессоров Intel. Это 32-битный регистр, | ||
| + | |||
| + | > Регистр EBX используется для хранения базового адреса, | ||
| + | |||
| + | > **Доступ к элементам массива.** Регистр EBX содержит адрес начала массива, | ||
| + | |||
| + | > **Работа со структурами.** Регистр EBX содержит адрес структуры, | ||
| + | |||
| + | > **Индексная адресация.** Регистр EBX содержит адрес начала массива, | ||
| + | |||
| + | |||
| ==== ECX ==== | ==== ECX ==== | ||
| > ECX (count register). Традиционно используется в циклах как счетчик итераций. | > ECX (count register). Традиционно используется в циклах как счетчик итераций. | ||
| + | > Один из основных регистров общего назначения в архитектуре x86 и x86-64 процессоров Intel. Это 32-битный регистр, | ||
| + | |||
| + | > Регистр ECX состоит из двух 8-битных регистров: | ||
| + | |||
| + | > Счётчик циклов — регистр ECX часто используется как счётчик в циклах, | ||
| + | |||
| + | > Указание количества сдвигов или вращений — младший байт регистра ECX (CL) используется для указания количества сдвигов или вращений в соответствующих инструкциях (например, | ||
| + | |||
| + | > Передача аргументов — в некоторых соглашениях о вызовах функций (calling conventions) регистр ECX используется для передачи аргументов. | ||
| + | |||
| + | > Пример использования как счётчик циклов: | ||
| + | |||
| + | > Пример использования в сдвиговых операциях: | ||
| + | |||
| + | > Ограничения: | ||
| ==== EDX ==== | ==== EDX ==== | ||
| + | |||
| + | > EDX (data register). Дополняет eax в операциях умножения и деления, | ||
| + | |||
| + | > Регистр данных, | ||
| + | |||
| + | > Арифметические операции: | ||
| + | |||
| + | > Ввод-вывод: | ||
| + | |||
| + | > Соглашения о вызовах: | ||
| + | |||
| + | > Логические операции: | ||
| + | |||
| + | > Разделение на части: EDX можно обращаться как к 16-битному регистру DX (старшие 16 бит) и 8-битным DH (старший байт) и DL (младший байт). | ||
| + | |||
| + | > Совместимость с другими регистрами: | ||
| + | |||
| + | > Регистр EDX остается важным элементом в низкоуровневом программировании, | ||
| + | ==== RAX (Accumulator Register) ==== | ||
| + | |||
| + | > Используется для арифметических, | ||
| + | |||
| + | > 64-битный регистр в архитектуре процессоров x86-64. Представляет собой расширенную версию 32-битного регистра EAX. | ||
| + | |||
| + | > Структура регистра: | ||
| + | >> RAX (64 бита) — основной регистр. | ||
| + | >> EAX (32 бита) — нижние 32 бита регистра RAX. | ||
| + | >> AX (16 бит) — нижние 16 бит регистра EAX. | ||
| + | |||
| + | > При использовании регистра RAX меняется значение всех трёх частей, | ||
| + | |||
| + | > Регистр RAX используется для выполнения арифметических и логических операций. Также он применяется для: | ||
| + | |||
| + | >> Перемещения данных — RAX часто используется как операнд для различных инструкций. | ||
| + | |||
| + | >> Хранения возвращаемых значений — в большинстве соглашений о вызовах функций для 64-битных систем регистр RAX используется для хранения возвращаемых значений. | ||
| + | |||
| + | |||
| + | ==== RBX (Base Register) ==== | ||
| + | > Используется для хранения данных и может использоваться как базовый регистр при адресации памяти. | ||
| + | ==== RCX (Counter Register) ==== | ||
| + | > Используется в операциях цикла и как счетчик в командах REP и LOOP. | ||
| + | ==== RDX (Data Register) ==== | ||
| + | > Используется в арифметических операциях, | ||
| + | ==== RSI (Source Index) ==== | ||
| + | > Используется для указания на исходный адрес при операциях с памятью (например, | ||
| + | ==== RDI (Destination Index) ==== | ||
| + | > Используется для указания на адрес назначения при операциях с памятью. | ||
| + | ==== R8-R15 (Дополнительные регистры) ==== | ||
| + | > Введены в 64-разрядной архитектуре, | ||
| + | |||
| + | ===== Специальные регистры ===== | ||
| + | ==== RSP (Stack Pointer) ==== | ||
| + | > Указывает на вершину стека. | ||
| + | ==== RBP (Base Pointer) ==== | ||
| + | > Используется для доступа к параметрам и локальным переменным в стеке. | ||
| + | ==== CS (Code Segment) ==== | ||
| + | > Хранит базовый адрес сегмента кода в ОЗУ, откуда процессор считывает команды для выполнения. Если проводить аналогию между кодом и книгой, | ||
| + | ==== RIP (Instruction Pointer) ==== | ||
| + | > Указывает на следующую инструкцию, | ||
| + | ==== FLAGS (или RFLAGS в 64-разрядной системе) ==== | ||
| + | > Хранит флаги состояния процессора, | ||
| ===== Указательные и индексные регистры ====== | ===== Указательные и индексные регистры ====== | ||
| Строка 73: | Строка 168: | ||
| | ESI | Индекс источника (Source index) | | ESI | Индекс источника (Source index) | ||
| | EDI | Индекс приёмника (Destination index) | | EDI | Индекс приёмника (Destination index) | ||
| - | | FLAGS, | + | | FLAGS, |
| | EIP | Указатель команд. | | EIP | Указатель команд. | ||
| | СS | Хранение базовых адресов (Code Segment) | | СS | Хранение базовых адресов (Code Segment) | ||
| - | | DS | (Data Segment Register) | + | | DS | (Data Segment Register) |
| - | | ES | (Extra Segment Register) | + | | ES | (Extra Segment Register) |
| - | | FS | (Additional Segment Registers) | + | | FS | (Additional Segment Registers) |
| - | | GS | (Additional Segment Registers) | + | | GS | (Additional Segment Registers) |
| - | | SS | (Stack Segment Register) | + | | SS | (Stack Segment Register) |
| | RAX | (Accumulator Register) | | RAX | (Accumulator Register) | ||
| | RBX | (Base Register) | | RBX | (Base Register) | ||
| - | | AX | | | | + | | AX | | Младший регистр EAX. Умножение, |
| - | | AH | | | | + | | BX | | Базовый регистр в вычислениях адреса |
| - | | AL | | | | + | | CX | | Счетчик циклов |
| - | | B, BH, BL | + | | DX | | Определение адреса ввода/ |
| - | | SP, BP, SI, DI| | | | + | | AH | | high AX - старшая половина 8 бит, содержат адрес начала 64Kb сегмента, |
| - | | SPL, SDL, SIL, DIL| | | | + | | AL | | low AX — младшая половина 8 бит, содержат адрес начала 64Kb сегмента, |
| - | | RxD, RxW, RxB| | | | + | | B, BH, BL |
| - | | A | | | | + | | SP, BP, SI, DI| | 64-битный |
| - | | B, | + | | SPL, SDL, SIL, DIL| | 64-битный |
| - | | DC | | | | + | | RxD, RxW, RxB| |
| - | | SP | | | | + | | A | |
| - | | LDA | | | | + | | B, |
| + | | DC | | 6-битный регистр хранения селекторов | ||
| + | | SP | | 16-битный, | ||
| + | | LDA | | ||
| | | | | ||
| | | | | ||
| Строка 121: | Строка 219: | ||
| | 20 | VIP | Флаг ожидания виртуального прерывания: | | 20 | VIP | Флаг ожидания виртуального прерывания: | ||
| | 21 | ID | Флаг ID: если этот бит установлен, | | 21 | ID | Флаг ID: если этот бит установлен, | ||
| + | |||
| + | > Основными являются флаги переноса, | ||
| + | |||
| + | > В дополнение к регистрам общего назначения x86-64 предоставляет регистры специального назначения, | ||
| + | |||
| + | > Также есть шестнадцать 128-битных регистров XMM (XMM0 - XMM15) и набор инструкций SSE/SSE2. Каждый регистр можно настроить как четыре 32-битных регистра с плавающей точкой; | ||