Selber herrausfinden bringt wohl mehr, aber ich komm da ja nun gar nicht klar. Hier mal mein Code:
Code:
;Programm
;CDurTonleiter rauf und runter spielen
.include "m8def.inc"

.def tmp = r16					;Mein Universallregister

.org 0x000
	rjmp reset					;Interruptvektor "reset:"

reset:
	;Stack einrichten
	ldi tmp, HIGH(RAMEND)		;HIGH-Byte der obersten RAM-Adresse
	out SPH, tmp
	ldi tmp, LOW(RAMEND)		;Low-Byte der obersten RAM-Adresse
	out SPL, tmp

	ldi ZH, HIGH(daten2 * 2)
	ldi ZL, LOW(daten2 * 2)
	lpm

	sei							;Interrupts zulassen

loop:
	adiw ZL,1
	lpm

	ST Z,tmp

	rjmp loop					;immer wieder zu "loop:" springen

daten1:
	.dw 65535 , 0 				;zwei Words

daten2:
	.db "Hallo!"		 		;immer eine gerade Anzahl an Bytes
Wie man sieht, sieht man nichts *g*
Ich versteh das nicht mit dem Programmspeicher und dem Z-Register und dann muss ich das Z-Register um 1 erhöhen und wieder auslesen und und und...
Vor allem, wozu brauch ich unten zwei Labels mit daten?