Die fragliche main-routine übersetzt er folgendermaßen

Code:
int main (void) { 

	L_$01E8:
01E8		LDI	YL,$5F     ; set stack
01EA		LDI	YH,$04
01EC		OUT	SPH,YH
01EE		OUT	SPL,YL

        USART_Init(); 
01F0		CALL	L_$008E  
        DDRB = 0xff; 
01F4		LDI	r24,$FF
01F6		STS	DDRB,r24
        sei (); 
01FA		SEI
        USART_transmit('\n'); 
01FC		LDI	r24,$0A
01FE		CALL	L_$00A8
        USART_transmit_string("Begruessungstext"); 
0202		LDI	r24,$6F
0204		LDI	r25,$00
0206		CALL	L_$0104
        USART_transmit('\n'); 
020A		LDI	r24,$0A
020C		CALL	L_$00A8
        for (;;) {} 
	L_$0210:
0210		RJMP	L_$0210
    

} 
0212	4C 45 44 20 6F 66 66 00 	LED off.
021A	4C 45 44 20 6F 6E 00 4D 	LED on.M
0222	6F 69 6E 2C 20 73 6F 6C 	oin\, sol
022A	6C 20 69 63 68 20 42 69 	l ich Bi
0232	65 72 20 68 6F 6C 65 6E 	er holen
023A
und hinten hat der die dauerschleife for (;; )
L_$0210:
0210 RJMP L_$0210

das ist alles pipifein.

Was dich quält, ist der Watchdog, der immer wieder einen reset auslöst.
(und daher wieder von vorn beginnt)

den kannst du bei den fuses abdrehen (WDEN oder so ähnlich)

hat eigentlich mit dem Programm garnix zu tun. Auf die Idee hätt ich auch gleich kommen können. aber was soll's