Naabend.

In nem C-Programm verwend ich für kleine Wartezeiten eine Kombination aus Assembler-Befehlen. Diese Anweisung hab ich selbst auch nur per Copy&Paste übernommen. Da ich von Assembler selbst nicht wirklich viel Ahnung hab, wollt ich mal fragen, was genau dort eigentlich gemacht wird.

Code:
static inline void _delay4Cycles(ui16_t __count)
{
  if (__count == 0)
  {
    __asm__ __volatile__("rjmp 1f\n 1:");
  }
  else
  {
    __asm__ __volatile__ (
      "1: sbiw %0,1" "\n\t"
      "brne 1b"
      : "=w" (__count)
      : "0" (__count)
      );
  }
}
Der "positive" If-Zweig geht ja noch; einfach nur ein Sprung eine Zeile weiter... Also als Basic-Pendant:
Code:
GOTO 1
1:
D.h. die Wartezeit wäre hier 1 Cycle.

Nur der "negative" If-Zweig stellt mich dann vor ein Problem.
Was macht dort jede Zeile im einzelnen?

mfG