Forum: Compiler & IDEs ASM Befehl ROL in GGC


von Arthur B. (duri)


Lesenswert?

Liebe Netzbewohner

Gibt es in C einen Befehl der dem Assembler-Befehl ROL oder ROR 
enspricht ?

Gruss
   Duri

von Profi (Gast)


Lesenswert?

In gewisser Weise >> und <<, aber auch *2 und /2.
Beachte die Anweisungen   a*=2;   oder    a>>=1;   oder   a/=2;
Allerdings wird hier das Carry ignoriert, das musst Du extra (mit 
eigener Variable) behandeln, wenn Du es brauchst.

oder asm(ror);

Was möchtest Du denn genau machen?

von Arthur B. (duri)


Lesenswert?

Hallo Profi

Aber ich will rotieren (carryübertrag auf Bit 0) mit einem C-Befehl.

Ich will z.B. einen Lauflicht am Port B machen.

         PORTB<<=1;
  if (bit_is_set(SREG,0)) PORTB|= (1<<PB0);

Da sollte es einen Befehl in C geben der analog zu ROL funktioniert.

Gibt es das ?

Gruss
   Duri

von A.K. (Gast)


Lesenswert?

Nein.

von FBI (Gast)


Lesenswert?

Vieleicht so?
1
uint8_t i;
2
i = 0x01;
3
while(1) {
4
  PORTB = i;
5
  i <<= 1;
6
  if(!i) i = 0x01;
7
}

CU Frank

von Arthur B. (duri)


Lesenswert?

Hallo A.K.

Das wollte ich wissen.

Gruss
  Duri

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi
1
//ROR
2
PORTB = (PORTB<<1) | (PORTB>>7);
3
4
//ROL
5
PORTB = (PORTB>>1) | (PORTB<<7);

Matthias

von Andreas Paulin (Gast)


Lesenswert?

Geniale Lösungen sind immer einfach :)
Cool!
Musste ich doch mal loswerden, hab genau sowas gesucht!

von Rolf Magnus (Gast)


Lesenswert?

> Aber ich will rotieren (carryübertrag auf Bit 0) mit einem C-Befehl.

Das geht nicht, da es in C Flags gar nicht gibt.

> Da sollte es einen Befehl in C geben der analog zu ROL funktioniert.

Du kannst auch inline-Assembler verwenden.

> //ROR
> PORTB = (PORTB<<1) | (PORTB>>7);

Etwas besser wäre dann noch:

uint8_t portb = PORTB;
PORTB = (portb<<1) | (portb>>7);

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.