Klar kann man das mit Nosave Abschalten, nur muss dann die ISR durchgängig in Assembler programmiert werden, da Bascom nicht dokumentiert, welche Register bei welchen Aktionen verändert werden.

Hatte mal als Workaround den Bascom-Code durch einen Disassembler gejagt, um herauszubekommen, welche Register in einer zeitkritischen ISR mit Push und Pop gesichert werden müssen. Nur bleibt dabei das ungute Gefühl zurück, dass vielleicht beim nächsten Compiler-Lauf andere Register umgeschaufelt werden.

ein Beispiel
Code:
Int1_int:
   Incr I                                                   'Word
Return                                                      'RETI
d.h. eine ISR mit dem Increment einer Word-Variable verwurstet Bascom zu 130 Byte Code (65 Assemblerbefehle)

push r0
push r1
push r2
push r3
push r4
push r5
push r7
push r10
push r11
push r16
push r17
push r18
push r19
push r20
push r21
push r22
push r23
push r24
push r25
push r26
push r27
push r28
push r29
push r30
push r31
in r24, SREG
push r24
ldi r26, 0xF2
ldi r27, 0
call sub_401
pop r24
out SREG, r24
pop r31
pop r30
pop r29
pop r28
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
pop r11
pop r10
pop r7
pop r5
pop r4
pop r3
pop r2
pop r1
pop r0
reti

sub_401:
ld r30, X+ ;Word-Variable I laden
ld r31, X
adiw r30, 1 ;hier erfolgt 'Add Immediate to Word', d.h. unser Word-Increment !!!!!
st X, r31
st -X, r30 ;Variable I sichern
ret
; End of function sub_401
ich Poste den Assemblercode mal bewusst in abgerollter Länge damit man mal den Aufbläh-Faktor von Bascom sieht