#define __SFR_OFFSET 0

#include <avr/io.h>

.global main

asmDelay:
  ldi r30, 32                  ; Load 0b00100111 to r30 (high byte).
  ldi r31, 15                  ; Load 0b00010000 to r31. (low byte).

  delayLoop:
    sbiw 30, 1                 ; Subtract 1 from word in r30.
    brne delayLoop             ; When != 1, branch to "delay_loop".
    subi r24, 1                ; Subtract 1 from r18.
    brne asmDelay              ; When != 1, branch to "delay".
  ret                          ; Return.

main:
  sbi DDRB, 0                  ; Set pin mode to OUTPUT for PB0.
loop:
  sbi PORTB, 0                 ; Set PB0 state to HIGH.
  ldi r24, 255                 ; Prepare r24 for delay.
  rcall asmDelay               ; Delay.
  cbi PORTB, 0                 ; Set PB0 state to HIGH.
  ldi r24, 255                 ; Prepare r24 for delay.
  rcall asmDelay               ; Delay.
  rjmp loop                    ; Repeat.
ATTINY8520PU