Eingebettete Systeme - Adressierungsmodi

Ein addressing modebezieht sich darauf, wie Sie einen bestimmten Speicherort adressieren. Es gibt fünf verschiedene Möglichkeiten oder fünf Adressierungsmodi, um diese Anweisung auszuführen:

  • Sofortiger Adressierungsmodus
  • Direkter Adressierungsmodus
  • Registrieren Sie den direkten Adressierungsmodus
  • Registrieren Sie den indirekten Adressierungsmodus
  • Indizierter Adressierungsmodus

Sofortiger Adressierungsmodus

Beginnen wir mit einem Beispiel.

MOV A, #6AH

Im Allgemeinen können wir schreiben,

MOV A, #data

Es wird als bezeichnet immediate weil 8-Bit-Daten sofort zum Akkumulator (Zieloperand) übertragen werden.

Die folgende Abbildung beschreibt die obige Anweisung und ihre Ausführung. Der Opcode 74H wird unter der Adresse 0202 gespeichert. Die Daten 6AH werden unter der Adresse 0203 im Programmspeicher gespeichert. Nach dem Lesen des Opcodes 74H werden die Daten an der nächsten Programmspeicheradresse an den Akkumulator A übertragen (E0H ist die Adresse des Akkumulators). Da der Befehl aus 2 Bytes besteht und in einem Zyklus ausgeführt wird, wird der Programmzähler um 2 erhöht und zeigt auf 0204 des Programmspeichers.

Note- Das Symbol '#' vor 6AH zeigt an, dass es sich bei dem Operanden um Daten handelt (8 Bit). Ohne '#' wird die Hexadezimalzahl als Adresse verwendet.

Direkter Adressierungsmodus

Dies ist eine weitere Möglichkeit, einen Operanden zu adressieren. Hier wird die Adresse der Daten (Quelldaten) als Operand angegeben. Nehmen wir ein Beispiel.

MOV A, 04H

Die Registerbank Nr. 0 (4. Register) hat die Adresse 04H. Wenn der MOV-Befehl ausgeführt wird, werden die in Register 04H gespeicherten Daten zum Akkumulator verschoben. Da das Register 04H die Daten 1FH enthält, wird 1FH zum Akkumulator bewegt.

Note- Im Gegensatz zum Sofortmodus haben wir im Direktadressierungsmodus kein '#' verwendet. Wenn wir '#' verwendet hätten, wäre der Datenwert 04H anstelle von 1FH an den Akkumulator übertragen worden.

Schauen Sie sich nun die folgende Abbildung an. Es zeigt, wie die Anweisung ausgeführt wird.

Wie in der obigen Abbildung gezeigt, handelt es sich um einen 2-Byte-Befehl, für dessen Abschluss 1 Zyklus erforderlich ist. Der PC wird um 2 erhöht und zeigt auf 0204. Der Opcode für den Befehl MOV A, Adresse ist E5H. Wenn der Befehl bei 0202 ausgeführt wird (E5H), wird der Akkumulator aktiv und bereit, Daten zu empfangen. Dann geht der PC zur nächsten Adresse als 0203 und sucht die Adresse des Ortes von 04H, an dem sich die Quelldaten (die zum Akkumulator übertragen werden sollen) befinden. Um 04 Uhr findet die Steuerung die Daten 1F und überträgt sie an den Akkumulator, und daher ist die Ausführung abgeschlossen.

Registrieren Sie den direkten Adressierungsmodus

In diesem Adressierungsmodus verwenden wir den Registernamen direkt (als Quelloperand). Versuchen wir anhand eines Beispiels zu verstehen.

MOV A, R4

Zu einem Zeitpunkt können die Register Werte von R0 bis R7 annehmen. Es gibt 32 solcher Register. Um 32 Register mit nur 8 Variablen zur Adressierung von Registern zu verwenden, werden Registerbänke verwendet. Es gibt 4 Registerbanken mit den Namen 0 bis 3. Jede Bank besteht aus 8 Registern mit den Namen R0 bis R7.

Es kann jeweils eine einzelne Registerbank ausgewählt werden. Die Auswahl einer Registerbank wird durch a ermöglichtSpecial Function Register (SFR) benannt Processor Status Word(PSW). PSW ist ein 8-Bit-SFR, bei dem jedes Bit nach Bedarf programmiert werden kann. Bits werden von PSW.0 bis PSW.7 bezeichnet. PSW.3 und PSW.4 werden zur Auswahl von Registerbänken verwendet.

