Danke für die Hinweise.
Wo bekommt man denn diese .inc Dateien her?

Hier mal ein funktionierender Code:
Code:
;+++++++++++++++++++++++++++
;My first AVR ASSEMBLY CODE
;+++++++++++++++++++++++++++

;################
.NOLIST
.DEVICE ATMEGA8
;.INCLUDE "m8def.inc"
.LIST
.CSEG
;################

.EQU PIND       = 0x10
.EQU DDRD       = 0x11
.EQU PORTD      = 0x12
.EQU Taster     = 2
.EQU LED1       = 5

RJMP   main

main:
loop:
	LDI     R16,0b00100000		
        LDI     R17,0b00000000
	OUT     DDRD,R16                ;PORT D auf Input setzen
	SBIC    PIND,Taster             ;BIT 2 prüfen (Taster1 liegt auf PD2) 
	RJMP    led_on                  

;	CBI     PIND,LED1              ;LED1 ausschalten (PD5)
        OUT     PORTD,R17
	RJMP    loop
led_on:
;	LDI     R16,0xFF
;	OUT     DDRD,R16                ;PORT D auf Output setzen
;	SBI     PIND,LED1               ;LED1 anschalten (PD5)
	OUT   	PORTD,R16
	RJMP    loop
Habe ich das jetzt richtig verstanden: PORTD ist nur zum Ausgeben, PIND nur zum Einlesen.

Ok noch mal laut überlegen
LDI register,0b10101010
OUT PORTD,register ;alle Pins werden gesetzt
IN register,PIND ;alle Pins werden ins register eingelesen

IN register,PORTD ;das geht nicht?
OUT PIND,register ;das auch nicht?

SBI PORTD,0...7 ;Ausgangs PIN wird entsprechend dem bit auf high gesetzt

Was passiert denn wenn ich auf einen Eingangspin schreibe oder einen Ausgangspin lese?

edit: es gibt "simulavr" für linux. Als frontend benutzt man dann gdb oder insight soviel ich weiß. Wollte ich auch gestern probieren aber weiß nicht wie ich aus dem asm code ein elf file mit debug informationen mache...