ďťż
Nie chcesz mnie, Ben. SkĹadam siÄ z siedmiu warstw popieprzenia okraszonych odrobinÄ
gĂłwnianego szaleĹstwa.
Można to zrobić prościej, korzystając z rozkazów skoku i rozkazu powrotu (rys. 3.5). Przed każdym wysłaniem wyniku do drukarki, należy wykonać skok do stałego miejsca, gdzie są umieszczone rozkazy konwersji i wykonać je. Ciąg rozkazów konwersji musi się kończyć specjalnym rozkazem powrotu, tak by po wysłaniu wyniku do drukarki program mógł kontynuować obliczenia. Aby taki powrót był możliwy, przed wykonaniem skoku niezbędne jest zapamiętanie aktualnej wartości licznika rozkazów. Do tego celu używa się stosu omówionego w pytaniu 3.12.
Fragment programu wykorzystywany w ten charakterystyczny sposób nosi nazwę podprogramu. Skok powodujący jego uaktywnienie oraz zapamiętanie licznika rozkazów nazywa się wywołaniem podprogramu. Powrót do miejsca, z którego nastąpiło wywołanie, nazywa się rozkazem powrotu z podprogramu.
Program
Skok do podprogramu
Skok do podprogramu
Skok do podprogramu
Podprogram
Rysunek 3.5. Ilustracja wykorzystania podprogramu
Procesor 41
3.12. Co to jest stos?
Stos jest to specjalnie zorganizowany fragment pamięci (w postaci jednowymiarowej tablicy) przeznaczony do przechowywania niewielkiej liczby danych. Dostęp do tej tablicy jest możliwy tylko w pewien charakterystyczny sposób. Dane na stosie można umieszczać lub zdejmować.
Umieszczanie danych przypomina układanie książek, jedną na drugiej. Kolejnego elementu, który chcemy umieścić na stosie, nie można wstawić między istniejące już na stosie elementy, lecz można go tylko położyć na wierzchołku. W wyniku umieszczania kolejnych elementów stos rośnie". Element ostatnio położony na stosie nazywa się wierzchołkiem stosu.
Pobieranie danych ze stosu przebiega w odwrotnej kolejności. Jedynym dostępnym elementem, który można pobrać jest wierzchołek stosu. Nie można wyjąć" żadnych elementów ze środka stosu. W wyniku pobierania elementów stos obniża się". Po pobraniu wszystkich elementów stos jest pusty.
Działania na stosie są możliwe dzięki istnieniu specjalnego rejestru, zwanego wskaźnikiem stosu. Zawiera on zawsze adres aktualnego wierzchołka stosu. Rozkaz zapisu danej na stosie zwiększa wartość wskaźnika stosu, a następnie umieszcza ją w miejscu przez niego wskazywanym. Rozkaz pobierania informacji ze stosu odczytuje daną wskazywaną przez wskaźnik i zmniejsza jego wartość. W ten sposób zawsze znane jest położenie jedynie wierzchołka stosu.
3.13. Do czego służy stos?
Stos jest szczególnie przydatny do przechowywania adresów powrotu z podpro-gramów. Rozkazy wywołania podprogramu automatycznie przesyłają na stos aktualną wartość licznika rozkazów. Natomiast rozkazy powrotu z podprogramu (również automatycznie) pobierają ze stosu wartość licznika rozkazów i wykonują skok w tak odtworzone miejsce. Rozwiązanie to umożliwia wielopoziomowe wywoływanie pod-programów przez podprogramy.
W podobny sposób jest wykorzystywany stos przy obsłudze przerwań (patrz pyt. 3.14). Przed przystąpieniem do wykonywania rozkazu podprogramu obsługi przerwania procesor zapisuje na stosie aktualne położenie w wykonywanym programie oraz stan procesora. Po zakończeniu obsługi przerwania stan rejestrów procesora jest odtwarzany i program może być kontynuowany.
42 Komputer często zadawane pytania
3.14. Na czym polega przerwanie i jakie są rodzaje przerwań?
Przerwanie polega na wstrzymaniu aktualnie wykonywanego programu i automatycznym uruchomieniu jednego ze specjalnych podprogramów wykonujących czynności zwane obsługą przerwania.
Przyczynami przerwania mogą być błędy, spowodowane przez program takie, jak próba dzielenia przez zero, próba wykonania nielegalnego rozkazu lub odwołanie do zawartości nieistniejącej komórki pamięci. Takie sytuacje są wykrywane przez układy procesora, które zawieszają wówczas wykonywanie programu i uruchamiają podpro-gram, np. wysyłający komunikat o błędzie. Po zakończeniu podprogramu obsługi przerwania następuje wznowienie programu, który został przerwany. Wyjątkiem są sytuacje, w których oprogramowanie nadzorujące pracę komputera (system operacyjny - rozdz. 9) uzna, że dalsze jego wykonywanie nie ma sensu.
Oprócz przerwań mających swe źródło w samym programie, istnieją jeszcze przerwania zewnętrzne. Mogą one być spowodowane np. naciśnięciem klawisza, zakończeniem lub błędem transmisji przez układ wejścia/wyjścia. Dzięki zastosowaniu przerwań do obsługi urządzeń wejścia/wyjścia, jest możliwe zwolnienie procesora z bezpośredniego obsługiwania transmisji. Układy komunikacyjne wymieniają informacje między sobą, a procesor jest jedynie informowany o obecności odebranych już informacji
|
WÄ
tki
|