66
4. Program ćwiczeń
4.5.2. Rozkaz powrotu z przerwania dla wersji wektoryzowanej układu przerwań
Każdą procedurę obsługi przerwania kończy rozkaz powrotu. Obecnie zajmiemy się zaprojektowaniem takiego rozkazu. Zadaniem tego rozkazu jest przywrócenie takiego stanu procesora, jaki istniał przed rozpoczęciem wykonywania procedury obsługi przerwania. W przypadku maszyny EW oznacza to przede wszystkim przywrócenie stanu licznika rozkazów. Zawartość tego rejestru jest chowana w pamięci w momencie wykrycia przerwania (zob. opis rozkazu dodawania w wersji przcrywalnej - rozdz. 2.2.1.2.). W ramach rozkazu powrotu należy zatem odczytać odpowiednia komórkę pamięci i odczytaną zawartość (adres następnego rozkazu) przesłać do rejestrów L i A. Zakładamy, źe argumentem rozkazu powrotu jest adres komórki pamięci, w której przechowywany jest ślad. Ponieważ rozkaz ten jest projektowany dla układu przerwań o organizacji wektoryzowanej, dodatkowo należy pamiętać o wyzerowaniu informacji o obsługiwanym przerwaniu za pomocą sygnału rint. Realizacja rozkazu powrotu z przerwania będzie zatem wymagać następujących przesyłów:
((A)) - S |
czyt |
odczyt rozkazu |
<S)-I |
wys, wgj |
i jego dekodowanie |
(L) + 1 - L |
ii |
L wskazuje następny rozkaz |
0 - RP[iJ |
rint |
wyzerowanie odpowiedniego bitu rej. RP |
(Ad) - A |
wy ad, wea |
odczytanie przechowywanego |
<(A»-S |
czyt |
w pamięci adresu powrotu |
<S)-L |
wys, sa. wel |
i przejście do wykonywania rozkazu |
(S) -* A |
wys, sa, wea |
spod tego adresu |
Podział sygnałów sterujących przesyłami na takty i zapisanie rozkazu powrotu z przerwania, w postaci pliku opisu rozkazu, pozostawia się Czytelnikowi.
Ćwiczenie obejmuje zapoznanie się z układem wejścia-wyjścia maszyny EW oraz zaprojektowanie kilku rozkazów wejścia-wyjścia i programu korzystającego z nich.
4.6.1. Przykładowy program
Napisać progTam, którego zadaniem jest wczytywanie znaków z urządzenia wejściowego i kopiowanie ich na urządzenie wyjściowe aż do wczytania znaku o kodzie 27. Operację wejścia-wyjścia zrealizować za pomocą specjalnych rozkazów.
Realizacja zadania wymaga zdefiniowania co najmniej dwu nowych rozkazów Zadaniem pierwszego z nich jest wczytanie znaku z urządzenia zewnętrznego o podanym adresie i zapisanie go w akumulatorze. Drugi rozkaz powinien wypisać na urządzeniu wyjściowym o podanym adresie znak, którego kod znajduje się w akumulatorze. Rozpocznijmy od rozkazu
4.6. Maszyna EW. Układ wejścia-wyjścia
67
wczytania znaku z urządzenia wejściowego. Argumemem tego rozkazu będzie adres urządzenia, z którego należy wczytać znak. Działanie tego rozkazu sprowadza się do wystartowania urządzenia zewnętrznego, a następnie sprawdzania jego gotowości. Jeśli przerzutnik GOT, w obwodzie wymiany, zostanie ustawiony (GOT = l), oznacza to, że w rejestrze buforowym obwodu wymiany znajduje się kod odczytanego znaku. Należy go wtedy przesłać do akumulatora i przejść do wykonywania następnego rozkazu. Za pomocą przesyłów międzyrejestrowych można to zapisać następująco:
((A)) -* S (S)-I (L) + 1 - L 1 - ST
czekaj aż GOT (RWc) - Ak
czyt odczyt rozkazu
wys. węj i jego dekodowanie
ii L wskazuje następny rozkaz
start zainicjowanie pracy urz. wejściowego
1 wyg testowanie przerzutnika gotowości
wy we, weja, przesianie kodu odczytanego znaku
pob, weak do akumulatora
(L) — A wyl, wga przygotowanie następnego rozkazu
Ostatnim etapem projektu rozkazu jest zapisanie go w postaci pliku opisu rozkazu:
{ Rozkaz wczytania znaku z klawiatury }
ROZKAZ TYP - EW MNE - WPR KOD - 000
OPIS =* '< OWIAdl ) -> Ak'
AKCJA
czyt wys wei il ; strt ; czekaj:
wyg CZY STN_0_magS DALEJ czekaj ; wywe waja pob weak wyl wea ;
KONIEC
Drugim etapem realizacji opisywanego zadania jest zaprojektowanie rozkazu wypisującego znak na urządzenie wyjściowe. Tym razem najpierw należy przesłać kod znaku do rejestru wejściowego obwodu wymiany, a dopiero potem wystartować urządzenie i czekać na ustawienie przerzutnika gotowości. Poniżej podano opis działania rozkazu w postaci listy przesyłów międzyrejestrowych:
((A)) — S czyt odczyt rozkazu
(S) — I wys, wei i jego dekodowanie
(L) + 1 — L il L wskazuje następny rozkaz
(Ak) — RWe wyak, wcwv przesłanie znaku do rejestru buforowego
I — ST start wystartowanie urządzenia wyjściowego
czekaj aż GOT = 1 wyg testowanie zakończenia operacji
(L) — A wyl, węą przejście do następnego rozkazu