Hallo Gemeinde,

es kommt doch schon mal öfters vor das man Daten in längerer Form speichern oder lesen muss, hier mal ein kleines Beispiel
wie man es organisieren könnte.

PortB = Ein/Ausgabe
PortD = schreiben/lesen

Code:
.include "m8def.inc"	;Atmega8

.def temp0 = r16 	; 
.def temp1 = r17 	;
.def temp2 = r18
.def temp3 = r19 	;
.def temp4 = r20
.def cnt   = r21

.equ Data	=	$0060	;Startzelle festlegen
.equ Dataend	=	Data+5  ;Endpunkt

.cseg
.org $0000
	rjmp	stack
.org $0001			;1
	reti;rjmp	INT_0
.org $0002			;2
	reti;rjmp	INT_1
.org $0003			;3
	reti;rjmp	INT_OC2
.org $0004			;4
	reti;rjmp	INT_OVF2
.org $0005			;5
	reti;rjmp	INT_ICP1
.org $0006			;6
	reti;rjmp	INT_OC1A
.org $0007			;7
	reti;rjmp	INT_OC1B
.org $0008			;8
	reti;rjmp	INT_OVF1	
.org $0009			;9
	reti;	rjmp	INT_OVF0


	reti		;a keine SPI Routinen

.org $000b		;b
	reti;rjmp	INT_URXC
.org $000c		;c
	reti;rjmp	INT_UDRE
.org $000d		;d
	reti;rjmp	INT_UTXC
.org $000e		;e
	reti;rjmp	adc_rdy
.org $000f		;f
	reti;rjmp	eeprom_rdy
.org $0010		;10
	reti;rjmp	ac_int

	reti		;11	keine 2wireRoutinen
	reti		;12 keine SPMRoutinen

;***************************Init mit allem drumdran*****************
stack:          ldi 		        temp1,high(ramend)              ;Stackpointer festlegen
	        out 		        sph, temp1
	        ldi 		        temp1,low(ramend)               ;Stackpointer festlegen
                out 		        spl, temp1

start:	        sbic		        pind,0
		rcall		        write_sram  			;Daten speichern

		sbic		        pind,1
		rcall		        read_sram                          ;Daten lesen
				
		rjmp		        start

;Daten schreiben
write_sram:
		clr			temp0
		out			portb,temp0
		out			ddrb,temp0				;Ausgabe
		rcall		        load_Data_point			;Startpunkt laden
write_sram2:
		in			temp0,pinb				;Datenquelle ist nur ein Bsp
		st			x+,temp0				;von temp0 auf Sram speichern dann +1
		cpi			xl,Dataend				;vergleiche
		brne		        write_sram2			;solange != springe
		ret

;Daten lesen Ausgabe auf Portc
read_sram:
		ldi			temp0,$ff 
		out			ddrb,temp0				;Ausgabe
		rcall		        load_Data_point			;Startpunkt laden
read_sram2:
		ld			temp0,x+				;in temp0 laden von Sram dann +1
		out			portb,temp0			;Datenausgabe ist nur ein Bsp
		cpi			xl,Dataend				;vergleiche 
		brne		        read_sram2				;solange != springe
		ret

;**Pointer kann X, Y, Z sein
load_Data_point:
		ldi			xh,high(Data)
		ldi			xl,low(Data)
		ret
Viel Spaß beim Ostereier suchen