2010-05-20 6 views
3

В разделе 4.3 Intel 64® and IA-32 Architectures Software Developer's Manual. Volume 1: Basic Architecture, он говорит:Как определяется неявный сегментный регистр ближайшего указателя?

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

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

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

ответ

3

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

  • инструкция строковой-ориентированный будет использовать ES для «назначения» (неявно адресованного EDI регистра) сегментом регистре
  • доступа к памяти с использованием EBP регистра в качестве " базовый адрес "будет использовать регистр сегментов SS. Однако, если EBP регистр используется в качестве масштабируемого индекса регистра, используемого сегмента будет DS (если базовый адрес регистра не ESP)
+0

Это отличная информация. Спасибо. –