Mikroprocesor 68008 cz



Pobieranie 84,12 Kb.
Data01.03.2019
Rozmiar84,12 Kb.




MIKROPROCESOR 68008 cz. II - współzależność wyjątków


  1. Stan początkowy bajtu systemowego

Korzystając z konsoli zapisz adresy startowe*



(00000) 00,00,10,00 (SSP)

(00004) 00,00,08,00 (PC)

a następnie poniższe instrukcje:



(00800) 20 7C MOVE.L #$00000900,A0

(00802) 00 00

(00804) 09 00

(00806) 40 D0 MOVE SR,(A0)

(00808) 4E 71 NOP

(0080A) 4E 71 NOP

wyzeruj system I rozpocznij krokowanie. Zauważ działanie kolejki - p przed wykonaniem instrukcji poprzedniej pobiera następne. Rozkaz spod ($806) dokonuje wpierw „ślepego” odczytu zawartości lokacji $900/901 (słowo) a dopiero potem zapisuje pod $900 bajt systemowy a pod $901 bajt bitów warunkowych. Rozpisz na bajty SB/bajt systemowy: %T0S00I2I1I0

T=

S=



I2,I1,I0=


  1. Zapisz adresy startowe i procedury obsługi następujących stanów wyjątkowych. Procedury zapewniają podgląd bieżącego stanu rejestru statusowego / instrukcje MOVE SR,(A0)




    1. Śledzenie.

(00024) 00,00,04,00

(00400) 4E 71 NOP

(00402) 4E 71 NOP

(00404) 40 D0 MOVE SR,(A0)

(00406) 4E 71 NOP

(00408) 4E 71 NOP

(0040A) 4E 73 RTE

    1. przerwanie. Na symulator należy wycisnąć wszystkie przyciski numeru urządzenia (stany H). Będzie wykorzystywane IRQ5, dla którego w cyklu akceptacji A3-A1=101, co daje 111111101 = $FE

Temu numerowi odpowiada adres tablicy (dla każdego numeru mamy cztero-bajtową wartość PC):

$FE * 4 = %1111 1110 00 = $3F8

Pod tym adresem tabeli zapiszemy adres obsługi przerwania oraz „program” obsługi.

(003F8) 00 00 05 00

(00500) 4E 71 NOP

(00502) 4E 71 NOP

(00504) 40 D0 MOVE SR,(A)

(00506) 4E 71 NOP

(00508) 4E 71 NOP

(0050A) 4E 73 RTE
*dla niektórych modułów pamięci mogą być one już ustawione – konsola „odmawia” zapisu.


    1. obsługa TRAP /stan wyjątkowy uniemożliwiający “legalne” przejście na poziom nadzorcy/

(00080) 00 00 06 00

(00600) 4E 71 NOP

(00602) 4E 71 NOP

(00604) 40 D0 MOVE SR,(A)

(00606) 4E 71 NOP

(00608) 4E 71 NOP

(0060A) 4E 73 RTE

    1. obsługa stanu wyjątkowego nielegalnej instrukcji

(00010) 00 00 07 00

(00700) 40 D0 MOVE SR,(A)

(00702) 4E 71 NOP

(00704) 4E 71 NOP

(00706) 54 8F ADDQ.L #2,A7

(00708) 54 97 ADDQ.L #2,(A7)

(0070A) 55 8F SUBQ.L #2,A7

(0070C) 4E 71 NOP

(0070E) 4E 73 RTE

Oprócz rutynowego bajtu systemowego w rejestrze statusowym powyższa procedura zwiększa znajdujący się na stosie adres powrotny o 2. Przy instrukcji nielegalnej p odczytuje tylko 2-bajtowy kod operacyjny, a przechodząc do obsługi kładzie na stosie adres niezwiększany tj. adres instrukcji nielegalnej. Zakłada się, że zainicjowana procedura podejmie kroki zaradcze.






Dane

Adres

SR

$FFA

PCH

$FFC

PCL

$FFE




$1000
Stos


SSP / wskaźnik stosu nadzorcy /

Tutaj po przejściu do obsługi wyjątku SSP=$FFH (1).

SSP zostaje zwiększony o 2 aby adresować 4-bajtowy argument (PC). Powrotny PC zostaje zwiększony o 2 (kod operacyjny następnej instrukcji). Zauważ że p najpierw odczyta cały PC a potem odsyła go na to samo miejsce powiększony o 2. Następnie SSP wraca do poprzedniego stanu (3).




  1. Współzależność między stanami wyjątkowymi.




      1. Śledzenie.

