Forum: Mikrocontroller und Digitale Elektronik ATMega 162 Frage zu Kommando "ROR"


von Thomas W. (thomas-w)


Lesenswert?

Hallo,

ich habe derzeit ein Problem mit einem Programm, welches Bits 
verschwinden laesst.
Ich habe da u.a. ein paar Assembler-Zeilen mit dem Kommando "ROR" im 
Verdacht.

Damit sollen die Zustaende von Bit 0 und Bit 1 an die Stelle Bit6 und 
Bit7 geschoben werden.

Um die Laufzeit so kurz wie moeglich zu halten habe ich mich fuer zwei 
mal ROR r entschieden in der Annahme, dass die Bits, die rechts "ins 
Leere fallen" von links wieder eingeschoben werden.
Bevor ich noch andere Stellen abklopfe, ist diese Annahme falsch und 
muss ich stattdessen mit entsprechend vielen ROL-Kommandos arbeiten?

Vielen Dank im Voraus,

Thomas

von Michael U. (amiga)


Lesenswert?

Hallo,

die fallen erstmal ins Carry, Du muß also eimal mehr schieben...

Gruß aus Berlin
Michael

von Oliver (Gast)


Lesenswert?

http://www.mikrocontroller.net/attachment/4536/Atmel_AVR_Lernunterlage_v3.pdf

ROR und ROL rotieren jeweils 9 Bit, incl. Carry-Bit.

Daher musst du dreimal ROR'en, um Bit 1 nach Bit 7 zu bekommen.


Oliver

von Thomas W. (thomas-w)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> die fallen erstmal ins Carry, Du muß also eimal mehr schieben...
>
> Gruß aus Berlin
> Michael

Mahlzeit,

Ihr seid ja verdammt schnell! DANKE!

Ich war der Meinung, dass das Carry nur bei RRC und RLC mit dabei ist?

von Stefan E. (sternst)


Lesenswert?

Thomas Wyschkony schrieb:

> Ich war der Meinung, dass das Carry nur bei RRC und RLC mit dabei ist?

Was sollen denn das für Befehle sein?
Zum AVR-Befehlssatz gehören die jedenfalls nicht.

von Jörg G. (joergderxte)


Lesenswert?

> Daher musst du dreimal ROR'en, um Bit 1 nach Bit 7 zu bekommen.
Dann hast du aber ein zusätzliches Bit (das vor dem ersten ROR'en im 
Carry stand) in deinen Daten.
Geht es eigentlich mit nur einem Register?
1
    clr B    ; ein extra Register
2
    lsr A    ; deine Daten
3
    ror B
4
    lsr A
5
    ror B
6
    or A, B

hth, Jörg

von Thomas W. (thomas-w)


Lesenswert?

Stefan Ernst schrieb:
> Thomas Wyschkony schrieb:
>
>> Ich war der Meinung, dass das Carry nur bei RRC und RLC mit dabei ist?
>
> Was sollen denn das für Befehle sein?
> Zum AVR-Befehlssatz gehören die jedenfalls nicht.


Hi,

tja... ich habe die ganze Programmiererei vor Jahren auf dem 8085 
gelernt und bin da noch den einen oder anderen Befehl gewoehnt. Vieles 
ist ja auch aehnlich.

Was das fuer Befehle sind:
***
Rotate accumulator left
RLC none
Each binary bit of the accumulator is rotated left by one
position. Bit D7 is placed in the position of D0 as well as in
the Carry flag. CY is modified according to bit D7. S, Z, P,
AC are not affected.
Example: RLC
***
(analog gilt das auch fuer RRC)

>Dann hast du aber ein zusätzliches Bit (das vor dem ersten ROR'en im
Carry stand) in deinen Daten.

Das ist kein Problem, nach dem RORen wird der Schmodder mit ANDI 
0b11000000 maskiert und mit einem anderen Register verwurstet.

Auf jeden Fall habt Ihr mir sehr geholfen, einem saubloeden Fehler auf 
die Schliche zu kommen!
Vielen Dank dafuer :o)

von Karl H. (kbuchegg)


Lesenswert?

Thomas Wyschkony schrieb:

> Was das fuer Befehle sind:
> ***
> Rotate accumulator left
> RLC none
> Each binary bit of the accumulator is rotated left by one
> position. Bit D7 is placed in the position of D0 as well as in
> the Carry flag. CY is modified according to bit D7. S, Z, P,
> AC are not affected.
> Example: RLC
> ***
> (analog gilt das auch fuer RRC)

LOL

Die Doku zum 8085 hast du.
Warum benutzt dann nicht ganz einfach auch die Doku, die dir Atmel zu 
ihren Produkten mitgibt?

Ich geh mal davon aus, dass du AVR-Studio benutzt:
Stell den Cursor im Textfenster auf den Befehl den du nicht kennst (oder 
über dessen Details du unsicher bist) und drück F1.

von Thomas W. (thomas-w)


Lesenswert?

Hi,

>Stell den Cursor im Textfenster auf den Befehl den du nicht kennst (oder
über dessen Details du unsicher bist) und drück F1.

Geil! Das wird schnellstmoeglichst ausprobiert, auch hier tausend Dank!

>Die Doku zum 8085 hast du.

Zumindest vieles davon noch im Hinterkopf ;o)

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.