Grüezi

In meiner Timer0-Overflow ISR (OVF0) wird der Zustand eines Pins abgefragt. Je nach Zustand dieses Pins sollte der Programmcode an einem anderen Ort weitergeführt werden. Da dieser Timer-Overflow an jeder beliebigen Stelle im Programm auftreten kann, kann ich ja nicht einfach eine Variable setzen, mit Return aus der ISR raus und anschliessend an den richtigen Ort springen.
Die erste Idee ist natürlich, den ISR per Goto zu verlassen. Aber irgendwie habe ich ein schlechtes Gefühl dabei. Einerseits werden bei Eintritt des ISR ja die Register 0-11, 16-31 auf den Stack gepusht und ohne ein sauberes Verlassen nicht mehr entfernt. Durch Nosave sollte ich dieses Problem umgehen können, aber wie finde ich die überschriebenen Register heraus, welche ich dann manuell absichern muss? Und was gibt es sonst noch zu beachten, wenn ich einen ISR mit Nosave aufrufe?

Oder wäre es in dem Fall einfacher, in der ISR irgendwie den PC zu manipulieren, dass nach dem RETI dann an unterschiedliche Orte gesprungen wird?

Besten Dank für eure Inputs bereits im Voraus