Forum: Mikrocontroller und Digitale Elektronik Verwirrung um movw


von Läubi .. (laeubi) Benutzerseite


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

von Matthias L. (Gast)


Lesenswert?

???

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Peter (Gast)


Lesenswert?

??? => Welcher Prozesor?

von Matthias L. (Gast)


Lesenswert?

Ich verstehe dein PRoblem nicht.

von yalu (Gast)


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?

von Läubi .. (laeubi) Benutzerseite


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.

von Mikki M. (mmerten)


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

von Michael U. (amiga)


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

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


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ß

von Läubi .. (laeubi) Benutzerseite


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.

von yalu (Gast)


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.

von Peter D. (peda)


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

von yalu (Gast)


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

von Läubi .. (laeubi) Benutzerseite


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 :-\

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.