Schauen Sie sich nun die folgende Abbildung an, um ein klares Verständnis der Funktionsweise zu erhalten.

Opcode EC wird für MOV A, R4 verwendet. Der Opcode wird unter der Adresse 0202 gespeichert, und wenn er ausgeführt wird, geht die Steuerung direkt zu R4 der respektierten Registerbank (die in PSW ausgewählt ist). Wenn die Registerbank Nr. 0 ausgewählt ist, werden die Daten von R4 der Registerbank Nr. 0 in den Akkumulator verschoben. Hier wird 2F um 04 Uhr gespeichert. 04H repräsentiert die Adresse von R4 der Registerbank # 0.

Die Datenbewegung (2F) ist fett hervorgehoben. 2F wird vom Datenspeicherplatz 0C H zum Akkumulator übertragen und ist als gepunktete Linie dargestellt. 0CH ist der Adressort von Register 4 (R4) der Registerbank Nr. 1. Der obige Befehl ist 1 Byte und erfordert 1 Zyklus für die vollständige Ausführung. Dies bedeutet, dass Sie den Programmspeicher speichern können, indem Sie den Register-Direktadressierungsmodus verwenden.

Registrieren Sie den indirekten Adressierungsmodus

In diesem Adressierungsmodus wird die Adresse der Daten als Operand im Register gespeichert.

MOV A, @R0

Hier wird der Wert innerhalb von R0 als Adresse betrachtet, die die Daten enthält, die an den Akkumulator übertragen werden sollen. Example: Wenn R0 den Wert 20H hat und die Daten 2FH an der Adresse 20H gespeichert sind, wird der Wert 2FH nach Ausführung dieses Befehls an den Akkumulator übertragen. Siehe folgende Abbildung.

Also der Opcode für MOV A, @R0ist E6H. Unter der Annahme, dass die Registerbank # 0 ausgewählt ist, enthält der R0 der Registerbank # 0 die Daten 20H. Die Programmsteuerung bewegt sich zu 20H, wo sie die Daten 2FH lokalisiert und 2FH zum Akkumulator überträgt. Dies ist ein 1-Byte-Befehl, und der Programmzähler erhöht sich um 1 und bewegt sich zu 0203 des Programmspeichers.

Note- Nur R0 und R1 dürfen einen Register-Indirekt-Adressierungsbefehl bilden. Mit anderen Worten, der Programmierer kann eine Anweisung entweder mit @ R0 oder @ R1 erstellen. Alle Registerbanken sind erlaubt.

Indizierter Adressierungsmodus

Wir werden zwei Beispiele nehmen, um das Konzept des indizierten Adressierungsmodus zu verstehen. Schauen Sie sich die folgenden Anweisungen an -

MOVC A, @A+DPTR

und

MOVC A, @A+PC

Dabei ist DPTR der Datenzeiger und PC der Programmzähler (beide sind 16-Bit-Register). Betrachten Sie das erste Beispiel.

MOVC A, @A+DPTR

Der Quelloperand ist @ A + DPTR. Es enthält die Quelldaten von diesem Speicherort. Hier fügen wir den Inhalt von DPTR mit dem aktuellen Inhalt des Akkumulators hinzu. Dieser Zusatz gibt eine neue Adresse an, die die Adresse der Quelldaten ist. Die Daten, auf die diese Adresse zeigt, werden dann an den Akkumulator übertragen.

Der Opcode ist 93H. DPTR hat den Wert 01FE, wobei 01 in DPH (höhere 8 Bits) und FE in DPL (niedrigere 8 Bits) liegt. Der Akku hat den Wert 02H. Dann wird eine 16-Bit-Addition durchgeführt und 01FE H + 02H ergibt 0200 H. Daten am Ort 0200H werden an den Akkumulator übertragen. Der vorherige Wert im Akkumulator (02H) wird durch die neuen Daten ab 0200H ersetzt. Die neuen Daten im Akkumulator sind in der Abbildung hervorgehoben.

Dies ist ein 1-Byte-Befehl mit 2 Zyklen, die für die Ausführung benötigt werden, und die für diesen Befehl erforderliche Ausführungszeit ist im Vergleich zu vorherigen Befehlen (die alle jeweils 1 Zyklus waren) hoch.

Das andere Beispiel MOVC A, @A+PCfunktioniert genauso wie im obigen Beispiel. Anstatt DPTR mit dem Akkumulator hinzuzufügen, werden hier die Daten innerhalb des Programmzählers (PC) mit dem Akkumulator hinzugefügt, um die Zieladresse zu erhalten.