Verwirrung um movw

OP Persönliche Seite #848165
1
mov Q20, Q10
2
mov Q21, Q11
3
mov Q22, Q12
4
mov Q23, Q13
Ergibt das richtige Ergebnis (Q2 wird zu Q1)
1
movw Q21:Q20, Q11:Q10
2
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
1
// Q1 (32bit)
2
.def   Q10  = r12
3
.def   Q11  = r13
4
.def   Q12  = r14
5
.def   Q13  = r15
6
// Q2 (32bit)
7
.def   Q20  = r8
8
.def   Q21  = r9
9
.def   Q22  = r10
10
.def   Q23  = r11
Gast
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?
OP Persönliche Seite
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
(Firma: ZeuSWarE GmbH)
Da ich das gleiche problem hatte:

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

das führt bei
1
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ß
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.