Routine für den Fall das ein unerwarterter Interrupt eintritt
Du hast die Interrupts garnicht eingeschaltet, damit ist das alles nicht nötig.

ldi R16,Low(RamEnd)
out spl, R16
und was ist mit dem SPH Register? oder hat ser 8535 nur 255 Bytes Ram ?

ldi R17, $E3
out DDRD, R17
sowas zu schreiben ist zwar kürzer, aber nicht unbedingt einfacher zu lesen,

schöner wäre es so:
Code:

ldi R17,(1<<PD7)|(1<<PD6)|(1<<PD5)|(1<<PD1)|(1<<PD0)
out DDRD,R17
naja, so sieht man zumindest sofort, welche Pins Du als Ausgang konfiguriert hast.

in R17, PIND2
Ergibt hier keinen Sinn (gibt es überhaupt Register PIND2, habe mir die .inc nicht angeguckt )

Wogegen hängt Dein Taster, GND oder VCC?
Meistens soll er an GND und die internen Pullups sollen aktiviert werden, das hast Du auch nicht getan.

sbic PORTD, 2
Damit fragst Du nur den Zustand von den Pullups ab, und nicht den Pinzustand.

Dein Programm läßt sich so schreiben:


Code:
reset:
  ldi R17,(1<<PD7)|(1<<PD6)|(1<<PD5)|(1<<PD1)|(1<<PD0)
  out DDRD,R17
  ldi R17,(1<<PD2)
  out PORTD,R17
;oder besser
;sbi PORTD,PD2
;um den Pullup einzuschalten
loop:
  sbis PIND,PD2
  sbi PORTD,PD6
  rjmp loop
So müßte es eigentlich klappen

Gruß Sebastian