Gibt es im C eigentlich so Funktionen wie im Assembler(rol und ror)?
Druckbare Version
Gibt es im C eigentlich so Funktionen wie im Assembler(rol und ror)?
Wie wäre es mit etwas inline Assembler ?
Beispiel:
Dreht mit hilfe von rol alle Bits in tmp um, also Bit 0 wird zu 7 1 zu 6 usw.Code:asm volatile (
"ldi %2,8" "\n\t"
"0:" "\n\t"
"lsr %0" "\n\t"
"rol __tmp_reg__" "\n\t"
"dec %2" "\n\t"
"brne 0b" "\n\t"
"mov %0,__tmp_reg__" "\n\t"
: "=a" (tmp)
: "0" (tmp), "a" (count)
);
Gruß Sebastian
Blick ich nicht
wie waers mit
Je nachdem ob man nun ein char, int oder long rotieren will muss natuerlich die Funktion entsprechend abgeaendert werden.Code:unsigned char ror(unsigned char val, unsigned char places)
{
return (val>>places)|(val<<8-places);
}
unsigned char rol(unsigned char val, unsigned char places)
{
return (val<<places)|(val>>8-places);
}
HTH
@fluchtpunkt,
Bist Du sicher, daß Deine Funktionen wirklich rol ror nachbilden ?
Gruß Sebastian
naja nicht ganz, eigentlich ueberhaupt nicht. Naechstes mal les ich vorher was ror und rol eigentlich tut, hatte das anders in Erinnerung :/
EDIT2: Aber eigentlich ist sowas wie rol und ror, exakt so nachgebildet wie in assembler ziemlich sinnlos.
Ja eben ;-)Zitat:
Aber eigentlich ist sowas wie rol und ror, exakt so nachgebildet wie in assembler ziemlich sinnlos.
und wenn überhaupt, dann irgendwie ein Stück von Inlineassembler...
Gruß Sebastian
Ah, weil ich möcht n LED Lauflicht mache und ich bekomm des irgendwie net hin.
Ja dann beschreib mal etwas Dein Lauflicht und warum unbedingt rol oder ror helfen soll ;-)
Gruß Sebastian
na wenn du ein lauflicht machen willst bei dem das was links rausfaellt rechts wieder reinkommt dann ist mein Code doch sehr gut geeignet.
man kann sowas natuerlich auch ohne Bitshiftmagie machen.
Code:unsigned char rotate_right(unsigned char pattern)
{
unsigned char add;
if (pattern & 0x01)
add = 0x80;
else
add = 0;
pattern = pattern >> 1;
pattern = pattern | add;
return pattern;
}
Je nachdem wie dein Lauflicht aussieht muss das aber nicht der optimale Weg sein, deswegen ist es immer sehr hilfreich wenn man genau dazu schreibt was man eigentlich machen moechte. Gerade Anfaenger verrennen sich oft in irgendwelche "abstrusen Vorstellungen" :)