1 | |
2 | |
3 | |
4 | |
Ergibt das richtige Ergebnis (Q2 wird zu Q1)
1 | |
2 | |
Ergibt eine vertauschung der Bytes Mach ich was falsch oder spinnt der Assembler/Simulator? Benutze AVR Studio 4 mit Assembler2
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
|
Anzeige
|
Verwirrung um movw
Ergibt das richtige Ergebnis (Q2 wird zu Q1)
Ergibt eine vertauschung der Bytes Mach ich was falsch oder spinnt der Assembler/Simulator? Benutze AVR Studio 4 mit Assembler2
Gast
#848170
??? Matthias Lipinsky wrote:
> ???
Was verstehst du an meiner Frage nicht? Oder wolltest einfach nur nen
Post für deine Zähler? ;)
Gast
#848186
??? => Welcher Prozesor?
Gast
#848189
Ich verstehe dein PRoblem nicht.
Gast
#848219
Sieht eigentlich richtig aus. Hast du's mal auf einem realen AVR ausprobiert? Welche der vier Bytes sind miteinander vertauscht? Q20 mit Q21 und Q22 mit Q23 oder Q20 mit Q23 und Q21 mit Q22? Peter wrote: > ??? => Welcher Prozesor? Prozessor ist ne Mega48, allerdings will/muß ich den Algorithmus erstmal zu Testzwecken im SImulator laufen lassen yalu wrote: > Sieht eigentlich richtig aus. Hast du's mal auf einem realen AVR > ausprobiert? Welche der vier Bytes sind miteinander vertauscht? > > Q20 mit Q21 und Q22 mit Q23 oder > Q20 mit Q23 und Q21 mit Q22? Das High und das Low byte wird vertauscht ALso MOVW A:B, C:D führt dazu das später in A:B der Wert von D:C steht, erwarten würde ich aber C:D... Klar könnte ich das jezt einfach umdrehen, aber das wäre etwas unsinnig meiner Meinung nach, wenn ich das mache ohne zu wissen warum, und dann wunder ich mich später wieder. Funktioniert doch alles richtig: // Q1 (32bit) .def Q10 = r12 .def Q11 = r13 .def Q12 = r14 .def Q13 = r15 // Q2 (32bit) .def Q20 = r8 .def Q21 = r9 .def Q22 = r10 .def Q23 = r11 // TESTWERTE clr Q10 // Q10 = 0, Q11 = 1, Q12 = 2, Q13 = 3 mov Q11,Q10 inc Q11 mov Q12,Q11 inc Q12 mov Q13,Q12 inc Q13 movw Q20,Q10 movw Q22,Q12 // Q20 = 0, Q21 = 1, Q22 = 2, Q23 = 3 Hallo,
@Läubi: laut Befehlsbeschreibung hat Atmel movw nur für geradezahlig
startende Paare definiert...
(i) MOVW Rd+1:Rd,Rr+1Rr d E {0,2,...,30}, r E {0,2,...,30}
was also bei movw r9, r13 rauskommt, ist nicht definiert.
Gruß aus Berlin
Michael
Da ich das gleiche problem hatte: Ich hatte bei meine soure die definierten temph und templ "vertauscht", d.h.
das führt bei
zur vertauschung von templ zh und temph zl,.. verwirrend aber diesen umstand kann man bestimmt als schmutzigen trick einstufen,.. die register vorher richtig deklarieren sollte das problem lösen,.. gruß Arg.. Problem war: Ich hatte für die eine Variable die Register aufsteigend (R7, R8, R9, R10), für die Andere die Register absteigend (R14,R13,R12,R11) --> beides gleich --> Problem gelöst.
Gast
#848332
Dann entsprechen aber die .defs in deinem ersten Post nicht deinem ursprünglichen Programm ;-). Die richtige Registerreihenfolge war das, worauf ich als erstes geschaut habe. Läubi Mail@laeubi.de wrote: > Arg.. Problem war: Ich hatte für die eine Variable die Register > aufsteigend (R7, R8, R9, R10), für die Andere die Register > absteigend (R14,R13,R12,R11) --> beides gleich --> Problem gelöst. Bei Posten von Codefragen ist Copy und Paste allererste Bürgerpflicht !!! Wer dagegen verstößt, wird geteert und gefedert. Peter
Gast
#848405
> Bei Posten von Codefragen ist Copy und Paste allererste > Bürgerpflicht !!! > > Wer dagegen verstößt, wird geteert und gefedert. Dann heiz hier schon mal deinen Asphaltfertiger an: Beitrag "was set but never used" :D :D :D Ne das sit schon copy paste. Hatte aber der einfachheithalber nur 2 der 3 Variablendefinitionen gepostet. Bei den geposteten wars korrekt, bei der ausgelassenen nicht. Manchmal steckt der Teufel doch im Detail :-\ Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|