252
wykpnywanla'innych bardziej w danej chwilię^trzebn^ch 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 przerwania. ,
W procesorze 8080 urządzenie zewnętrzne może zainicjować przerwanie przez podanie 1 na wejście INT procesora. Żądanie przerwania zostanie za-akceptowane, gdy wewnętrzny przerzutnik INTE jest w stanie 1 (stan prze-rzutnlka INTB można, jak pamiętamy, ustawiać rozkazami El i DI). Po zaobserwowaniu żądania przerwania fzP doprowadza d<j końca wykonanie bieżącego rozkazu i przechodzi do specjalnego cyklu Mi, 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ęznifca rozkazów, co dodatkowo różni go od występującego normalnie Jako M1 cyklu POBRANIE ROZKAZU. Wreszcie, w cyklu tym ^.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 +RST7), powodujący slcok do jednego z• ośmiu adresów w pamięci, z zapamiętaniem ‘ w stosie stanu licznika rozkazów poprzedzającego' skok.
WMMl
I0IKAIU
MUMIA
M0V A,t ADD C HO* M.A
mu PSW-
mu t
i wapienia m i
WAPIENIE NA 3 PODAJE MIKAl RiT 3.W WYNIKU CIEM KSP) - 1)—2B - (PCH)
((sp)-i)—(pu) ' (Pt)—Ml!
RET •
(ptuy—((sp)-i) * n (PCI)—(IIP) - i) • !3 I PROCESOR PUEtUOOll DO
Rys. 6.9. Sekwencja wykonywanych rozkazów przy przerwaniu. (Wszystkie adresy podane są w kodzie szesnastkowym)
Ta rys. 6.9 przedstawiono przykładową sekwencję rozkazów przy przerwaniu. W czasie wykonywania rozkazu o adresie 2BB2H*1 nadszedł sygnał żądania przerwania z urządzenia nr 3 1 po wykonaniu tego rozkazu przez jzP •P Litera H na końou wskazuje, te jest to liczba szesnastkowa.
urządzenia .to wysłało na szynę danych rozkaz RST 3. Wczytanie tego rozkazu przez y.P w cyklu POTWIERDZENIE PRZERWANI! spowodow*' ) 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’'.czule, 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, 0036H. 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 |
1OBOI |
LXI H.3D00H |
0019 |
PUSH H |
10B1 V | |
001A |
El |
10B2J | |
001B |
JMP 10B0H |
10B31 |
IN 2 |
0010 |
10B4J | ||
001D |
10B5 |
ADD M | |
m |
1 0B6 |
M0V M,A | |
10B7 |
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 PU3H ES» 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.