wykład 3 (12)


LISTY ROZKAZÓW 8-BITOWYCH μP

Instrukcje sterujące programem

SKOKI

W przypadku skoków jedynie 6800 dysponuje pełnym zestawem obejmującym wszystkie relacje a także skoki do stanu bitu C,Z,N,V. Skoki te operują w zakresie -128 do +127. Oprócz tego listę uzupełnia skok z adresacją bezpośrednią operujący w całej przestrzeni adresowej. W przypadku konieczności skoku warunkowego na „dalszy dystans” używamy instrukcji JMP i skoku warunkowego o warunku komplementarnym.

BEQ z=1

BNE z=0

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
BNE

0x01 graphic

0x08 graphic
0x08 graphic
JMP

Na całej przestrzeni adresowej

0x08 graphic

(ten rysunek jest niekompletny - proszę uzupełnić. Bogdan)

6502 a szczególnie Z80 dysponują uboższą listą rozróżniania relacji, aczkolwiek ten ostatni posiada więcej rodzajów skoków „16-bitowy”. Ponadto umożliwia on instrukcją ładującą HL (bądź IX i IY) do PC tzw..rozskok w różne miejsca w zależności od stanu tych rejestrów.

Na podkreślenie zasługuje użycie dodatkowych trybów adresacji przy skoku bezwarunkowym 6502. Przykładowo dla trybu pośredniego mamy możliwość załadowania do PC adresu znajdującego się w obszarze pamięci RAM, adres ten jest modyfikowany w zależności od sytuacji w programie. W przypadku zwykłych skoków z adresacją bezpośrednią zapisanych w pamięci stałej jest niemożliwe. Jedyną alternatywą jest tutaj ulokowanie fragmentu kodu z tym skokiem w pamięci RAM, co nie zawsze jest możliwe, a wymaga wspólnej przestrzeni adresowej dla kodu i danych. Jeśli w przypadku JMP 6502 użyjemy tryby indeksowego pośredniego, to możemy rejestrem X bądź Y precyzować który adres z tabeli rozpoczynającej się od adresu zawartego za KO będzie wykorzystany.

WYWOŁANIA

Rozkaz wywołania jest rozkazem skoku uzupełniony o zapisanie na stosie adresu powrotu. Adres powrotny wskazuje na tą instrukcję która była by wykonana gdyby w miejsce rozkazu wywołania wstawić instrukcję NOP. Z80 dysponuje wprawdzie rozbudowaną liczbą instrukcji CALL jednakże wszystkie one stosują tylko tryby bezpośrednie. Nawiasem mówiąc instrukcje wywołań warunkowych na długo potem zniknęły z list rozkazów μP. W przypadku 6800 jest wywołanie PSR (adresacja względna) i JSR (bezpośrednia po całej przestrzeni adresowej). Realizacje funkcji wywołania warunkowego można uzyskać identyczne jak w przypadku skoku warunkowego po całej przestrzeni.

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
BNE

Wywołanie warunkowe w zakresie (127 -128)

0x08 graphic
0x08 graphic
BSR

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
BNE

0x08 graphic
0x08 graphic
JSR

0x08 graphic

(ten rysunek jest chyba niekompletny - proszę uzupełnić. Bogdan)

POWROTY

W przypadku powrotów można zauważyć symetrię w stosunku do rozkazów wywołań omawianych μP. Należy pamiętać niezależnie czy wywołanie było jako PSR czy JSR, powrót to zawsze ta sama instrukcja RTS. W 6800 rozkaz RTI odtwarza ze stosu 7 bajtów pewnego stanu μP. Powroty Z80 odtwarzają tylko PC. Użycie tej instrukcji zostało omówione poprzednio. Aby zrealizować powrót warunkowy stosujemy ten sam gambit co w przypadku warunkowego wywołania (dotyczy 6800 i 6502).

PĘTLE

Pierwszy rozkaz pętli pojawił się w Z80. Jest to prosta pętla jedynie z warunkiem licznika.. Licznikiem jest rejestr B. Rozkaz DJNZ zmniejsza B i skacze dotąd dopóki B nie wyzeruje się. Gdy B osiągnie zero skok nie jest wykonywany i program wykonuje się dalej sekwencyjnie. Zwykle skaczemy wstecz ponieważ DJNZ jest ostatnią instrukcją w pętli.

LDB#xx

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
DJNZ

Ponieważ licznikiem pętli może być tylko rejestr B istnieją trudności w strukturze typu pętla w pętli (należy stany liczników dla różnych pętli z różnych rejestrów podsuwać do rejestru B). W dalszych μP do rozkazu pętli dołączono także możliwość jej wcześniejszego opuszczenia po spełnieniu określonego warunku.

