AVR LED patterns (asm)

So, I made a couple of code samples with assembly. Basically I have 8 leds connected to PORTB and I need them to perform different patterns. Here're are some of the code samples I created to implement them.

/*
 * ATmega2560_ledsamples.asm
 *
 *  Created: 6/1/2015 4:33:25 PM
 *   Author: DarkSector
 *   Description: Goes from left to right and rotates back
 */ 

 .EQU F_CPU = 16000000
 .ORG 0

 .DEF COUNTER=R20
 .DEF KICK=R21
 LDI R16, LOW(RAMEND)
 OUT SPL, R16
 LDI R16, HIGH(RAMEND)
 OUT SPH, R16

 LDI R16, 0xFF
 OUT DDRB, R16

 ;LDI MULTIPLIER, 
 LDI COUNTER, 8

 LOOP0:
 LDI R16, 0b00000001
 LOOP:
 MOV KICK, R16
 CALL FIREB
 CALL DELAY
 LSL R16
 BRCS LOOP0
 RJMP LOOP


 FIREB:
 ; Simply fires the value in KICK to portb
 COM KICK
 OUT PORTB, KICK
 RET

 DELAY:  
 LDI R17, 100  
 LOOP3: LDI R18, 100  
 LOOP2: LDI R19, 100  
 LOOP1: DEC R19  
 BRNE LOOP1 ;KEEP DECREASING R19
 DEC R18  
 BRNE LOOP2 ;FOR EVERY DECREASE OF R18 REDO THE PREVIOUS LOOP  
 DEC R17  
 BRNE LOOP3 ;FOR EVERY DECREASE OF R17 REPEAT PREVIOUS LOOP  
 RET        ;RETURN TO PREVIOUS PC ADDRESS  

Before I implemented this, I used MUL to count up and that's why you have LDI MULTIPLIER.

/*
 * ATmega2560_ledsamples.asm
 *
 *  Created: 6/1/2015 4:33:25 PM
 *   Author: DarkSector
 *   Description: ROR
 */ 

 .EQU F_CPU = 16000000
 .ORG 0

 /*.DEF COUNTER=R20*/
 .DEF MULTIPLIER=R20
 .DEF KICK=R21
 LDI R16, LOW(RAMEND)
 OUT SPL, R16
 LDI R16, HIGH(RAMEND)
 OUT SPH, R16

 LDI R16, 0xFF
 OUT DDRB, R16

 LDI MULTIPLIER, 2


 LOOP0:
 LDI R16, 1
 LOOP:
 MOV KICK, R16
 CALL FIREB
 CALL DELAY

 MUL R16, MULTIPLIER
 MOV KICK, R0
 MOV R16, R0
 CALL FIREB
 CALL DELAY
 CPI R16, 128
 BREQ LOOP0
 RJMP LOOP


 FIREB:
 ; Simply fires the value in KICK to portb
 COM KICK
 OUT PORTB, KICK
 RET

 DELAY:  
 LDI R17, 10  
 LOOP3: LDI R18, 100  
 LOOP2: LDI R19, 100  
 LOOP1: DEC R19  
 BRNE LOOP1 ;KEEP DECREASING R19
 DEC R18  
 BRNE LOOP2 ;FOR EVERY DECREASE OF R18 REDO THE PREVIOUS LOOP  
 DEC R17  
 BRNE LOOP3 ;FOR EVERY DECREASE OF R17 REPEAT PREVIOUS LOOP  
 RET        ;RETURN TO PREVIOUS PC ADDRESS  

I haven't done anything for divide yet. I will have to figure out how to do it later. Also, from this document "This operation effectively multiplies signed and unsigned values by two"

So essentially doing the exact same thing I did in the second one.

Hey! Here's a quick gif of the pattern!