Und einmal ohne optimize, auch nicht so schlimm

Code:
.NOLIST
.INCLUDE		"M16DEF.INC"
.LIST
INIT:
	JMP	L_0x0054
.............
L_0x0054:
	CLR	r1
	OUT	SREG,r1
	LDI	YL,0x5F
................
	JMP	L_0x008E
L_0x008A:
	JMP	INIT


unsigned char boden_value_red0[16];

void main()
{
unsigned short red0;
unsigned char  i;

red0 = (boden_value_red0[2*i]*256 | boden_value_red0[2*i + 1]) >> 2;
return;
} 

L_0x008E:
	LDI	YL,0x5C
	LDI	YH,0x04
	OUT	SPH,YH
	OUT	SPL,YL
	LDD	r24,Y + 3
	MOV	r18,r24
	CLR	r19
	MOVW	r24,r18
	ADD	r24,r18
	ADC	r25,r19
	MOVW	ZL,r24
	SUBI	ZL,0xA0
	SBCI	ZH,0xFF
	LDD	r24,Z + 0
	MOV	r18,r24
	CLR	r19
	LDI	r24,0x00
	LDI	r25,0x01
	MUL	r18,r24
	MOVW	r20,r0
	MUL	r18,r25
	ADD	r21,r0
	MUL	r19,r24
	ADD	r21,r0
	CLR	r1
	LDD	r24,Y + 3
	MOV	r18,r24
	CLR	r19
	MOVW	r24,r18
	ADD	r24,r18
	ADC	r25,r19
	MOVW	ZL,r24
	SUBI	ZL,0x9F
	SBCI	ZH,0xFF
	LDD	r24,Z + 0
	CLR	r25
	OR	r24,r20
	OR	r25,r21
	ASR	r25
	ROR	r24
	ASR	r25
	ROR	r24
	STD	Y + 1,r24
	STD	Y + 2,r25

	JMP	L_0x00EA

L_0x00EA:                               ; return
	RJMP	L_0x00EA
In der Version sieht man, was sich so ein Compiler denkt bei der Arbeit

Beim Optimieren hat er ja dann gemerkt, daß er sich das Meiste ersparen kann.