Assembler: Problem mit Registerpaar

Gast #71600
Lesenswert?

Hallo,

auf meinem AVR (AT90S2313) sind lt. Doku die oberen acht Register
jeweils als Registerpaar anzusprechen, also r24/r25 quasi als ein
Register.

Ich habe nun folgenden Code:

.def      pulsesL      = r24
.def      pulsesH      = r25

adiw   pulsesL, 1               ; Zaehlerwert inkrementieren

Wenn ich die Doku zu adiw richtig verstanden habe, dann wird beim
Overflow von r24 dieser nach r25 weitergegeben. Ich müsste also bis
65535 zählen können.

Bei mir wird aber nach 255 wieder auf Null gesprungen. Warum?

Gruß Uwe
Gast #71602
Lesenswert?

Hmpf. Hätte man eigentlich selber drauf kommen können. Steht ja auch
genauso in der Befehlsreferenz.

Das wars aber nicht.

Das Problem scheint zu sein, das es trotz das es so in der Doku steht
einfach nicht mit r24/r25 funktioniert.

Ich habe es testweise mal mit XL/XH versucht (also r26/r27), und siehe
da:

adiw r26, 1

macht genau das was es soll. Beim Overflow von r26 wird entsprechend
r27 hochgezählt.

Also werde ich wohl für meine Zwecke r26/r27 missbrauchen, auch wenns
mir nicht so recht gefällt.

Gruß Uwe
Gast #71603
Lesenswert?

Ich habe mal beide Versionen mit r24/r25 im Studio simuliert
und es gingen beide.
Der Fehler liegt nicht bei den beiden Registern, sondern woanders.
Womit hast du das Program geschrieben und assembliert?

Gruß,
Arno
Gast #71607
Lesenswert?

Könnte es sein, daß der 2313 das nicht kann? Im Datenblatt des 2313 ist
nur die Rede von X,Y,Z. Das Addieren von R24/R25 steht nur im
allgemeinen Instruction Set. Wäre nicht der einzige Befehl, der beim
2313 nicht zur Verfügung steht.
Gast #71610
Lesenswert?

Also ich habe nicht ins Datenblatt geschaut, sondern in zwei meiner
Bücher. Und die behaupten auch beide, das es beim 2313 geht. Es werden
wohl kaum beide Autoren falsch abgeschrieben haben ;-)

Na ja, jetzt läufts via XL/XH, bei dem projekt brauche ich die nicht.

Gruß Uwe

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