Как определяется неявный реестр сегмента около указателя?
-
04-10-2019 - |
Вопрос
В разделе 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
)