Moin!
Ich möchte in einer Assembler ISR-Routine auf die Felder eines vorher definierten Byte Arrays zugreifen. Mein (soweit funktionierender) Ansatz sieht jetzt wie folgt aus (wobei das natürlich nur ein Testcode ist um erstmal das Prinzip zu erarbeiten). Ich habe aber ein Verständnisproblem mit dem add (s.u.).
Code:
$asm
Loadadr A(1) , X
ldi r23, 4
add r26, r23
ld R22, X
STS {I}, R22
$end Asm
Zur Erläuterung: das Array heißt A und sei <255 Felder (= Bytes) groß. Ich lade die Adresse vom ersten Feld nach X, also in das Registerpaar R26:R27. in R23 steht der (nullbasierte) Index des Feldes (im Bsp 4) auf das ich zugreifen möchte. Ich addiere dann einfach R23 auf R26 (was ja das Lowbyte von X ist), also den gewünschten Index. Dann lade ich den Inhalt der Adresse X, was nun dem gewünschten Index entspricht nach R22 um von dann damit weiterzuarbeiten (hier einfach in das Byte I übertragen). Was ist aber mit dem Übertrag bei der Addition? also angenommen das Lowbyte der Adresse ist schon 253 und würde darauf 6 addieren? Passiert der Übertrag ins R27 automatisch? Oder geht das Ganze sowieso anders eleganter ?
Danke für alle Hinweise!
Gruß
Malte
Lesezeichen