Zapisz „program główny”


(00800) 46 FC MOVE #$8700,SR

(00802) 87 00

(00804) 4E 71 NOP

(00806) 4E 71 NOP

(00808) 4E 71 NOP

(0080A) 60 F8 BRA
Pierwsza instrukcja zapisuje do bajtu systemowego

$87=10000111

T maska

Tj. załączone zostaje śledzenie a p przechodzi na poziom użytkownika. Procedura śledzenia zostanie automatycznie zainicjowana po wykonaniu każdej kolejnej instrukcji. Przy krokowaniu zauważ że wskutek działania kolejki p pobiera pierwszy NOP jeszcze na poziomie nadzorcy (led SP na CPU, na najwyższej pozycji adresowej 0).



Następnie kolejka zostaje unieważniona (cofnięta). Procesory Motoroli realizują to oczywiście przy skokach, wywołaniach i powrotach ale także po każdej instrukcji, która powoduje (może powodować) zmianę stanu bajtu systemowego. Wynika to z faktu wstępnego dekodowania rozkazów w kolejce. Zmiana bitów systemowych zmienia warunki rozpoznawania rozkazów (np. dla instrukcji uprzywilejowanych przy zmianie S na 0).

Po cofnięciu kolejki NOP jest czytany ponownie na poziomie użytkownika (led UP na CPU co odpowiada numerowi 2 przy wyświetlanym adresie)

Zauważ że przed zainicjowaniem śledzenia p pobiera do kolejki jeszcze 4 bajty (2xNOP).
Wejście w procedurę śledzenia to:


  • zapis na stosie SR i PC (następnej instrukcji)

  • odczyt adresu obsługi z tabeli.



Zapisz stosy po pierwszym i drugim wejściu w śledzenie (po dwa kolejne bajty od parzystego adresu).

$FFA SR

$FFC PCH

$FFE PCL

$1000

po 1-szym NOP po 2-gim NOP


Zauważ że p korzysta już ze stosu nadzorcy, także tabela znajduje się w obszarze danych nadzorcy (zapalony led SD na CPU, na wyświetlaczu adresowym konsoli nr 1).

Status zostaje zapamiętywany na stosie w takiej postaci jak zapisała go instrukcja MOVE. Po wejściu do procedury śledzenia (led SP- numer 0) stan bajtu systemowego ulega zmianie. Odczytaj bajt zapisywany do lokacji $400 i sprawdź stany bitów S i T. Oznacza to że p jest na poziomie nadzorcy i wyłączył śledzenie.

Obsługa każdego wyjątku dokonywana jest przy wyłączonym śledzeniu- tym bardziej w tym przypadku: p nie może śledzić „sam siebie”.


      1. Wpływ instrukcji nielegalnej na śledzenie.

Zamiast 1-go NOP wpisz kod instrukcji nielegalnej, reszta bez zmian.

(00804) 4A FC ILL

Rozpocznij krokowanie. Zauważ że p przejdzie do obsługi nielegalnej instrukcji ignorując śledzenie.

Zapisz stos.

$FFA

$FFC

$FFE
$1000


w czasie wykonywania procedury obsługi ILL p odczytuje długie słowo spod lokacji $ffc po czym odsyła wartość o 2 większą. Dzięki Temu powrót nie nastąpi znowu do instrukcji ILL lecz do instrukcji $806 gdzie znajduje się instrukcja NOP. Po jej wykonaniu żledzenie oczywiście wystąpi. Kolejka zachowuje się podobnie jak w poprzednim podpunkcie- np. po odczytaniu RTE p ładuje jeszcze dwa kolejne bajty.
Wnioski Ogólne:

  1. Śledzenie jest wykonywane tylko po instrukcji prawidłowej.




      1. Śledzenie oraz stan wyjątkowy wewnętrzny (TRAP0)

Instrukcje TRAP015 są stosowane przez użytkownika do wywoływania procedur systemowych p obsługujących sprzęt (ekran, klawiatura itp.) Jedną umowną instrukcją TRAP jest realizowany powrót do systemu po zakończeniu programu użytkownika. Instrukcja TRAP jest też wykorzystywana do zakładania pułapek na kodzie użytkownika.

W miejsce instrukcji ILL wpisz rozkaz TRAP0.



(00804) 4E 40 TRAP0

