Die AVR Mikrocontroller unterstützen mächtige und effiziente Adressierungsarten, um auf
den Programmspeicher (Flash) und den Datenspeicher (SRAM, Register, I/O-Speicher und
erweiterten I/O-Speicher) zuzugreifen. Nachfolgend werden die verschiedenen Arten der
Adressierung beschrieben.
In den Abbildungen bedeutet OP das Stück des Operationscodes
innerhalb des Befehlswortes. Aus Gründen der Vereinfachung zeigen nicht alle Bilder den
exakten Ort der adressierenden Bits. Die Variablen RAMEND und FLASHEND stehen für die
höchste Speicherzelle im Daten- und Programmspeicher. Nicht alle Adressierungsarten sind
in allen Bausteinen verfügbar.
Der Operand für den Befehl ist im Register d (Rd).
Die Operanden für den Befehl sind in den Registern d (Rd) und r (Rr) enthalten. Das
Ergebnis der Operation wird im Register d (Rd) abgelegt.
Die Adresse des I/O-Operanden ist in den 6 Bits des Befehlswortes enthalten. Rr/Rd ist die
Adresse des Ziel- oder Quellregisters. In manchen Bausteinen sind mehr als 64
Speicherzellen im I/O-Bereich vorhanden. Dieser erweiterte Speicherbereich von 64 bis 255
kann nur über die Datenadressierung und nicht über die I/O-Adressierung erreicht werden.
Die 16 Bit - Adresse in den unteren 16 Bit des zwei Worte langen Befehls gibt die
Speicherzelle im Datenspeicher an. Rr/Rd ist die Adresse des Ziel- oder Quellregisters.
Die Adresse des Operanden ergibt sich aus der Addition des Y- oder Z-Registers mit den 6
Bits (Versatz) in dem Befehlswort. Rr/Rd ist die Adresse des Ziel- oder Quellregisters.
Die Adresse des Operanden wird über den Inhalt des X-, Y- oder Z-Registers bestimmt. In
Bausteinen ohne SRAM entspricht die indirekte Datenadressierung der indirekten
Registeradressierung. Die indirekte Registeradressierung ist eine Teilmenge der indirekten
Datenadressierung, da der Datenspeicher von 0 bis 31 im Registerbereich liegt.
Indirekte Datenadressierung mit vorherigem Dekrement:
Bei dieser Art der Adressierung wird das X-, Y- oder Z-Register vor der Ausführung des
Befehls dekrementiert. Die Adresse des Operanden ist also der um eins verminderte Inhalt
des entsprechenden Registers.
Bei dieser Art der Adressierung wird das X-, Y- oder Z-Register nach der Ausführung des
Befehls inkrementiert. Die Adresse des Operanden ist also der Inhalt des entsprechenden
Registers, bevor dieses um eins erhöht wird.
Die Adresse der Daten wird im Z-Register angegeben. Die oberen 15 Bit geben die
Wortadresse an. Beim LPM-Befehl selektiert das LSB das Low-Byte (LSB=0) oder High-Byte
(LSB=1). Beim SPM-Befehl muss das LSB=0 sein, da er sich auf ganze Worte (zwei Bytes)
bezieht. Wenn der ELPM-Befehl genutzt wird, adressiert das RAMPZ-Register den
erweiterten Speicherbereich, das Z-Register die Seite.
Die Adresse der Daten wird im Z-Register angegeben. Nach dem Zugriff auf die angegebene
Speicherzelle wird der Z-Pointer inkrementiert. Die oberen 15 Bit geben die Wortadresse an.
Das LSB adressiert das Low-Byte (LSB=0) oder das High-Byte (LSB=1). Wenn der ELPM Z+
Befehl genutzt wird, adressiert das RAMPZ-Register den erweiterten Speicherbereich, das
Z-Register die Seite.
Die Ausführung des Programms wird an der Adresse fortgesetzt, die in den 16 Bit des
zweiten Befehlswortes angegeben ist.
Die Ausführung des Programms wird an der Adresse fortgesetzt, die in den 16 Bit des Z-
Registers angegeben ist.
Die Ausführung des Programms wird an der Adresse fortgesetzt, die sich aus der Addition
des aktuellen PC mit der relativen Adresse k und 1 ergibt. Die relative Adresse k kann Werte
zwischen -2048 und +2047 annehmen.