Tryby adresowania i formaty rozkazów mikroprocesora
Cykl rozkazowy
Cykle pracy procesora
Fazy wykonania rozkazu
Fazy wykonania rozkazu Pobranie rozkazu i zapisanie w pamięci rokazu Dekodowanie rozkazu – określenie wykonywanej czynności Pobranie niezbędnych argumentów Wykonanie rozkazu Zapisanie wyniku
Definicja rozkazu Rozkazem (instrukcją) nazywamy najprostszą operację jaką wykonuje mikroprocesor. Sposób realizacji rozkazu nie jest istotny dla użytkownika systemu i z reguły nie jest znany. Nawet jeżeli wiemy, że dany rozkaz jest realizowany jako ciąg prostszych operacji, zwanych mikrooperacjami czy mikrorozkazami, i tak nie mamy żadnego wpływu na sposób realizacji rozkazu. Został on po prostu wyznaczony przez projektanta mikroprocesora. Listą rozkazów nazywamy zestaw wszystkich instrukcji (rozkazów), jakie potrafi wykonać dany procesor. Rozkazy tworzące listę rozkazów możemy podzielić na kilka podstawowych grup w zależności od ich przeznaczenia. - rozkazy przesłań, - rozkazy arytmetyczne i logiczne, - rozkazy sterujące (skoki, wywołania podprogramów, pętle itp.), - inne (np. sterowanie pracą koprocesora, rozkazy testujące, operacje w trybie chronionym).
Format rozkazu Formatem rozkazu nazywamy sposób rozmieszczenia informacji w kodzie rozkazu. Trybem adresowania nazywamy sposób określenia miejsca przechowywania argumentów rozkazu. Argumenty rozkazu (przypominamy, że może to dotyczyć zarówno danych, jak i w pewnych przypadkach wyników) mogą być przechowywane w rejestrach, w pamięci lub w kodzie rozkazu.
Adresowanie natychmiastowe Przy adresowaniu natychmiastowym argument rozkazu zawarty jest w kodzie rozkazu. Widzimy więc, że adresowanie natychmiastowe w zasadzie nie jest adresowaniem w zwykłym sensie. Argument (operand) jest umieszczony w kodzie rozkazu, z czego między innymi wynika fakt, że musi być znany w momencie pisania programu. Dana jest tak naprawdę stałą programową.
Adresowanie bezpośrednie Przy adresowaniu bezpośrednim kod rozkazu zawiera adres komórki pamięci, w której przechowywany jest rozkaz. Konsekwencją takiego określenia adresowania bezpośredniego jest to, że jeśli używamy tego adresowania, w momencie pisania programu musimy znać (lub inaczej - zarezerwować) adres przechowywania argumentu
Adresowanie rejestrowe Przy adresowaniu rejestrowym w kodzie rozkazu określony jest rejestr, w którym przechowywany jest argument. Zaletami użycia tego trybu adresowania są krótkie kody rozkazów oraz szybkie ich wykonywanie (krótki czas dostępu do rejestru).
Adresowanie pośrednie przez pamięć Umożliwia modyfikacje położenia argumentu w pamięci w trakcie wykonywania programu. Inaczej mówiąc, adres przechowywania tego argumentu może zostać wyliczony przez program, co jest bardzo użyteczną własnością. Ponadto kody takich rozkazów są krótkie. W trybie adresowania pośredniego przez pamięć kod rozkazu zawiera adres pamięci, gdzie znajduje się adres komórki pamięci zawierającej argument.
Adresowanie pośrednie przez rejestr Umożliwia modyfikacje położenia argumentu w pamięci w trakcie wykonywania programu. Inaczej mówiąc, adres przechowywania tego argumentu może zostać wyliczony przez program, co jest bardzo użyteczną własnością. Ponadto kody takich rozkazów są krótkie. W trybie adresowania pośredniego przez rejestr kod rozkazu zawiera numer rejestru, gdzie znajduje się adres komórki pamięci zawierającej argument.
Adresowanie indeksowe Adresowanie indeksowe jest inaczej nazywane modyfikacją adresu przez Indeksowanie W tym trybie wykorzystuje się specjalne rejestry procesora tzw. Rejestry indeksowe (index registers), które zawierają przesunięcie, które trzeba dodać do adresu istniejącego w rozkazie aby wyliczyć adres finalny operandu. Ten tryb adresowania pozwala przesunąć adres zawarty w rozkazie o wartośd rejestru indeksowego. Dzięki operacji indeksowania rozkazów programu, wszystkie adresy operandów zostaną przesunięte o tę sama Wartość –przesunięcie. Taka organizacja przesuwalności programu w pamięci nosi nazwę dynamicznej relokacji programu w pamięci
Adresowanie względne Polega na modyfikacji adresu zawartego w rozkazie przez aktualną zawartość licznika rozkazów. Ten tryb adresowania dostarcza innego sposobu osiągnięcia dynamicznej przesuwalności adresów dostępu do danych, tj. gdy nie chcemy lub nie możemy znad przesunięcia całości programu w stosunku do adresu zerowego. Przy tym trybie adresowania, finalny adres danej jest wyliczany względem bieżącej zawartości licznika rozkazów.
Wykonanie rozkazów
Pobranie instrukcji z pamięci – ang. instruction fetch (IF) Zdekodowanie instrukcji – ang. instruction decode (ID) Wykonanie instrukcji – ang. execute (EX) Dostęp do pamięci – ang. memory access (MEM) Zapisanie wyników działania instrukcji – ang. store; write back (WB)