Falls es dir um die Analyse des Codes ging:
dec R17
brne WGLOOP0
dec R18
brne WGLOOP1
dec R19
brne WGLOOP3
ende:
BRNE springt, wenn Zero-Flag nicht gesetzt ist.
DEC setzt Zeroflag nur, wenn der Wert beim Vermindern 0 wird.
ende: wird also nicht "angesprungen", sondern das Programm landet bei
ende, wenn alle Rücksprünge wegen gelöschtem Zero-Flag (BRNE)
ausfallen.
In einer Hochsprache vereint ein Befehl die Bedingungsprüfung mit der
Verzweigung.
In ASM ist das getrennt. Bestimmte Operationen (add, sub, and, or...,
aber nicht mov, lds...) beeinflussen die Flags im SREG. Das passiert
auch, wenn dich die Flags nicht weiter interessieren, also wenn wenn du
nur rechnest, ohne eine Verzweigung im Sinn zu haben.
Willst du eine Verzweigung (bedingter Sprung) machen, dann achte auf
den Befehl, der zuletzt die Flags im SREG verändert hat und springe
anhand der Flagzustände.
Anhand von "$Asm" sehe ich, dass du vermutlich nicht mit AVR-Studio
arbeitest. Wenn dich AVR-ASM wirklich interessiert, dann solltest du
AVR-Studio benutzen, denn damit hast du neben dem Simulator auch noch
eine Online-Befehlsreferenz (F1-Taste, wenn Cursor auf einem ASM-Befehl
steht).
...