Comment le registre de segment implicite d'un pointeur près déterminé?
-
04-10-2019 - |
Question
Dans la section 4.3 de Intel 64® et IA-32 Logiciel Architectures Manuel du développeur . Volume 1: Architecture de base , il dit:
Un pointeur près est un décalage de 32 bits ... dans un segment. pointeurs proches sont utilisés pour toutes les références de mémoire dans un modèle de mémoire plat ou pour les références données dans un modèle segmenté où l'identité du segment est en cours d'accès implicite.
Cela conduit à me demander: comment est déterminé le registre secteur implicite
Je sais que (%eip)
et (%eip)
déplacées (par exemple -4(%eip)
) adresses utilisent %cs
par défaut, et que (%esp)
et adresses (%esp)
déplacées utilisent %ss
, mais qu'en est-(%eax)
, (%edx)
, (%edi)
, (%ebp)
etc., et peuvent le registre de segment implicite dépendent également sur l'instruction que l'adresse de mémoire opérande apparaît dans?
La solution
Autre que registre CS
et SS
accès que vous avez mentionné, la plupart des autres accès utiliseront le registre de segment DS
. A exceptions couple que je peux rappeler:
- les instructions cordage-utilisera le
ES
pour la 'destination' (adressée implicitement par le registreEDI
) registre de segment - accès à la mémoire en utilisant le registre de
EBP
comme un registre « d'adresse de base » utilisera le registre de segment deSS
. Toutefois, si le registre d'EBP
est utilisé comme registre d'index mis à l'échelle, le segment utilisé seraDS
(sauf si le registre d'adresse de base estESP
)