Servus, habe eine totale Anfänger Frage, die ich mittels älteren Beträgen nicht selbst beantworten konnte. Habe in einem Beispiel Code gesehen, dass ein Arbeitsregister (r16) auch mit HIGH and LOW angesprochen werden kann. Low addressiert das erste (0-7) und HIGH obere Byte (8-15), richtig? Ist es aber nicht so, dass die Arbeitsregister nur 1 Byte groß sind? Ist diese adressierung dann nicht Unsinn? LG HFQ
Gast
#732764
>Ist es aber nicht so, dass >die Arbeitsregister nur 1 Byte groß sind? Musst mal im Datenblatt nachschauen. r32, r31, r30 sind 16 Bit breit.
>Ist diese adressierung dann >nicht Unsinn? Siehe auch: Beitrag "Little oder Big Endian im mega64?" Der Fred ist noch ganz warm... Normaler Weise werden die Bytes einzeln angesprochen. Da das aber bei Adressen lästig ist, haben die sich für die X, Y, Z-Register Ausnahmen einfallen lassen. High und Low sprichst du einfach über XH, XL, YH, YL, ZH, ZL an. >Low addressiert das erste (0-7) und HIGH obere Byte (8-15), richtig? Low ist Bit 0-7 und High ist 8-15 und die Anordnung erst Low, dann High ist Little Endian, korrekt.
Gast
#732776
HI High und Low beziehen nicht auf das Register, sondern auf das Argument. Also du lädst damit z.B. r16 mit den oberen oder unteren 8 Bit eines Wertes. Das ganze ist sinnvoll, wenn man einen Wert>255 auf zwei Register aufteilen will. MfG Spess
@ hfquincy >Habe in einem Beispiel Code gesehen, dass ein Arbeitsregister (r16) auch >mit HIGH and LOW angesprochen werden kann. Nein, so nicht. > Low addressiert das erste (0-7) und HIGH obere Byte (8-15), richtig? Ja, von einer Konstante. > Ist es aber nicht so, dass >die Arbeitsregister nur 1 Byte groß sind? Ist diese adressierung dann >nicht Unsinn? Nöö. Das nutzt man so.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Siehe AVR-Tutorial: Mehrfachverzweigung MFG Falk
Drahteinsparer wrote: >>Ist es aber nicht so, dass >>die Arbeitsregister nur 1 Byte groß sind? > > Musst mal im Datenblatt nachschauen. r32, r31, r30 sind 16 Bit breit. Da solltest Du wohl selber mal im Datenblatt nachschauen... 16-Bit-Register gibt es beim AVR nicht, nur einige Befehle, die Registerpaare ansprechen können.
@ johnny-m Genau so habe ich das auch verstanden. Wofür also z. B. so etwas: ... ldi r16,LOW(RAMEND) out SPL,r16 ldi r16,HIGH(RAMEND) out SPH,r16 ... Dass es sich insgesamt in dem Bsp. um die Initialisierung des Stack Pointers handelt ist mir völlig klar. Und das unter den Arbeitsregistern auch 3 Pointer Registerpaare (X,Y,Z) existieren, ist mir auch bekannt. Aber dies trifft A) bei R16 nicht zu UND B) weiterhin wird in dem o.g. Bsp. ausschließlich R16 mit LOW/HIGH angesprochen Hast du so etwas schon einmal gesehen? Wie darf ich das verstehen? LG HFQ
H. F. wrote: > ... > ldi r16,LOW(RAMEND) > out SPL,r16 > ldi r16,HIGH(RAMEND) > out SPH,r16 > ... > > Dass es sich insgesamt in dem Bsp. um die Initialisierung des Stack > Pointers handelt ist mir völlig klar. Und das unter den Arbeitsregistern > auch 3 Pointer Registerpaare (X,Y,Z) existieren, ist mir auch bekannt. > Aber dies trifft > > A) bei R16 nicht zu UND > B) weiterhin wird in dem o.g. Bsp. ausschließlich R16 mit LOW/HIGH > angesprochen Da wird nicht r16 angesprochen. Das LOW bzw. HIGH bezieht sich auf RAMEND. RAMEND ist ein 16 Bit Wert. Davon willst du das niederwertige Byte und dieses soll wiederrum in r16 landen ldi r16, LOW(RAMEND) von wo es dann weitergereicht wird in das Register, welches das niederwertige Byte des Stackpointer aufnimmt. out SPL, r16 Selbiges mit dem höherwertigen Byte von RAMEND und dem HIGH
Prima, jetzt habe ich auch Spess53 verstanden. Vielen Dank für diese Antworten dafür! Weiß nun endlich bescheid. LG HFQ
H. F. wrote: > Prima, > > lag es an meiner ersten Frage? Indirekt. Merken: Wenn du Fragen zu einem Codestück hast, dann zeige das Codestück selbst und nicht nur eine Beschreibung davon. Ein Codestück ist meistens ziemlich eindeutig. Eine Beschreibung davon eher nicht.
Gast
#733481
Hi Mal ein Beispiel: Low($3FF)=$FF High($3FF)=$03 Beim Stackpointer ist r16 nur ein Zwischenregister, da SPL/SPH nicht direkt mit einem Wert geladen werden können. Das Low und High bezieht sich in diesem Fall auf SPL und SPH. MfG Spess
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.