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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren