IP (регистр процессора)
Необходимо перенести содержимое этой статьи в статью Счётчик команд и заменить эту статью на перенаправление. |
IP (англ. Instruction Pointer) — регистр, содержащий адрес-смещение следующей команды, подлежащей исполнению, относительно кодового сегмента CS в процессорах семейства x86.
Регистр IP связан с CS в виде CS:IP, где CS является текущим кодовым сегментом, а IP — текущим смещением относительно этого сегмента.
Регистр IP является 16-разрядным регистром-указателем. Кроме него, в состав регистров этого типа входят SP (англ. Stack Pointer — указатель стека) и BP (англ. Base Pointer — базовый указатель).
Принцип работы
Например, CS содержит значение 2CB5[0]H
, в регистре IP хранится смещение 123H
.
Адрес следующей инструкции, подлежащей исполнению вычисляется путем суммирования адреса в CS (сегменте кода) со смещением в регистре IP:
2CB50H + 123H = 2CC73H
Таким образом, адрес следующей инструкции для исполнения равен 2CC73H
.
При выполнении текущей инструкции процессор автоматически изменяет значение в регистре IP, в результате чего регистровая пара CS:IP всегда указывает на следующую подлежащую исполнению инструкцию.
32-разрядный указатель инструкций
Начиная с процессора Intel 80386 была введена 32-разрядная версия регистра-указателя — EIP. В данном случае IP является младшей частью этого регистра (первые 16 разрядов). Принцип работы EIP в целом схож с работой регистра IP. Основная разница состоит в том, что в защищенном режиме работы процессора в отличие от реального режима регистр CS является селектором (селектор указывает не на сам сегмент в памяти, а на его дескриптор сегмента, в таблице дескрипторов).
64-разрядный указатель инструкций
В 64-разрядных процессорах используется аналогичная по разрядности версия регистра-указателя инструкций — RIP.
Младшей частью этого регистра является регистр EIP.
На основе RIP в 64-разрядных процессорах введен новый метод адресации RIP-relative. В остальном работа RIP аналогична работе EIP-регистра.