Tom277 napisał(a):
ale czy mógłbyś mi wskazać gdzie jest "podwójne odkładanie i pobieranie rejestrów na stosie" ?
Tzn pewnie wiesz, że każde przerwanie czy tego chcesz ma swój prolog i epilog - czyli MUSI odłożyć na stosie używane rejestry wewnątrz przerwania a w prologu czyli przed wyjściem z przerwania musi je zdjąć ze stosu.
Jak myślisz ? jak działają funkcje ? W końcu procedura obsługi przerwania to też pewien rodzaj funkcji

... a więc takie same zasady ... przecież wchodząc w funkcję gdy kompilator musi użyć rejestrów, które mogłyby być wykorzystywane przed jej wywołaniem - MUSI zrobić dokładnie to samo ... tzn oczywiście jest pewna różnica w stosunku do przerwania bo w przypadku funkcji działa mocno optymalizator, który może oczywiście przy niewielkim programie użyć innych (wcześniej nie używanych) rejestrów i nic nie będzie odkładał na stosie. W przypadku o którym tu mowa trzeba byłoby zajrzeć do pliku *.lss czyli kodu asemblerowego tego co napisałeś i sam byś się szybko przekonał czy zostały odłożone czy nie - istnieje taka możliwość, że z powodu optymalizacji ta twoja funkcja może w ogóle zniknąć i jej ciało pojawi się po prostu w przerwaniu ... no ale trzeba mieć na uwadze, że optymalizacja może się zmieniać po każdej często nawet drobnej modyfikacji programu. Wziąwszy wszystko pod uwagę - oczywiście to że dwa razy odkładają się rejestry na stosie jak mówię może być na wyrost w tym wypadku ale warto wiedzieć jak to działa na przyszłość.
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]