www.mikrocontroller.net

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


Autor: Thomas Wyschkony (thomas-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Gruß aus Berlin
Michael

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/attachment/4536/Atm...

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

Autor: Thomas Wyschkony (thomas-w)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht 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?
    clr B    ; ein extra Register
    lsr A    ; deine Daten
    ror B
    lsr A
    ror B
    or A, B

hth, Jörg

Autor: Thomas Wyschkony (thomas-w)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Wyschkony (thomas-w)
Datum:

Bewertung
0 lesenswert
nicht 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)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.