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
Hallo, die fallen erstmal ins Carry, Du muß also eimal mehr schieben... Gruß aus Berlin Michael
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
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?
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.
> 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
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)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.