Adressierungsarten

Operanden

Operanden

Die meisten Befehle benötigen einen oder zwei Operanden zB.

Befehl <Operand> oder Befehl <Ziel-Operand>,<Quelloperand>

Beispiel: ADD BX, 55

In vielen Fällen muss die CPU zunächst die Speicheradresse berechnen, unter der der Operand zu finden ist.

2. Die effektive Adresse(EA) und die physikalische Adresse

Der Speicheradressierung liegt stets eine effektive Adresse (kurz EA) zugrunde. Bei dieser handelt es sich um den Offsetanteil der physikalischen Adresse, also um die Entfernung in Bytes zwischen dem Beginn des Segments und der Position des Operanden in dem betreffenden Segment.

Im Gegensatz dazu wird die physikalische Adresse, das ist die 20-Bit Adresse, mit der sich eine Speicherstelle im maximal 1 Mbyte großen Arbeitsspeicher adressieren lässt, folgendermaßen berechnet:

Physikalische Adresse = Offsetadresse + Segmentadresse * 16

So bedeutet z.B. die Adreßangabe CS:IP, dass sich die physikalische Adresse aus dem Segment-Register CS, das das Segment festlegt, und dem Befehlsregister IP, das den Offset festlegt, zusammensetzt.

Adressierungsarten

Die Adressierungsarten lassen sich grob in zwei Gruppen unterteilen: Speicheradressierung und Nicht-Speicheradressierung. Bei der Speicheradressierung befindet sich der Operand im Arbeitsspeicher.

3.1 Registeradressierung

Hier befindet sich der Operand in einem CPU-Register:

OR BX,AX

Dieser OR-Befehl verknüpft den Inhalt des AX-Registers mit dem Inhalt des BX-Registers. Sowohl beim Ziel- als auch beim Quelloperanden liegt eine Registeradressierung vor.

3.2 Unmittelbare Adressierung

Hier wird der Operand als ein konstanter 8- oder 16-Bit-Wert angegeben:

ADD AL, -39

Bezogen auf den Quelloperanden liegt eine unmittelbare Adressierung vor, bezogen auf den Zieloperanden dagegen eine Registeradressierung.

3.3 Direkte Adressierung

Hier wird der Operand direkt aus dem Arbeitsspeicher geholt. Die effektive Adresse des Operanden folgt direkt auf den Befehlsopcode.

MOV AX, TABELLE

Dieser MOV-Befehl lädt den Inhalt der Speicherzelle mit der Adresse TABELLE (TABELLE steht für die Offssetadresse) in das AX-Register. Für die Bildung der physikalischen Adresse wird der Offset von TABELLE zu dem (um vier Nullbits erweiterten) Inhalt des DS-Registers.

3.4 Indirekte Adressierung

Hier befindet sich die effektive Adresse des Operanden entweder im BX-, BP,DI- oder SI-Register.

MOV AX, [BX]

Der MOV-Befehl lädt den Inhalt der Speicherstelle, deren Offsetadresse im BX-Register enthalten ist, in das AX-Register.Wenn asl Adreßregister das BX-, DI- oder SI- Register verwendet wird, holt die CPU den Segmentanteil aus dem DS-Register, sonst aus dem SS-Register. Die indirekte Adressierung empfiehlt sich zum Beispiel dann, wenn mehrere Werte innerhalb einer Schleife adressiert werden sollen, da in diesem Fall durch fortlaufende Erhöhung des BX-Registers das nächste Element angesprochen wird.

3.5 Basisrelative Adressierung

Hier wird die effektive Adresse aus der Addition einer 16-Bit Konstante zu dem Inhalt des BX-Registers oder des BP-Registers gebildet.

MOV AX, [BX]+4

Der MOV-Befehl lädt den Inhalt der Speicherstelle, deren Offsetadresse sich durch die Formel "Inhalt des BX-Registers + 4" ergibt, in das AX-Register. Auch hier wird bei Verwendung des BX-Registers der Segmentanteil aus dem DS-Register, sonst aus dem SS-Register geholt.

3.6. Indizierte Adressierung

Diese Adressierungsart entspricht der basisrelativen Adressierung, allerdings wird hier wahlweise das DI- oder das SI-Register verwendet.

MOV DI,2

MOV AL, TABELLE [DI]

Zuerst wird in das DI-Register der Wert 2 geladen. Anschließend wird in das AL-Register der Wert jener Speicherzelle geladen, deren Offsetadresse sich nach der Formel "Offset von TABELLE+ Inhalt des DI-Registers" berechnet. Auch diese Adressierungsart eignet sich gut für den Zugriff auf Tabellen, wobei TABELLE auf den Beginn der Tabelle und das Index-Register auf ein Element in dieser Tabelle zeigt. Sowohl bei Verwendung des DI- als auch bei Verwendung des SI-Registers wird der Segmentanteil aus dem DS-Register geholt.

3.7. Basisindizierte Adressierung

Diese Art der Adressierung wird z.B. für den Zugriff auf zweidimensionale Tabellen verwendet.

Hier wird die effektive Adresse aus der Summe von drei Komponenten gebildet: dem Inhalt eines Basis-Registers (BX oder BP), dem Inhalt eines Index-Registers (DI oder SI) und einem 16-Bit-Wert (TABELLE), wobei dieser auch entfallen kann.

MOV AX, TABELLE [BX][DI]

Dieser MOV-Befehl lädt das AX-Register mit dem Inhalt der Speicherstelle, deren Adresse durch "Offsetadresse von TABELLE+ Inhalt des BX-Registers + Inhalt des DI-Registers" errechnet wird. Wird das BP-Register verwendet, wird der Segmentanteil aus dem SS-Register, sonst aus dem DS-Register geholt.

657 Worte in "deutsch"  als "hilfreich"  bewertet