Hallo ally.t, da du keinen Prozessor angegeben hast versuche ich das mal mit abstrakten Begriffen. Die absolute Adressierung ist die einfachste.
Store r1, #20000000 -> Speichere den Inhalt von Register r1 direkt an der angegebenen Adresse 20000000.
Bei der indirekten Adressierung wird ein zusätzliches oder spezielles Adressregister zur Bestimmung des Speichers benutzt.
Load ar1, #20000000 -> Lade ar1 (spezielles Adressregister) mit der Zieladresse 20000000.
Store r1, ar1 -> Speichere den Inhalt von r1 dorthin wo ar1 zeigt. Hier also nach 20000000.
De indizierte Adressierung wird meist für strukturierte Zeiger und/oder Arrays benutzt. Hier kommen häufig drei Register zum Einsatz. Das Datenregister (r1), das Adressregister (ar1) und das Indexregister (ir1).
Load ar1, #20000000 -> Lade ar1 (spezielles Adressregister) mit der Zieladresse 20000000.
Load ir1, #5 -> Lade den Offset 5 ins Indexregister.
Store r1, ir2, ar1 -> Speichere den Inhalt von r1 dorthin wo ar1 zeigt, plus das Indexregister, also nach 20000005.
Das ist nur ein grober Abriss. Oft können die Register frei gewählt werden und hängt die Adressrechnung beim Indizieren vom Datentyp ab. Speichert der letzte Befehl 32Bit ab wird r1 dann statt in 20000005 in 20000020, also 5*4 Byte (32Bit) ab. Auch ein automatischer Inkrement oder Dekrement des Indexregisters gibt es. So können recht effizient Schleifen realisiert werden. ARM Prozessoren bieten da sehr viel, andere aber auch. Gruß jobe
Sonstiger Berufsstatus, Punkte: 505