252
wykpnywanla'innych bardziej w danej chwilię^trzebnych obliczeń,a po Ich zakończeniu powrót do przerwanych. Współczesne komputery posiadają mechanizm pozwalający na takie przerywanie obliczeń. Mechanizm ten nosi nazwę przerwania, a powodujący Je sygnał zewnętrzny nazywa się Żądaniem przer- ■ wania. >
W procesorze 8080 urządzenie zewnętrzne może zainicjować przerwanie przez podanie 1 na wejście INT procesora, żądanie przerwania zostanie zaakceptowane, gdy wewnętrzny przerzutnik INTE Jest w stanie 1 (stan prze-rzutntka INIE można, Jak pamiętamy, ustawiać rozkazami El i DI). Po zaobserwowaniu żądania przerwania fj-P doprowadza dtj końca wykonanie bieżącego rozkazu i przechodzi do specjalnego cyklu Ml, podając na szynę danych status POTWIERDZENIE PRZERWANIA oraz zerując wewnętrzny przerzutnik INTE.
W‘czasie tego cyklu nie zwiększa się zawartość lięznita rozkazów, co dodatkowo różni go od występującego normalnie Jako M1 cyklu POBRANIE ROZKAZU. Wreszcie, w cyklu tym jj.P pobiera rozkaz skoku do podprogramu, przechowywany poza pamięcią i, podawany na szynę danych przez urządzenie żądające przerwania. Zwykle Jest to Jednobajtowy rozkaz restaętu (RST 0 +2317), powodujący stok do Jednego z- ośmiu adresów w pamięci, z zapamiętaniem ‘ w stosie stanu licznika rozkazów poprzedzającego skok.
* |
AMEt WYKMIWANEU OtlUIll |
W Midi U2KA2U |
IDAHENIA |
• |
.— UDANIE NIE RWANIA | ||
mi |
M0V A,0 |
/ 2 WAPIENIA NA 3 | |
1002 |
ADO C |
_y- WAPIENIE NA 3 WNUE | |
200J . |
MW M,A^"~ |
I0IKAI ROT 3 W WYNIKU CIEM KtP)-t)— 2S* (PCH) | |
0010 |
PUSH PSW—- |
((SP)-2)— 03= (PU) ' (PC)—0010 1 PAOCttOR NIEtllStll |
lit) HJSH 0
V
Rys. 6.9. Sekwencja wykonywanych rozkazów przy przerwaniu. (Wszystkie adresy podane są w kodzie szesnastkowym)'
.'a rys. 6.9 przedstawiono przykładową sekwencję rozkazów przy przerwaniu. W czasie wykonywania rozkazu o adresie 2BB2H*^ nadszedł sygnał żądania przerwania z urządzenia nr 3 1 po wykonaniu tego rozkazu przez jzP
*P Łltara H na końou wskazuje, że Jest to liczba szesnastkowa.
urządzenia.to wysiało na szynę danych rozkaz RST 3» Wczytanie tego rozkazu przez y.P w cyklu POTWIERDZENIE PRZERWANIA spowodowe' > przesłanie do stosu zawartości licznika rozkazów 2BB3, zaś do liczni^ rozkazów liczby 0018H (sprawdź). Następnym rozkazem pobranym przez |uP z pamięci jest więc rozkaz o adresie 0018H. Ten i kolejno po nim następujące, aż do rozkazu RET włócznie, tworzą program obsługi przerwania. Pobranie przez jj.P rozkazu RET powoduje odczytanie ze stosu poprzedniej zawartości licznika rozkazów i powrót do miejsca, gdzie nastąpiło przerwanie wcześniej wykonywanego programu.
Rozkaz RST umożliwia skok do jednego z ośmiu adresów, wynoszących0000H, 0008H, 001OH, 0018H, 0020H, 0028H, 0030H, 003SH. Kolejne adresy skoku odległe są o 8 komórek pamięci, co wystarcza do umieszczenia kilku pierwszych rozkazów programu obsługi przerwania, w tym rozkazu skoku JMP do innego obszaru pamięci zawierającego resztę tego programu.
Ponieważ program obsługi przerwania zazwyczaj operuje na wewnętrznych rejestrach i wskaźnikach, ich poprzednia zawartość powinna być zachowana, aby po ukończeniu obsługi przerwania, dawny program mógł być poprawnie kontynuowany. Poniżej podano przykładowy program obsługi przerwania zabezpieczający rejestry A, H,hL 1 wskaźniki.
0018 |
PUSH PSW |
10BO-) |
LXI H.3DOOH |
0019 |
PUSH H |
10B1 V | |
001A |
El |
10B2 J | |
001B |
JMP 10B0H |
1 0B3\ |
IN 2 |
0010 |
10B4 J | ||
001D |
10B5 |
ADD M | |
m |
1 0B6 |
MOY M,A | |
* |
1 0B7 |
POP H | |
• |
10B8 |
POP PSW | |
10B9 |
RET |
Obsługa przerwania polega tu na dodaniu bajtu wczytanego z wejścia 2 do zawartości komórki pamięci o adresie 3D00H. Najpierw jednak rozkaz PUSH KIA przesyła do stosu zawartość akumulatora i wskaźników, zaś PUSH H przesyła tamże zawartość pary rejestrów H, L. Po zabezpieczeniu potrzebnych danych zezwala się na dalsze przerwania ustawiając rozkazem El wewnętrzny przerzutnik INTE, wyzerowany uprzednio sygnałem żądania przerwania INT. Następnie rozkaz JMP 10B0H powoduje skok do komórki 10B0H, gdzie rozpoczyna się właściwy program obsługi przerwania. Wreszcie rozkazy POP H i POP PSW przywracają rejestrom ;H,L, akumulatorowi i wskaźnikom stan, jaki miały w chwili przerwania, zaś rozkaz RET przywraca taki stan licznikowi rozkazów, w związku z czym procesor przystępuje do kontynuowania programu zawieszonego przerwaniem.
W powyższym przykładzie rozkaz El zezwalał na dalsze przerwania natychmiast po zabezpieczeniu w stosie wszystkich potrzebnych danych, Można tak czynić, jeżeli obsługa dalszych przerwań nie wymaga zakończenia aktualnego przerwania; w przeciwnym wypadku rozkaz El należy umieścić przed rozkazem RET.