ST - Store indirect to Data Space

ST X/Y/Z, Reg
Reg: R0 - R31
X/Y/Z: Zwei-Byte Pointer

Der X/Y/Z-Pointer besteht aus den 2 Registern, die auf die Programmspeicheradresse zeigen, in der der der Datenwert gespeichert werden soll (siehe Pointer). Es kann auch ein Post-Inkrement- oder ein Pre-Dekrement-Modifier mit dem Pointer verwendet werden.

Mit diesem Befehl wird ein 8-Bit Wert aus einem Register indirekt in das SRAM gespeichert. Zulässig sind die Register R0 bis R31. Die Adresse kann hier nur in Form des X-Pointers angegeben werden. In Chips mit nur 256 Byte SRAM wird nur XL/YL/ZL verwendet. In Chips mit mehr als 256 Byte und bis zu 64kByte SRAM werden XL/YL/ZL und XH/YH/ZH als 16-Bit Pointer verwendet. In Chips mit mehr als 64kByte SRAM wird zusätzlich das RAMPX/RAMPY/RAMPZ-Register verwendet, um einen 24-Bit Adressraum anzusprechen. Pre-Dekrement- und Post-Inkrement-Modifier wirken sich entsprechend nur in einem 8-Bit/16-Bit oder 24-Bit Adressraum aus.
Auf den Pointern Y und Z kann auf manchen Chips statt des Pre-Dekrements oder Post-Inkrements auch ein Versatz zwischen 0 und 31 addiert werden.

Achtung: Wird für das zu ladende Register R26 oder R27 verwendet (dies sind die Register die den X-Pointer definieren) und wird ein Pre-Dekrement oder Post-Inkrement auf den X-Pointer angewandt, so ist das Ergebnis des Befehls nicht vorhersagbar. Gleiches gilt für R28/R29 und den Y-Pointer bzw. R30/R31 und den Z-Pointer.


Beispiele:

ldi YH, high(RamAdresse<<1) ;Laden des High-Bytes der SRAM-Adresse an der Position "RamAdresse"

ldi YL, low(RamAdresse <<1) ;Laden des Low-Bytes der SRAM-Adresse an der Position "RamAdresse"


st Y, r20 ;der Wert aus dem Register R20 wird in die SRAM-Adresse gespeichert, auf die der Pointer Y zeigt

Alternativ:

st Y+, r20 ;der Wert aus dem Register R20 wird in die SRAM-Adresse gespeichert, auf die der Pointer Y zeigt. Anschließend wird der Y-Pointer um 1 erhöht. Dies erfolgt nur innerhalb des jeweiligen 8/16/24-Bit Adressraums des Y-Pointers.

Alternativ:

st -Y, r20 ;Zuerst wird der Y-Pointer um 1 erniedrigt. Dies erfolgt nur innerhalb des jeweiligen 8/16/24-Bit Adressraums des Y-Pointers. Anschließend wird der Wert aus dem Register R20 in die SRAM-Adresse gespeichert, auf die der Pointer Y zeigt

Alternativ:

ld Y+2, r20 ;der Wert aus dem Register R20 wird in die SRAM-Adresse+2 geladen, auf die der Pointer Y zeigt

Statusregister: Keine Beeinflussung
Speicherplatz: 4 Byte
Taktzyklen: 2