wykład 4 (14)


Rozwiązania wspomagające uruchamianie programów

W celu efektywnego opracowania, przetestowania programu aplikacyjnego niezbędny staje się system z docelowym procesorem wyposażonym w szereg środków ułatwiających i umożliwiających te prace. Procedury systemowe analizują funkcje edycji, asemblacji, deasemblacji a także pozwalają na wgląd uruchamiany program. W tym celu należy dysponować możliwością opuszczenia w wybranym miejscu uruchamianej procedury i przejście do oprogramowania systemowego. Umożliwi ono podgląd zawartości rejestrów, asemblację najbliższych rozkazów, podgląd stosów i wszystkich zasobów pamięciowych. Oprócz podglądu użytkownik ma możliwość modyfikacji danych tak aby po powrocie do uruchamianych procedury μP wystartował np. z innymi wartościami w rejestrach, zmienionym kodem itp. Omawiane 8-bitowe μP nie dysponują rozbudowanymi środkami do realizacji tych celów. Jedynie w 6800 występuje instrukcja SUI która może być wykorzystana jako rozkaz pułapkujący. Przy pewnych ograniczeniach dla Z80 funkcję tą może pełnić także rozkaz restartu.

Począwszy od 16-bitowych μP pojawiły się nowe możliwości. Są to : programowa praca krokowa (zwykła oraz z trybem śledzenia wyłącznie na dwóch rozgałęzieniach), wewnętrzne sprzętowe e rejestry pułapki.

Pułapkę tą możemy zrealizować w sposób :

  1. sprzętowy

  2. programowy

Spotyka się też rozwiązania kombinowane.

Sygnałem zgodności adresu w procesorze 6800 jest VMA

Sygnałem zgodności adresu w Z80 jest MREQ

Jeżeli procesor dochodzi do tego miejsca gdzie adres się zgodzi dostaje przerwanie NMI. Procesor musi skończyć wszystkie cykle rozkazu danego i wchodzi w obsługę NMI. W czasie wejścia w obsługę NMI na stosie zostaje złożony adres tego rozkazu który byłby wykonany gdyby nie to przerwanie Pułapka jest zawsze po skończeniu operacji

Pytanie : ile można założyć pułapek z komparatorem - tyle komparatorów ile chcemy mieć adresów do pułapkowania.

Pułapka sprzętowa wykorzystuje komparator adresowy typu równościowego. Porównuje on stan szyny adresowej z zawartością tutaj 2-bajtowych rejestrów do których procedury nadrzędne zapisują pułapkowany adres. Zadziałanie komparatora warunkują sygnały potwierdzające ważność adresu. Dla 6800 jest to linia VMA a dla Z80 suma sygnałów MREQ i IORQ.

Wyjście z komparatora najwygodniej jest podłączyć na linię NMI. Przy zgodności adresu w danym cyklu magistrali μP otrzyma sygnał przerywający niemaskowany. Należy zwrócić uwagę, że adres wpisywany do rejestrów pułapki nie musi wskazywać tylko na lokację w programie, może dotyczyć także kontaktów z wyróżnioną lokacją danych.

Pułapka sprzętowa jest pułapką typu „po” ponieważ przerwanie jest akceptowane po całkowitym zakończeniu instrukcji. Przy większej ilości pułapkowanych adresów należy oczywiście powielić zespoły komparator-rejestry.

Wchodząc do obsługi NMI μP kładzie na stosie adres rozkazu który byłby wykonany gdyby nie przerwanie. W związku z tym jeśli operator zamiast narzucić przetworzony kolejny pułapkowany adres ustawi tryb realizacji krokowej (metodą kroczącej pułapki), to adres który należy wpisać do rejestru pułapki, procedura systemowa odczyta bezpośrednio ze stosu.

Tyle pułapek ile operatorów. Program nie jest najszybszy ale zawsze tańszy w realizacji i mniej zawodny od sprzętu.