PRZERWANIA PROGRAMOWE

Jedynie 6800 dysponuje rozkazem przerwania programowego, które zachowuje cały stan μP i posiada indywidualny adres startowy (zapisywany w lokacjach FFFA,B). Podobna instrukcja występuje też dla 6502, lecz musimy dodatkowo zapewnić załadowanie na stos stanu pozostałych rejestrów oraz rozróżnić czy przyczyną był rozkaz BREAK czy przerwanie INT (wspólny adres startowy). Poza tym działanie jest identyczne. Wykonanie SUI nie zależy od stanu bitu maski, co więcej powoduje ono blokadę przerwań zewnętrznych. Po zapisaniu na stosie całego stanu (jako PC) zapamiętywana jest następna lokacja (za SWI). μP ładuje adres startowy z lokacji FFFA,B. Rozkazem kończącym obsługę przerwania softwerowego jest oczywiście instrukcja RTI. 6800 wchodząc w przerwanie wykonuje po zakończeniu instrukcji , a przed pierwszym rozkazem obsługi 8-cykli magistrali (7-bajtów na stos + 1 cykl „wyrównujący” warstwę stosu do 8 bajtów). W wielu sytuacjach tak długi czas reakcji na samym początku jest nie do przyjęcia, szczególnie jeśli obsługa przerwania jest trywialna. W takich sytuacjach lepiej jest aby μP zachowywał na stosie wyłącznie PC jak np. Z80. Również w tym przypadku należy rozważyć celowość użycia techniki przerwań. Dotyczy to szczególnie urządzeń (interfejsów)programowanych które zwykle mają możliwość odczytu żądania obsługi, także softwerowo poprzez lokację swojego rejestru (rejestrów ) statusowego. W tym przypadku μP nie będzie mógł się zajmować czym innym. Niektóre kontrolery mają dwa przerwania z których akceptacja jednego powoduje właśnie zachowanie na stosie wyłącznie PC. Wykorzystując NMI należy zapewnić, aby karta wystawiała go w sposób odpowiedzialny, a nie np. przed zaprogramowaniem zaraz po włączeniu napięć zasilających. Wynika to z faktu, że do właściwej obsługi przerwania konieczne jest załadowanie jego programu obsługi, a przede wszystkim wykonanie rozkazu wpisującego początkową wartość SP, jak również (dotyczy to 6800 i 6502) zapisanych w lokacjach FFFX - jeśli jest to pamięć RAM adresu startowego dla NMI. Częstokroć μP ma możliwość poprzez zapis i odczyt wyróżnionej lokacji adresowej blokowanie i odblokowywanie sygnałów NMI (jest tak w komputerach PC ponieważ NMI informuje o błędzie parzystości, a po włączeniu zasilania w połowie bajtów parzystość jest nieprawidłowa, bit parzystości jest nieprawidłowy, przy czym dopiero po RAM-teście bity parzystości są prawidłowo ustawiane i wtedy μP odblokowuje wejście NMI). Wychodząc naprzeciw takim sytuacjom w mikrokontrolerach 68HC11, HC16 wprowadzono pseudo NMI. Po włączeniu zasilania jest ono zablokowane dając możliwość pracy przygotowawczej, jeśli μP zdecyduje się je odblokować to wtedy blokada jest już nie możliwa i wejście to (XIRQ) zachowuje się jak typowe NMI.

(Wykład 13.03.1999. Bogdan)

Formatka 6800 str.4 - cykli maszynowych 12, cykle magistrali: pobranie kodu (kod jednobajtowy), złożenie na stosie 7 bajtów, odczyt z lokacji NFA i B adresu startowego. Wystarczy 10 cykli magistrali (SWI - 10 cykli magistrali)

Rozkaz

Pętli



Wyszukiwarka

Podobne podstrony:
wykład 12 pamięć
Socjologia wyklad 12 Organizacja i zarzadzanie
Wykład 12(3)
Wykład 12
Wykład 12 Zarządzanie sprzedażą
Wykład 12 1
wyklad 12
Wyklad 1 12
wyklad 12 MNE
wykład 12
ZARZ SRODOWISKIEM wyklad 12
wykład 7 12
Wyklad 12 ppt
OPI wyklad 12 wersja 20080227 p Nieznany
Biochemia TZ wyklad 12 integracja metabolizmu low
Metodologia - wykład 5.12.2010 - dr Cyrański, Metodologia nauk społecznych

więcej podobnych podstron