-
-
Erfahrener Benutzer
Roboter Experte
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
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen