Nachdem es im Logik-Thread schonmal angeklungen ist, folgen hier nun die noch verbleibenden Adressierungsvarianten.
Bisher kam man ja ganz gut damit zurecht und eigentlich auch überall hin im Speicher - in niedrige Bereiche (Zeropage), in normales RAM (absolute Adressierung), in Adressen mit einem zusätzlich aufaddierten X- oder Y-Register (absolut X-indiziert bzw. absolut Y-indiziert) oder in gar keine Bereiche, sondern direkt an die Zahlen (#$FF) (unmittelbare Adressierung).
also allgemein: (#$FF) unmittelbar ; (einfach, Typ A) absolut ; (einfach mit Index, Typ C) absolut-indiziert
Allen gemeinsam ist, daß man den gewünschten Wert genau an dem Platz vorfindet, der angegeben worden ist.
Das ist zwar sehr schön übersichtlich und verständlich, aber leider auch ein wenig unflexibel. Wenn man etwa für eine absolut-indizierte Adressierung den Startwert ändern will, bleibt einem nur, den Befehl nochmal mit der zweiten, neuen Adresse zu schreiben, oder - was man wohl generell besser vermeiden sollte (obwohl es sehr COOL! sein kann) - den Programmcode selbst durch das Programm abändern zu lassen und so die Adresse direkt dort zu ändern.
Es gibt aber noch ein andere Variante: die indirekte Adressierung.
Der Name sagt es schon - man landet nicht direkt dort, wo man hinwill, sondern nur indirekt. Soll heißen, man wird im Speicher auf eine andere Stelle verwiesen, wo dann der gesuchte Wert (das Datum) zu finden ist.
Das funktioniert also so:
Anfrage an $Adresse1 ---> Adresse1 "zeigt" auf Adresse2 ---> Adresse2 enthält den Wert
Eigentlich ist es schon ein bißchen wie bei der indizierten Adressierung ($aaaa,X): die eigentliche Adresse wird erst nach einem Zwischenschritt gefunden - mit dem wichtigen Unterschied, daß die Adresse, die bei Indirektion gefunden wird, i.a. den ganzen Speicherbereich abdecken kann. (Und man kann dann sogar noch eine Indizierung anschließen.)
Wer mit dem Pointerkonzept von C/Pascal vertraut ist, wird die Idee dahinter wiedererkennen - Stichwort Doppelpointer.
Für alle BASIC-"Jünger" ist das so ähnlich wie ein Feld/Array, in das man die Positionen eines (anderen) Datenarrays einträgt, wodurch es sich z.B. vermeiden läßt, das komplette (zweite) Datenfeld umzusortieren, wenn dort ein neuer Eintrag erfolgt. Es reicht, das Feld mit den "zeigenden" Positionen im ersten Array an die neue Sortierung anzupassen.
Soetwas nennt man eine Indirektion.
Nicht jede CPU kann soetwas. Und nicht jede, die es kann, kann es für alle Kombinationen mit den anderen Adressierungsmöglichkeiten.
Vorteil der Sache ist z.B., daß man relativ einfach auf große Datenbestände in immer gleicher Form zugreifen kann. Es ist prinzipiell auch möglich, die Indirektion selbst noch ein weiteres Mal indirekt erfolgen zu lassen. Das kann dann kaum eine CPU (zumindest nicht von den MikrocomputerCPUs). Damit lassen sich Listen führen, die auf Listen zeigen, die auf Daten zeigen - wodurch eine sehr schöne "Entkopplung" von Programm und "Werten" erreichbar wird. Man kann soetwas, in gewissen Grenzen, auch durch Kombinieren zweier Indirektionsvarianten nachbilden, auch auf den Mikros.