Verwirrung um movw

OP Persönliche Seite #848165
Lesenswert?
• ▲
▼
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
OP Persönliche Seite #848249
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.
#848263
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
(Firma: ZeuSWarE GmbH) #848294
Lesenswert?
• ▲
▼
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ß
#848380
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

Antwort schreiben

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.

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.