Also ich hätte da folgende Anmerkungen dazu

Start
Initialiesierung ; B.0 als Eingang mit Pull - Up und B.1 als Ausgang
r16 als Zähler ldi r16,100 r17,r18 als warte ldi, r17 0b00000001 ldi r18,0b00000001

mainloop: sbis PINB,0
rjmp schritt ; warte bis Tastergedrückt
rjmp mainloop



schritt:

rcall warte ; sonst kann es sein das die 1 nach einer 0 zu kurz anliegt.

cbi PORTB, 1 ; lösche Bit
rcall warte ; gehe zu warten
sbi PORTB, 1 ; setze Bit
dec r16
BRNE schritt ; schlaufe bis r16 = 0

rjmp mainloop


warte: inc r17
brne warte
inc r18
brne warte
ret


; ----------------- Ende
Ich vermute das folgendes passiert.
Standardmässig ist der PortB.1 ja 0.
In deinem Schritt Programm wird er durch die Anweisung SBI PORTB,1 auf 1 gesetzt, aber nur sehr kurz, weil ja fast sofort wieder die Anweisung CBI PORTB,1 ausgeführt wird.
Diese 1 wird dein Schrittmotortreiber nicht mitbekommen und mal erst gar nichts tun.
Am Ende der Routine wird der PORTB,1 dauerhaft auf 1 gesetzt, das schnallt dein Motortreiber und macht einen Schritt.

Probier das mal mit dem zusätzlichen rcall warte.

Eigentlich müsste der Motortreiber nach jedem Tastendruck einen Schritt machen, wenn Du lange genug wartest ca 15sekunden bei 8MHz.

Was auch noch möglich wäre ist, das Du vergessen hast den Stack zu initialisieren, das macht dann auch immer komische Fehler