Speicherindirekte Adressierung
Programmanweisungen, die mit der speicherindirekten Adressierung arbeiten, setzen sich zusammen aus einer Operation, einem Operandenkennzeichen und einer [Adresse] (die Adresse muß in eckigen Klammern angegeben werden). Je nach Operandenkennzeichen wertet die Operation die Daten, die an der angegebenen Adresse abgelegt sind, als Pointer im Wort- bzw. im Doppelwortformat aus. Das zu wählende Pointerformat ist abhängig von dem verwendeten Operanden. Der vollständige Operand der Daten besteht aus einem Operandenkennzeichen und einem Pointer (siehe folgende Beispiele). Der Vorteil der indirekten Adressierung ist, daß Sie den Operanden der Anweisung während der Programmbearbeitung dynamisch modifizieren können.
Bei der speicherindirekten Adressierung besteht der Operand aus den beiden folgenden Teilen:
1. Operandenkennzeichen
· Bei Bits, die von Bitverknüpfungsoperationen angesprochen werden, können Sie die Operandenkennzeichen E, A, M, L, DIX oder DBX verwenden.
· Bei Bytes, Wörtern und Doppelwörtern, die von Ladeoperationen angesprochen werden, können Sie die Speicherbereiche E, A, M, L, D und PE verwenden, um die folgenden Operandenkennzeichen anzugeben: EB, EW, ED, DBB, DBW, DBD, DIB, DIW, DID, PEB, PEW, PED, etc.
· Bei Bytes, Wörtern und Doppelwörtern, die von Transferoperationen angesprochen werden, können Sie die Speicherbereiche E, A, M, L, DB, DI und PA verwenden, um die folgenden Operandenkennzeichen anzugeben: EB, EW, ED, DBB, DBW, DBD, DIB, DIW, DID, PAB, PAW, PAD, etc.
· Zum Adressieren von Zeiten, Zählern oder Bausteinen verwenden Sie die Bereichskennungen T, Z, DB, DI, FB, FC.
3. Die Adresse von Pointern im Wort- oder Doppelwortformat wird in eckigen Klammern "[ ]" angegeben:
· Pointer im Wortformat - Ein Wort, das die Nummer einer Zeit (T), eines Zählers (Z), eines Datenbausteins (DB, DI) oder eines Codebausteins (FC, FB) angibt. Bei einem Pointer im Wortformat handelt es sich um eine Dezimalzahl.
· Pointer im Doppelwortformat - Ein Doppelwort, das in diesem Fall die genaue Adresse eines Bits, Bytes, Worts oder Doppelworts angibt. Ein Doppelwort hat folgendes Pointerformat: P#Byte.Bit.
· Der Pointer muß für die speicherindirekte Adressierung in einem der folgenden Bereiche gespeichert werden:
- M - Merker
- L - Lokaldaten
- D - Datenbaustein (DB oder DI)
- STAT - Statische Daten (nicht bei multiinstanzfähigen Bausteinen)
Hinweis
Wenn Sie auf ein Byte, Wort oder Doppelwort zugreifen möchten, das über speicherindirekte Adressierung angesprochen wird, vergewissern Sie sich zunächst, daß die Bitnummer des Pointers im Doppelwortformat 0 ist.
Beispiel für einen Pointer im Wortformat:
L 5 //Lade den Wert des Pointers in AKKU 1.
T MW2 //Transferiere den Pointer nach MW2.
L T [MW2] //Lade den aktuellen Wert der Zeit T5 in AKKU 1.
Beispiel für einen Pointer im Doppelwortformat:
L P#8.7 //Lade den Wert des Pointers in AKKU 1.
T MD2 //Transferiere den Pointer nach MD2.
U E [MD2] //Frage den Signalzustand an Eingang E 8.7 ab
= A [MD2] //und weise den Signalzustand Ausgang A 8.7 zu.
Beispiele für speicherindirekte Adressierung Beschreibung
U E [MD 2] Führe eine UND-Verknüpfung mit dem Eingangsbit aus. Die Adresse befindet sich in Merkerdoppelwort MD2.
= DIX [DBD 2] Weise den Signalzustand des VKE-Bits dem Instanz-Datenbit zu. Die Adresse befindet sich im Datendoppelwort DBD2.
L EB [DID 4] Lade das Eingangsbyte in AKKU 1. Die Adresse befindet sich im Instanzdoppelwort DID4.
AUF DB [LW 2] Öffne den Datenbaustein. Die Nummer des Datenbausteins befindet sich im Lokaldatenwort LW2.