Hallo,

Der Offset q beim LDD Rd,Y+q Befehl kann max. +-32 groß sein.
Er ist fest in dem OPcode eingebaut, kann also leider
nicht aus einem Register kommen.
Mein Vorschlag wäre den LD Rd,Z zu benutzen.
"Push" und "Pop" würde ich dabei aber lassen, das kostet zuviel Zeit.
Stattdessen die Grundadresse lieber in einem Registerpaar halten
und von dort mit MOVW Rd,Rd holen.

z.B.
;Einmal bei Programmstart:
CLR R2 ;null nach Register 2
LDI R4,low(Grundaddr<<1)
LDI R5,high(Grundaddr<<1)

;Jetzt der Zugriff später im Prog:
MOVW Z,R4 ;R4 und R5 halten die Grundadresse
ADD ZL,R6 ;R6 enthält Offset1
ADC ZH,R2 ;R2 enthält 0
ADD ZL,R7 ;R7 enthält Offset2
ADC ZH,R2
LD R8,Z ;Lesen aus der Grundadresse+Offset1+Offset2

Das Berechnen des Offset inkl. Holen der Grundadresse dauert so 5 Taktzyklen

Gruß Jan