Основные регистры, используемые при выполнении программ

РОНы – 8 регистров EAX, EBX, ECX, EDX, ESI, EDI, EBP, и ESP являются 32-х битными и используются для хранения следующего:

· Операнды для логических и арифметических операций

· Операнды для вычисления адреса

· Указатели на ячейки памяти

ESP используется для хранения указателя стека и, как правило, для других целей не используется.

При выполнении многих команд, неявно предполагается что операнды хранятся в специфичных регистрах: например, при выполнении строковых операций в качестве операндов используется содержимое регистров ECX, ESI, и EDI. При использовании сегментной модели памяти, некоторые команды принимают, что указатели в определенных регистрах относительны определенных сегментов. Например, некоторые команды принимают, что указатель в регистре ЕВХ указывает на сегмент, начало которого указано в сегменте DS.

EAX — аккумулятор для операнда и результата

EBX — указатель на данные в сегменте, адрес которого указан в регистре DS

ECX — счетчик для строковых и циклических операций

EDX — указатель для ввода/вывода

ESI — указатель на данные в сегменте, на который указывает DS. Указатель источника для строковых операций

EDI — указатель на данные (или местоположение) в сегменте, на который указывает регистр ES. Указатель местоположения результата для строковых операций

ESP — Указатель стека (в сегменте SS)

EBP — Указатель на данные в стеке (в сегменте SS)

В 64-х битном режиме те же регистры называются RAX и т.д. и к ним добавляются регистры R8¸R15, к которым также можно обращаться побайтно (R8L (байт), R8W (слово), R8D (двойное слово) и R8 (четверное слово, т.е. 64 бита))

Сегментные регистры – CS, DS, SS, ES, FS, и GS хранят 16-ти битный селектор сегмента. Селектор сегмента – специальный указатель, который идентифицирует сегмент в памяти. При использовании плоской модели памяти, сегментные регистры загружаются указателями, которые указывают на перекрывающиеся сегменты (одно и то же число). При сегментной модели памяти – в сегментные регистры записываются различные числа. Одновременно программа может использовать до 6 сегментов. Каждому сегментному регистру сопоставляется определенный тип данных:

CS – указывает на сегмент кода

SS – указывает на сегмент стека

DS, ES, FS, и GS – указывают на сегмент данных

В 64-х битном режиме CS, DS, ES, SS устанавливаются в 0, а FS и GS могут быть использованы как дополнительные базовые регистры при вычислении линейного адреса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: