В разделе 4.3 Руководства разработчика программного обеспечения для архитектур Intel 64® и IA-32, раздел * 1002. Том 1: Базовая архитектура , там написано:
Ближний указатель - это 32-битное смещение ... внутри сегмента. Ближайшие указатели используются для всех ссылок на память в плоской модели памяти или для ссылок в сегментированной модели, где подразумевается идентичность сегмента, к которому осуществляется доступ.
Это заставляет меня задуматься: как определяется подразумеваемый сегментный регистр?
Я знаю, что (%eip)
и смещенные (%eip)
(например, -4(%eip)
) адреса по умолчанию используют %cs
, и что (%esp)
и смещенные (%esp)
адреса используют %ss
, но как насчет (%eax)
, (%edx)
, (%edi)
, (%ebp)
и т. Д., И может ли неявный регистр сегмента зависеть также от инструкции, в которой появляется операнд адреса памяти?