Pytanie ? - czy można zrobić takie rozwiązanie adresowe przy procesorze który ma kolejkę? - nie, ponieważ chodzi o to że to co odczytuje pobiera do kolejki. Może dojść do takiej sytuacji że gdy jest pętla i na końcu jest skok na początek pętli μP w rozpędzie pobrał jeszcze następne zaskoki. W takich sytuacjach pułapki sprzętowej się nie stosuje.

Kod uruchamianego programu zapisywany jest zawsze do RAM-u.

Ponieważ uruchamiana procedura znajduje się w pamięci RAM można więc w miejsce KO wyróżnionego rozkazu wpisać instrukcję SWI uprzednio zachowawszy zasłaniany rozkaz. SWI możemy oczywiście wpisać tylko w miejsce KO (pierwszego jego bajtu), umieszczanie SWI w miejscu adresu bezpośredniego przy danych natychmiastowych nie ma żadnego sensu. Rozkaz pułapkujący nie może być dłuższy od najkrótszej instrukcji.


0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

SWI

0x08 graphic
0x08 graphic
0x08 graphic
JSR

KO

α+1

0x08 graphic

KO

KO

α

Dane

KO

adres

0x08 graphic

SWI

0x08 graphic

KO

α

adres

α+1

skoku

KO

α

przesuw

α+1

