Wie wird die impliziten Segmentregister in der Nähe eines Zeigers bestimmt?
-
04-10-2019 - |
Frage
In Abschnitt 4.3 von Intel 64® und IA-32 Architektur Software Developer Benutzerhandbuch . Band 1: Grund Architektur , heißt es:
A in der Nähe Zeiger ist ein 32-Bit-Offset ... innerhalb eines Segments. Near-Zeiger werden für alle Speicherreferenzen in einem flachen Speichermodell oder für Referenzen in einem segmentierten Modell, bei dem die Identität des Segments verwendet wird, impliziert zugegriffen wird.
Dies führt mich zu fragen: Wie wird das implizierte Segment bestimmt Register
Ich weiß, dass (%eip)
und verdrängten (%eip)
(zB -4(%eip)
) Adressen verwenden %cs
standardmäßig und dass (%esp)
und verschoben (%esp)
Adressen verwenden %ss
, aber was ist (%eax)
, (%edx)
, (%edi)
, (%ebp)
etc. und kann das implizite Segmentregister abhängen auch auf der Anweisung, dass der Speicheradresse Operanden erscheint in?
Lösung
Anders als CS
und SS
Registerzugriffe, die Sie erwähnt haben, die meisten anderen Zugängen das DS
Segmentregister verwendet wird. Ein paar Ausnahmen, dass ich mich erinnern kann:
- die Zeichenfolge orientierte Anweisungen die
ES
für das ‚Ziel‘ verwenden (implizit durch dieEDI
Register adressiert) Segmentregister - greift auf den Speicher der
EBP
Register als ‚Basisadresse‘ Register verwendet, wird dasSS
Segmentregister verwenden. Wenn jedoch dieEBP
Register als ein skaliertes Indexregister verwendet wird, das Segment wirdDS
verwendet wird (es sei denn, das Basisadressenregister istESP
)