LD - Load indirect from Data Space

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

Die Pointer bestehen aus 2 Registern, die auf die Programmspeicheradresse zeigen, aus der der Datenwert geladen werden soll. Das X/Y/Z-Register besteht aus XL/YL/ZL und XH/YH/ZH (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 dem SRAM in ein Register geladen. Zulässig sind die Register R0 bis R31. Die Adresse kann hierbei nicht direkt, sondern nur in Form des X/Y/Z-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"


ld r20, Y ;in das Register R20 wird der Wert von der SRAM-Adresse geladen, auf die der Pointer Y zeigt

Alternativ:

ld r20, Y+ ;in das Register R20 wird der Wert von der SRAM-Adresse geladen, 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:

ld r20, -Y ;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 in das Register R20 der Wert von der SRAM-Adresse geladen, auf die der Pointer Y zeigt

Alternativ:

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

Statusregister: Keine Beeinflussung
Speicherplatz: 2 Byte
Taktzyklen: 2