mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verwirrung um movw


Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mov Q20, Q10
mov Q21, Q11
mov Q22, Q12
mov Q23, Q13
Ergibt das richtige Ergebnis (Q2 wird zu Q1)
movw Q21:Q20, Q11:Q10
movw Q23:Q22, Q13:Q12
Ergibt eine vertauschung der Bytes

Mach ich was falsch oder spinnt der Assembler/Simulator?
Benutze AVR Studio 4 mit Assembler2
// 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
???

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky wrote:
> ???
Was verstehst du an meiner Frage nicht? Oder wolltest einfach nur nen 
Post für deine Zähler? ;)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??? => Welcher Prozesor?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe dein PRoblem nicht.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mikki Merten (mmerten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Kai Scheddin (zeusosc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich das gleiche problem hatte:

Ich hatte bei meine soure die definierten temph und templ "vertauscht", 
d.h.
.def temph=r22
.def templ=r23

das führt bei
movw zh:zl,temph:templ
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ß

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.