Po przejściu do obsługi NMI μP zapisuje na stosie jako adres powrotny wartość α+1. Przed powrotem z procedury systemowej należy :

  1. przywrócić KO zasłonięte NMI

  2. na stosie zmniejszyć o jeden adres powrotu (aby μP trafił na rozkaz uprzednio zasłonięty a jeszcze nie wykonany

  3. umieścić SWI w innym wskazanym przez operatora miejscu

Ilość pułapek typy SWI jest oczywiście nieograniczona, praktycznie nie spotyka się w procedurach liczby większej niż 8.

Problemy zaczynają się jeśli użytkownik wybierze teraz tryb pracy krokowej (krocząca pułapka). Zasłonięty rozkaz mógł być dozwolony a więc wcale nie musi być zachowana sekwencyjność działania. Procedura systemowa musi więc wykonać analizę zasłoniętej instrukcji.

0000

stos

0x08 graphic

xxx

8 b

stos μP (5b)

zapisany przez SWI

PC

α+1

adres powt

jeśli zasłaniam RTS

  1. rozkazy sekwencyjne : procedura na podstawie analizy zasłoniętego KO określa ilość baj-

tów rozkazu i wpisuje ponownie SWI do lokacji (α+1),+2 lub +3

  1. jeśli zasłonięty rozkaz był skokiem bezwarunkowym bądź wywołaniem to :

  1. przy rozkazach warunkowych (skoki) należy brać jeszcze pod uwagę odpowiednie warunki lub funkcje bitów warunkowych i w przypadku spełnienia postępować jak wyżej a przy niespełnieniu warunku przesunąć SWI sekwencyjnie.

  1. jeśli zasłanianym rozkazem był RTS to miał on wpisać do PC wartość z wierzchołka stosu, procedura musi więc stworzyć 8-bajtowe.............. .warstwy nałożonej przez SWI odczytać 2-bajtowy adres nowego ulokowania SWI.

  1. jeśli zasłoniliśmy instrukcję RTI to docelowo PC znajduje się w odpowiednim miejscu na drugiej ośmiobajtowej warstwie stosu.

Pisząc oprogramowanie na bity warunkowe oraz na właściwe stosowanie stosu. Przy każdym rozkazie podawany jest stan bitów warunkowych : bez zmian, modyfikacja, zerowanie, ustawianie, stan nieokreślony. Należy pamiętać aby inne rozkazy nie „zniszczyły” bitu ustawionego wcześniej a wykorzystywanego przez rozkaz warunkowy. Operując na stosie musimy pamiętać ażeby przed wykonaniem rozkazu powrotu wskaźnik stosu wskazywał na powrotną wartość PC a nie na przykład na stan innego rejestru. Generalnie stos musi zostać zrównoważony : w stanie ustalonym liczba zapisów i odczytu ze stosu musi być zrównoważona. Pisząc procedurę należy właściwie zagospodarować wewnętrzne rejestry gdzie umieszczamy najczęściej używane dane zmniejszając w ten sposób liczbę odwołań do pamięci. Procedura winna zachowywać a na końcu odtwarzać stan rejestrów przez nią wykorzystywanych. Oprogramowanie rozpoczynamy przez napisanie w miarę możliwości procedur do komunikacji z układami sprzętowymi systemu, przy zmianie sprzętu zmiana oprogramowania ograniczy się tylko do wymiany niniejszych podprogramów.

tu czegoś brakuje

W zapisie asemblerowym przyjmuje się zawsze, że wartość w nawiasie określa lokację pamięci zapis Motorolowski jest ......................... a Z80 i INTEL stosują notację odwrotną.

0x08 graphic
Mnemonik źródło, przeznaczenie (MOTOROLA)

0x08 graphic
Mnemonik przeznaczenie, źródło (INTEL, Z80)

Przy zapisie danych wielobajtowych MOTOROLA umieszcza argumenty począwszy od bajtu najstarszego a Z80 i INTEL i od najmłodszego.

Podobnie jest w przypadku szyn danych : najstarszy bajt dla MOTOROLI odpowiada ............... numerowi szyny. Dla INTEL-a sytuacja jest odwrotna.

Jeżeli stosujemy indeksację rejestrową to rozkaz musi zawierać zawsze ..............................bajt jest obecny nawet gdy przesunięcie jest zerowe. Jeśli w instrukcji występują równocześnie bajt związany z adresem i bajt związany z danymi to są one zapisywane..........................................

LD ( IY + d ), n

KO

KO

d

n

LD ( n n ), IX

KO

KO

n

n

Aby zamienić zestaw rejestrów podstawowych na alternatywny musimy użyć pary rozkazów. Rejestrów alternatywnych używamy szczególnie w przypadku procedur obsługi przerwania. nie wykorzystując pracochłonnych rozkazów chowania i odtwarzania na stosie. Warunkiem obsługa jednopoziomowa tzn. następne przerwanie nie przerywa poprzedniego


zamienia IX IY

IX

IY

stos


lub

EX (SP), IX

EX (SP), IY

PUSH IX

EX (SP), IY

EX (SP), IX

PUSH IY

EX (SP),IX

EX (SP), ....

POP IX

POP IY

Na liście Z80 występują po raz pierwszy rozkazy blokowe (dotyczą one wyłącznie przesłań pamięci bądź przesłań pomiędzy pamięcią a przestrzenią we/wy.

Rozkaz blokowy zastępuje kilka innych instrukcji a w przypadku Z80 wykonuje się jeszcze metodą cofania PC i ponawiania za każdym nawrotem powielania 2-bajtowego KO (przy przesłaniu blokowym pamięci efektywność wynosi więc 50 %)

Rozkazy blokowe mogą być przerywane w normalny sposób za każdym nawrotem, zaś oddawane magistrali dopuszczalne jest oczywiście po każdym jego cyklu magistral. Przed użyciem rozkazu blokowego (łańcuchowy string ............) należy załadować odpowiedni stan do rejestrów BC, DE, HL. Występuje wiele mutacji przesłania blokowego jak również wersje jednokrotne przeznaczone w zastosowaniach innego warunku końca niż niezerowanie się pary BC.

Przestrzeń we/wy Z80 ma nominalnie 256 lokacji (adres na liniach A0 - A7). Jednakże ponieważ μP wyprowadza na górną połowę szyny adresowej stany rejestrów A lub B to rzeczywista ilość lokacji może wynosić 216. Używany tryb adresacji to bezpośredni (bajt za kodem operacyjnym) lub pośredni rejestrowy (adres w rejestrze C). Przed rozkazem we/wy występują także instrukcje blokowe (maksymalnie 256 nawrotów zliczanych wstecz przez rejestr B). Przy operacji blokowej inkrementacji ulega tutaj wyłącznie wskaźnik adresowy pamięci (para HL) natomiast zawartość rejestru C adresująca we/wy nie ulega zmianie (układ wtedy np. wyprowadza szeregowo przez tą samą lokację kolejne bajty). W przypadku tych instrukcji blokowych symetrycznie występują wersje z dekrementacją i wersje jednokrotne.

Oprócz blokowych przesłań występują także porównania. Rozkazy te przeszukują zadany obszar pamięci pod kątem znalezienia bajtu zgodnie ze wzorcem zapisanym do akumulatora. Wyjście z rozkazu porównania blokowego może nastąpić po :

  1. stwierdzeniu zgodności

  2. przepatrzeniu całego obszaru

Dla potrzeb procedury zliczającej ilość zgodnych bajtów odmiennie ustawiony jest bit Z (wyjście po stwierdzeniu równości Z=1 wyjście ostateczne Z=0).

Uwaga !!! Tutaj są znaczne braki ponieważ wyszedłem w wykładu po ksera. Tekst tylko z kasety!

Jak odczytać aktualną zawartość PC ? - dać rozkaz CALL (wywołanie) który pójdzie na miejsce przez nas wskazane a na stosie zostawi PC. Kiedy natychmiast z tej lokacji powrócimy a na stosie PC zostanie. W następnych rozkazach możemy zdjąć ze stosu to co tam było.

Wskaźnik stosu SP może być załadowany bezpośrednio względnie z rejestru IX IY oraz HL. Odczytanie SP jest natomiast utrudnione. Jedyna możliwość to wykonanie rozkazu ..................po uprzednim wyzerowaniu HL. Stan PC jest ustalany na 0 po wyzerowaniu a potem uwalnia rozkazy skoku wywołań, powrotów i przerwania. Wśród skoków występują także instrukcje ............................przenoszące do PC stan wyróżnionych rejestrów. Odczytanie stanu PC napotyka na szczególne trudności. Jedynym sposobem jest użycie instrukcji CALL a w miejscu wywołania umieszczenie rozkazu RET. Ponieważ odczyt z pamięci jest nieniszczący więc na stosie po powrocie pozostanie wartość PC na instrukcji następnej za rozkazem CALL.

μP Z80 dopuszcza operację na wyróżnionych bitach (w rejestrach bądź w lokacjach pamięciowych adresowanych poprzez HL, IX, IY). Bity mogą być przenoszone do flag Z w celu użycia instrukcji skoku warunkowego, mogą być też selektywnie zerowane i ustawiane. Niniejszy zestaw czynności nie obejmuje jeszcze rozkazów negacji bitu, skoku od bitu z zanegowaniem, ustawieniem bądź wyzerowaniem. W nowszych μP pojawiły się nawet operacje na tzw. polach bitowych.

W ciągu instrukcji przesunięć i obrotów μP Z80 dysponuje także obrotami 3 cyfrowej liczby dziesiętnej w kodzie BCD w której liczba setek to dolna połówka akumulatora a pozostałe cyfry to lokacja pamięciowa. Przy operacjach arytmetyczno - logicznych jednym z argumentów (domyślnym) jest zawsze akumulator.



Wyszukiwarka

Podobne podstrony:
wyklad 14
wyklad 14 15 2010
Wyklad 14 2010
Wyklad 14 PES TS ZPE
Wyklad 14
Wykład 14
Wykład 14
patomorfologia wyklad 2 14 10 2011 2
IS wyklad 14 15 01 09 MDW id 22 Nieznany
Wyklad z 14, szkoła
PiK wykład 14 10 16
Mechanika nieba wykład 14
Nauka administracji z elementami teorii zarządzania Wykłady 14 11 2013
Wykład 14 (18.12.07), toxycologia
Negocjacje i sztuka porozumiewa WYKLAD 2 (14 04 2013) id 785033
oddechowy wyklad 14
Młoda Polska WYKŁAD (14 05 2014)
Teoria sterowania wykład 3 (14 03 2003)

więcej podobnych podstron