Rozpocznij krokowanie. Zapisz stan stosu.


$FF4

$FF6 II

$FF8

$FFA

$FFC I

$FFE
Zauważ następujące działanie p.


  • Zostaje zapisana warstwa I stosu (adres instrukcji kolejnej za TRAP, status taki jak zapisała instrukcja MOVE.

  • Z tabeli odczytywany jest adres procedury obsługi TRAP.

  • Następują teraz odczyty pierwszych 4 bajtów procedury obsługi TRAP (począwszy od lokacji $600). Jest to jednak akcja kolejki, która zaraz zostaje unieważniona. W środku p zostały już wykonane operacje

1 S i 0T

  • Zostaje zapisana warstwa II, która zawiera adres procedury obsługi TRAP i zmieniony stan bajtu systemowego. Działanie to wynika z faktu że instrukcja TRAP wykonuje się przy załączonym śledzeniu, a ponieważ rozkaz TRAP jest prawidłowy nie ma powodu opuszczenia śledzenia. Śledzenie zostanie wykonane jako pierwsze.

  • Z tabeli zostaje odczytany adres obsługi śledzenia.

  • Wykonywana jest procedura śledzenia (zanotuj stan bieżący bajtu systemowego).

  • Rozkaz RTE kończący śledzenie ściąga warstwę II ze stosu powodując rozpoczęcie procedury obsługi TRAP (śledzenie jest oczywiście wyłączone, bajt systemowy odtworzony przez RTE wynosił przecież $27).

  • Obsługa instrukcji TRAP kończy się jak dla każdego wyjątku rozkazem RTE, który ściąga ze stosu warstwę I. Nastąpi teraz przejście na poziom użytkownika oraz zainicjowanie śledzenia (bajt systemowy na stosie to $87).


Wnioski ogólne.


  1. Śledzenie ma wyższy priorytet nad wyjątkami wewnętrznymi od prawidłowych instrukcji.

  2. Jeśli pomiędzy kolejnymi rozkazami programu należy obsłużyć 2 wyjątki to na stosie są zapisywane 2 warstwy. Na górnej warstwie znajdzie się adres wyjątku obsługiwanego w drugiej kolejności, dolna zawiera adres powrotny do programu głównego.




      1. Przerwanie i śledzenie.

Będziemy używali przerwania IRQ5. aby zostało zaakceptowane należy maskę ustawić na poziom 4. Musi to zrobić instrukcja MOVE (pod lokacją $800). Jeżeli rozkaz ten zmieni bit S na 0 to dalsza próba zmiany maski (np. instrukcją ANDI SR) wygeneruje wyjątek naruszenia uprzywilejowania.

Zmieni wiec początek programu.

(00800) 46 FC MOVE #$8400,SR

(00802) 84 00

(00804) 4E 71 NOP (spowrotem)
Wyzeruj p, wciśnij IRQ5 na symulatorze I rozpocznij krokowanie. Zanotuj obraz stosu.

$FF4

$FF6 II

$FF8

$FFA

$FFC

$FFF

Zauważ następujące działanie p.



  • Zapis warstwy I (adres następnego NOP’a, bajt systemowy #$84.

  • Odczyt z tabeli adresu obsługi śledzenia.

  • Po „akcji” kolejki adres obsługi śledzenia zostaje zapisany na stosie 9warstwa II). Ponieważ p wewnętrznie wykonał 1S, 0T więc na stosie zapisany zostanie bajt systemowy postaci #$24 (nie ma powodów zmiany maski).

  • Cykl akceptacji przerwania zostaje wykonany w trakcie operacji zapisu warstwy II (p ma czas na przygotowanie adresu tabeli gdzie jest zapisany adres obsługi przerwania). Zauważ stan szyny adresowej (A19A0) równy FFFFB gdyż akceptowany jest poziom 5 (B=1010). Po cyklu akceptacji symulator wycofuje IRQ5.

  • Odczyt adresu obsługi przerwania.

  • Obsługa przerwania. Zauważ że wewnętrzny stan bajtu systemowego wynosi #$25 - p podniósł maskę na poziom aktualnie obsługiwany. W tym momencie ponowne żądanie IRQ5 zostaje zignorowane. Oczywiście dopuszczone będą żądania IRQ 6,7.

  • Rozkaz RTE kończy obsługę śledzenia, ściąga ze stosu warstwę II i rozpoczyna się obsługa śledzenia (we „wnętrzu” p bajt systemowy #$24).

  • Rozkaz RTE kończący obsługę śledzenia ściąga ze stosu warstwę I i p powraca do programu głównego do następnej instrukcji.


Wnioski ogólne.


  1. Przerwanie zewnętrzne ma wyższy priorytet nad śledzeniem.




      1. Przerwanie+ śledzenie+ stan wyjątkowy od nieprawidłowej instrukcji.

Pozostaw pierwszą instrukcje MOVE, w miejsce pierwszego NOP wpisz rozkaz nielegalny.
(00804) 4A FC ILL

Rozkaz MOVE dalej m. In. Obniża maskę na 4. Po przerwaniu wciśnij IRQ5 na symulatorze i rozpocznij krokowanie.

Zgodnie z wnioskiem A śledzenie nie wystąpi. Należy jeszcze sprawdzić czy ważniejsze jest przerwanie czy stan wyjątkowy wewnętrzny.

Zanotuj obraz stosu.


$FF4

$FF6 II

$FF8

$FFA

$FFC I

$FFE

Zauważ następujące działanie p:



  • Zapis warstwy I z „bieżącym” a nie „następnym” adresem instrukcji (rozkaz był nielegalny).

  • Odczyt z tabeli adresu obsługi instrukcji ILL.

  • Po „akcji” kolejki zapis na stosie odczytywanego adresu obsługi „ILLEGAL” (warstwa II).

  • Cykl INTA występuje podczas zapisu warstwy II

  • Odczyt z tabeli adresu obsługi przerwania.

  • Obsługa przerwania (bajt systemowy #$25).

  • Rozkaz RTE kończący obsługę przerwania ściąga warstwę II i p przechodzi do obsługi instrukcji nielegalnej.

  • Podczas obsługi ILL występuje powiększenie o 2 na stosie (warstwa I) adresu powrotnego.

  • Rozkaz RTE skieruje p do instrukcji NOP (za rozkazem ILL).

Wnioski ogólne.


  1. Przerwanie zewnętrzne ma priorytet wyższy niż stan wyjątkowy wewnętrzny.

  2. Dolna warstwa zawiera adres:

  • „bieżący” przy instrukcji niepoprawnej (nielegalna, emulatory, naruszenie uprzywilejowania),

  • „następny” przy instrukcji poprawnej.




      1. Przerwanie+ śledzenie+ stan wyjątkowy od instrukcji prawidłowej.

Pod lokacją $804 wróć do instrukcji TRAP0



(00804) 4E 40 TRAP0

Wyzeruj p, wciśnij IRQ5 i rozpocznij krokowanie.

Zanotuj stos.

$FEE

$FF0 III

$FF2

$FF4

$FF6 II

$FF8

$FFA

$FFC I

$FFE
Zauważ następujące działanie p.




  • Zapis warstwy I (adres „następny”)

  • Odczyt z tabeli adresu obsługi instrukcji TRAP

  • Po „akcji” kolejki zapis adresu obsługi TRAP na warstwie II stosu

  • Odczyt z tabeli adresu obsługi śledzenia

  • Po „akcji” kolejki adres obsługi śledzenia jest zapisany na warstwie III stosu

  • Cykl akceptacji pojawia się w czasie zapisu warstwy III

  • Z tabeli jest odczytywany adres obsługi przerwania

  • Obsługa przerwania (w p bajt systemowy wynosi #$25, na warstwach III i II natomiast #$24)

  • Rozkaz RTE kończący obsługę przerwania ściąga warstwę III i p przechodzi do obsługi śledzenia (od tego momentu IRQ5 będzie akceptowane lecz te doświadczenia proszę zostawić na koniec ćwiczenia)

  • Rozkaz RTE kończący śledzenie ściąga warstwę II i p przechodzi do obsługi instrukcji TRAP

  • Rozkaz RTE kończący obsługę TRAP ściąga warstwę I i p przechodzi do następnej instrukcji programu głównego.

Następstwo wyjątków (przerwanie, śledzenie, wyjątek wewnętrzny) wynika z wniosków A, B, D.


Wnioski ogólne.
G. Przy wielokrotnych wyjątkach warstwy następne za powrotną zawierają adresy procedur w kolejności odwrotnej do obsługi, wyjątek obsługiwany jako pierwszy nie zakłada swojej warstwy na stosie.






©operacji.org 2019
wyślij wiadomość

    Strona główna