Hallo ihr Beiden!
Ich bin mir bewusst, dass es ziemlich verwirrend ist!
Sorry, aber wahrscheinlich bin ich echt zu doof dafür *g*
Das glaube ich weniger! ;o)
Ihr braucht euch erstmal nur mit dem Zählerregister Z, also ZL und ZH beschäftigen, die anderen Anwendungen werdet ihr später kennenlernen!
Empfehlungen zur Registerwahl
1. Register immer mit der .DEF-Anweisung festlegen, nie direkt verwenden.
2. Werden Pointer-Register für RAM u.a. benötigt, R26 bis R31 dafür reservieren.
3. 16-Bit-Zähler oder ähnliches realisiert man am besten in R24/R25.
4. Soll aus dem Programmspeicher gelesen werden, Z (R30/31) und R0 dafür reservieren. (WICHTIG!)
5. Werden oft konstante Werte oder Zugriffe auf einzelne Bits in einem Register verwendet, dann die Register R16 bis R23 dafür vorzugsweise reservieren.
6. Für alle anderen Anwendungsfälle vorzugsweise R1 bis R15 verwenden.
So wie ich das verstanden habe, ist der Programmspeicher WORD-weise organisiert. Also unter einer Addresse im Programmspeicher findet man 2 Byte.
Richtig!

Ich braucht euch da jetzt nicht große Angst machen, nehmt einfach mal zwei und fertig! ;o)
Also ladet ihr die Adresse der Daten so in das Z-Register:
Code:
ldi ZL , LOW  (datenlabel * 2)   ; das kennt ihr ja schon mit Ramend!
ldi ZH , HIGH (datenlabel * 2)     ; wie oben
Jetzt sollt ihr mit lpm die Daten dazu in r0 laden und das dann in r16 rüberschieben.
Danach sollt ihr das Z-Register um 1 erhöhen, um das nächste Byte zu bekommen, somit hätte sich die Frage mit den Word's und Byte's erledigt! ;o)

Das ist alles, was ich von euch sehen will! *lol*
Ich hoffe, ich war jetzt verständlicher! *g*