Navigation:  SPS > Liste der Operationen > Register-indirekte Adressierung >

Indirekte Adressierung

Vorherige SeiteKapitelübersichtNächste Seite

 

Sie müssen nicht schon beim Schreiben Ihres Programmes die Operanden endgültig festlegen, sondern können sie erst während der Laufzeit bestimmen lassen. Nützlich ist dies, wenn immer wiederkehrende Operationen mit verschiedenen Operanden durchgeführt werden sollen. Wenn Sie z.B. 14 verschiedene Rezepte in den Datenbausteinen DB 1 – 14 gespeichert haben und die Nummer des aktuellen Rezeptes im MW 20 gespeichert ist, programmieren Sie:

 

 AUF DB[MW 20]

 

Wenn im MW 20 eine 5 steht, wird durch diese Anweisung der DB 5 aufgeschlagen und das Programm arbeitet im Folgenden mit dem darin gespeicherten Rezept. Dieses Verfahren nennt man “Speicherindirekte Adressierung”, da der Index in den eckigen Klammern eine beliebige Speicherstelle sein kann.

 

Zum indirekten Zugriff auf einzelne Bits reicht ein Word wegen des großen Adressbereiches von Eingängen, Ausgängen, Merkern und Datenbits von jeweils 65536 Bytes nicht aus, denn schon für die Angabe der Byte-Adresse wird bereits ein Word benötigt. Für die indirekte Adressierung dieser Datenbereiche wird daher ein Doppelwort benötigt. Der Einheitlichkeit halber gilt dies auch dann, wenn auf Bytes, Words oder DWords zugegriffen wird. Um die Bit-Nummer zu codieren, werden die drei niederwertigsten Bits des DWords verwendet. Da diese Bits dann für die Byte-Nummer nicht mehr zur Verfügung stehen, wird diese einfach mit 8 multipliziert und zur Bit-Nummer addiert. Im Ergebnis werden alle Bits eines Datenbereiches einzeln durchnummeriert.

 

 Bit 0.2                bekommt die Nummer          2        hex 0000 0002

 Bit 1.0                bekommt die Nummer          8        hex 0000 0008

 Bit 8.3                bekommt die Nummer        67        hex 0000 0043

 

In der Praxis brauchen Sie sich um diese Details nicht zu kümmern. Wenn Sie das POINTER-Format verwenden, dann programmieren Sie einfach

 

 L        P#8.3

 T        MD 24

 U        A[MD24]

um auf den Ausgang A 8.3 zuzugreifen.

 

Siehe auch:

Register-indirekte-Adressierung