Ja, ich wollte ja nur, dass ihr ungefähr den Ablauf versteht, wie man den Speicher ausliest!Ja, dass es nacheinander passiert, ist mir klar, aber am Ende kann in r16 ja nicht "Hallo!" stehen, oder? Denn "Hallo!" braucht ja nunmal 6 Bytes. Also steht am Ende im Register nur ein "!"?
Ok, hier kommt die Lösung!
Jetzt erklärt mir bitte die einzelnen Segmente des Codes!Code:.include "m8def.inc" .def lpm_reg = r0 .def temp = r16 .equ daten_laenge = 6 reset: stack: ; Stack ldi temp , LOW (RAMEND) ; LOW-Byte out SPL , temp ldi temp , HIGH (RAMEND) ; HIGH-Byte out SPH , temp z_register: ldi ZL , LOW (daten * 2) ; Z-Register laden, mit der Adresse der Daten ldi ZH , HIGH (daten * 2) main: lpm ; Daten laden mov temp , lpm_reg ; in temp verschieben adiw ZL , 1 ; Z um eins erhöhen ldi temp , LOW ((daten * 2) + daten_laenge) ; vergleiche LOW-Byte cp ZL , temp ldi temp , HIGH ((daten * 2) + daten_laenge) ; vergleiche HIGH-Byte cpc ZH , temp breq ende ; springe zu ende, wenn letztes Byte ausgelesen rjmp main ; nochmal ende: ; Endschleife rjmp ende daten: ; Daten .DB "Hallo!"







Zitieren

Lesezeichen