Как определяется неявный реестр сегмента около указателя?

StackOverflow https://stackoverflow.com/questions/2877900

Вопрос

В разделе 4.3 Руководство по разработчику Intel 64® и IA-32 Management. Том 1: Базовая архитектура, он говорит:

Около указателя - это 32-битное смещение ... в пределах сегмента. Рядом с указателями используются для всех ссылок на память в плоской модели памяти или для ссылок в сегментированной модели, где подразумевается идентификация доступа к сегменте.

Это приводит меня к вопросу: как определяется подразумеваемый регистр сегмента?

я знаю это (%eip) и перемещенные (%eip) (например -4(%eip)) адреса используются %cs по умолчанию, и что (%esp) и перемещенные (%esp) адреса используются %ss, но что насчет (%eax), (%edx), (%edi), (%ebp) И т. Д. И может и неявный регистр сегмента зависят также на инструкции, в котором появляется операнд памяти?

Это было полезно?

Решение

Кроме как CS а также SS Зарегистрируйте доступ, которые вы упомянули, большинство других доступом будут использовать DS Регистр сегмента. Пару исключений, которые я могу вспомнить:

  • ориентированные на строку инструкции будут использовать ES для «назначения» (неявно адресовано EDI Регистрация) Регистрация сегмента
  • доступ к памяти, используя EBP Зарегистрируйтесь как регистр «базовый адрес» будет использовать SS Регистр сегмента. Однако, если EBP Регистрация используется в качестве масштабированного реестра индекса, используемый сегмент будет DS (если регистрационный адрес базового адреса не ESP)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top