РОНы – 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 могут быть использованы как дополнительные базовые регистры при вычислении линейного адреса.