Chiarimeenti Assembly degli Atmega.

Al primo link, operand r dovrebbe essere indicazione di usare un registro interno della MCU, "+r" read/write su registro

=	Write-only operand, usually used for all output operands.
+	Read-write operand
&	Register should be used for output only

"cp %0, %1" : /* No outputs */ : "r" (counter), "r" (pwmval): );
Istruzione cp fa un confronto ed in base a tale confronto setta il carry bit C (mi pare)
la ror fa rotazione (shift) ma usa anche il carry bit, credo che se la cp ha settato il carry, quel bit a 0 o 1 a seconda del confronto ti viene poi shiftato dentro a sendbyte al bit numero 7 e nel carry ci porta il bit 0 di sendbyte.

I percento dovrebbero essere posizionali, il primo %0 prende il primo parametro (counter) %1 il secondo.
Un pò come i % nella printf() del C

P.S. non conosco l'argomento, ho letto i link. Non sono sicuro di quello che affermo. :smiley:
Per le istruzioni assembly del 328 meglio leggere questo: