Architektura komputerów – Procesor
1
Architektura procesora
W architekturze procesora można wyróżnić dwa podstawowe
elementy funkcjonalne (patrz rys.1):
jednostkę wykonawczą, której zadaniem jest wykonywanie
operacji arytmetycznych i logicznych w zależności od
wewnętrznych sygnałów sterujących,
jednostkę sterującą, której zadaniem jest dekodowanie z
programu rozkazu i na jego podstawie generowanie
wewnętrznych i zewnętrznych sygnałów sterujących.
Architektura komputerów – Procesor
2
Rys.1. Ogólny schemat funkcjonalny procesora
Architektura komputerów – Procesor
3
Rejestry
Zgodnie ze schematem blokowym mikroprocesora, zarówno
jednostka arytmetyczno-logiczna, jak i układ sterowania
współpracują z określonym zestawem rejestrów. Zawartość pewnej
części rejestrów z tego zestawu może być zmieniana w wyniku
wykonania przez procesor określanej instrukcji. Rejestry takie
nazywamy
rejestrami dostępnymi programowo
. Pozostałe rejestry
są niedostępne dla użytkownika i ich zestaw nie jest zwykle znany.
Architektura komputerów – Procesor
4
W
rejestrach dostępnych programowo
występują takie typy
rejestrów, których odpowiedniki znajdują się praktycznie w każdym
procesorze. Ich pojemność czy ilość może się zmieniać, jednak
wykonywane zadania pozostają takie same.
Na rysunku 2. przedstawiono przykładowy zestaw rejestrów
oparty na prostym
procesorze 8086/8088
.
Architektura komputerów – Procesor
5
Zasadniczo każdy z rejestrów ma swoje zadanie do spełnienia,
każdy z nich pełni swoją rolę i dają się one pogrupować według
podobnych zadań:
rejestry powszechnego stosowania,
rejestry segmentowe,
rejestry wskaźnikowe i indeksowe,
wskaźnik rozkazów,
rejestr znaczników (rejestr flagowy).
Architektura komputerów – Procesor
6
Rys.2. Rejestry dostępne programowo procesora 8086/8088
Architektura komputerów – Procesor
7
Rejestry powszechnego zastosowania
Osiem rejestrów powszechnego zastosowania (każdy o długości
16 bitów) są używane do najczęściej stosowanych rozkazów, jako
miejsce, skąd pobieramy
dane
,
miejsce przeznaczenia, wskaźniki
do pamięci i wreszcie jako liczniki
. Każdy z tych ośmiu rejestrów
może być załadowany zarówno z pamięci, jak też z nich można do
pamięci załadować, można ich używać do operacji arytmetycznych i
logicznych. Pomimo wspólnych cech rejestrów powszechnego
zastosowania, każdy znich, z osobna, ma swoją osobowość .
Architektura komputerów – Procesor
8
Rejestr AX
- znany jako akumulator. Używany zawsze tam, gdzie
zachodzi
mnożenie
,
dzielenie
. Jest to najbardziej efektywny rejestr
używany w operacjach arytmetycznych, logicznych, przesyłania
danych. Dolna, 8-bitowa część rejestru
AX
nosi nazwę AL (ang. A-
Low), część górna, też 8-bitowa, nosi nazwę
AH
(ang. A-High). Taki podział rejestru na dwie 8-bitowe części jest
wygodny podczas działań na danych l-bajtowych, tworząc dwa
niezależne rejestry.
Architektura komputerów – Procesor
9
Rejestr BX
- może wskazywać położenie, lokalizację w pamięci.
16-bitowa wartość zapamiętana w tym rejestrze może być po części
użyta do adresowania położenia w pamięci. Domyślnie rejestr
BX
,
wraz z rejestrom segmentowym
DS
jest używany jako wskaźnik
pamięci. Rejestr
BX
może być traktowany jako dwa 8-bitowe
rejestry
BH
i
BL
.
Architektura komputerów – Procesor
10
Rejestr CX
- używa się go głównie jaka licznika odliczającego
powtarzające się fragmenty programów bądź pojedynczych
rozkazów. Rejestr
CX
może być traktowany jaka dwa 8-bitowe
rejestry
CH
i
CL
.
Architektura komputerów – Procesor
11
Rejestr DX
- jego głównym przeznaczeniem jest użycie go jako
wskaźnika adresów w rozkazach wejścia/wyjścia. Nie ma bowiem
innej drogi do zaadresowania portów, aniżeli użycie rejestru
DX
.
Rejestr
DX
może być również użyty w operacjach mnożenia i
dzielenia. Może on być traktowany jako dwa 8-bitowe rejestry
DH
i
DL
.
Architektura komputerów – Procesor
12
Rejestry wskaźnikowe i indeksowe
Rejestr SI
- podobnie jak rejestr
BX
, może być użyty juko
wskaźnik pamięci.
Rejestr DI
- jest bardzo podobny w użyciu do rejestru
SI
. Może
być użyty jako wskaźnik pamięci; ma specjalne własności, gdy
zastanie zastosowany w rozkazach związanych z łańcuchami
znakowymi. Rejestry
DI
i
SI
wespół z rejestrem
DS
związane są z
adresowaniem łańcuchów znakowych, z tym że rejestr
SI
występuje
zawsze, gdy adresowanie dotyczy źródła danych, zaś rejestr
DI
występuje wówczas, gdy adresowanie to dotyczy przeznaczenia
(celu).
Architektura komputerów – Procesor
13
Rejestr BP
- podobnie jak
BX, SI, DI
może być użyty jako
wskaźnik pamięci, ale z pewną różnicą. Podczas gdy rejestry
BX, SI,
DI
, wskazując na adres w pamięci odnoszą się względem rejestru
segmentowego
DS
, to rejestr
BP
, służąc za wskaźnik pamięci,
odnosi się do rejestru
SS
, rejestru segmentu stosu. Adresowanie
poprzez segment stosu, stosowane zwłaszcza w procedurach
języków C, Pascal, dokonuje się właśnie przy użyciu rejestru
BP
.
Architektura komputerów – Procesor
14
Rejestr SP
- znany jest jako wskaźnik stosu i należy do ostatnich
rejestrów powszechnego stosowania. Rejestr
SP
daje położenie
bieżącego wierzchołka stosu i jest analogiczny do
IP
.
Architektura komputerów – Procesor
15
Rejestry segmentowe
Tak jak rejestry powszechnego stosowania odgrywają swoje
specyficzne role, tak też rejestry segmentowe przeznaczone są do
wyspecyfikowanych zadań.
Architektura komputerów – Procesor
16
Rejestr CS
- wskazuje kod programu, rejestr
DS
wskazuje dane,
rejestr
SS
związany jest ze stosem, zaś rejestr
ES
(ang. extra
segment) jest dodatkowym rejestrem, który może być gdzieś
potrzebny.
Rejestr
CS
-
wskazuje
na
początek
64 KB bloku pamięci lub na segment kodu, w którym rezyduje
następny do wykonania rozkaz. Dokładne położenie tego rozkazu w
segmencie kodu wskazywane jest poprzez offset, którego wartość
zawiera rejestr
IP
. Pełny adres położenia rozkazu w segmencie
kodu ma postać:
CS:IP
. Procesor 8086 nigdy nie pobiera rozkazów z
segmentu innego niż segment
CS
. Rejestr
CS
maże być zmieniany
przez niektóre rozkazy, włączając w to rozkazy skoków, wywołań i
powrotów. Rejestru tego nie można ładować bezpośrednio.
Architektura komputerów – Procesor
17
Rejestr DS
-
wskazuje początek segmentu danych
, czyli 64 KB
blok pamięci zawierający argumenty. Zazwyczaj rejestrami
stowarzyszanymi z
DS
, określającymi offset w tym segmencie są
rejestry
BX, SI
lub
DI
.
Rejestr ES
-
wskazuje początek 64 KB bloku pamięci
, zwanego
dodatkowym segmentem. Nie jest on przypisany do pojedynczych
zastosowań; stosowany jest do różnych pojawiających się potrzeb
.
Offset tablica bądz inna
zawierająca informacje o odległości od poczatku pamięci.
W inżynierii komputerowej używana jest w programowaniu niskopoziomowym (assemblingu). Offset najczęściej jest dodawany do
adresu bazowego i tworzy z nim adres absolutny.
Przykład dla tablicy znaków zawierajacej litery abcdef elemnet d ma offset 3 gdyż znajduje się na miejscu nr 3 (numeracja od zera).
Architektura komputerów – Procesor
18
Rejestr SS
-
wskazuje początek 64 KB bloku pamięci
, zwanego
segmentem stosu. Wszystkie rozkazy, które niejawnie używają
rejestru
SP
- odkładanie na stos, zdejmowanie ze stosu, wywołania
i powroty - używają segmentu stosu, ponieważ rejestr
SP
jest
zdolny tylko do adresowania pamięci w obszarze segmentu stosu
SS
. Również rejestr BP - o czym była już mowa - odnosi się też do
segmentu stosu; stąd też rejestr
BP
jest używany do adresowania
parametrów i zmiennych zawartych na stosie.
Architektura komputerów – Procesor
19
Wskaźnik rozkazów
Rejestr IP
-
nazywany jest wskaźnikiem rozkazów
i zawiera
zawsze offset pamięci, w którym zawarty jest następny rozkaz do
wykonania. Bazowy segment kodu zawarty jest w rejestrze
CS
.
Pełny adres logiczny wykonywanego rozkazu wskazywany jest
więc przez parę rejestrów
CS:IP
.
Architektura komputerów – Procesor
20
Gdy jeden rozkaz jest wykonywany, wskaźnik rozkazów
ustawiany jest do następnego adresu pamięci, pod którym
znajduje się rozkaz do wykonania. Zazwyczaj następnym rozkazem
w pamięci jest właśnie rozkaz, który będzie wykonywany.
Jednakże niektóre rozkazy, takie jak rozkazy wywołania i skoku,
mogą spowodować rozgałęzienie w wykonywaniu kodu programu,
a tym samym w rejestrze
IP
nie wystąpi kolejna wartość offsetu
wskazująca następny rozkaz do wykonania.
Architektura komputerów – Procesor
21
Rejestr znaczników
Rejestr znaczników (rejestr flagowy) - FLAGS
jest czternastym
rejestrem procesora 8086. Rejestr ten jest zbiorem poszczególnych
bitów kontrolnych, zwanych znacznikami (flagami), które wskazują
wystąpienie określonego stanu. Każdy znacznik jest bitem w
rejestrze, który wskazuje czy wystąpił określony stan. Znaczniki
mogą być wykorzystywane zarówno przez procesor, jak też i
programistę na dwa sposoby:
ustawienie znacznika dla zapamiętania określonego stanu po
wykonaniu rozkazu
testowanie znacznika celem umożliwienia decyzji o sposobie
dalszego postępowania (przetwarzania danych)
Architektura komputerów – Procesor
22
Znaczniki stanu:
CF
- flaga przeniesienia lub pożyczki, ustawiana przy przekroczeniu
zakresu długości słowa, w którym zapisywany jest wynik (1
wystąpiło przeniesienie);
PF
- flaga parzystości (1) wskazuje na parzystą lub nieparzystą
liczbę bitów o wartości jedynki;
ZF
- flaga zera - sygnalizująca, że wynikiem ostatnio wykonywanej
operacji jest zero;
Architektura komputerów – Procesor
23
PF
- flaga przeniesienia pomocniczego jest wykorzystywana przy
działaniach na liczbach w kodzie BCD. Ustawiana jest gdy następuje
przeniesienie lub pożyczka z najstarszego bitu pierwszej tetrady
wyniku;
SF
- flaga znaku, ustawiana gdy najstarszy bit wyniku jest równy 1
(operacje liczb ze znakiem - kod U2);
OF
- flaga przepełnienia, sygnalizująca przekroczenie zakresu dla
operacji arytmetycznych (operacje liczb ze znakiem - kod U2);
Architektura komputerów – Procesor
24
Znaczniki kontrolne:
TF-
znacznik pracy krokowej - ustawienie 1 pozwala na wykonanie
przez procesor po wykonaniu każdego rozkazu przerwania i
przejście do specjalnych procedur obsługi;
IF
- znacznik zezwolenia na przerwanie - ustawienie 1 powoduje
odblokowanie systemu przerwań w procesorze (0 - procesor
ignoruje przerwania);
DF
- znacznik kierunku - umożliwia realizację przetwarzania
łańcuchów (ciągu słów) przy rosnących adresach (1) lub malejących
adresach (0).
Architektura komputerów – Procesor
25
ALU
Blok arytmetyczno-logiczny ALU
(ang. arithmetic-logical unit)
jest często nazywany układem wykonawczym procesora, ponieważ
wykonuje on większość rozkazów zlecanych procesorowi.
Blok ALU
jest uniwersalnym układem kombinacyjnym, który realizuje
operacje
matematyczne
i
logiczne
w
zależności
od
zaprogramowanej operacji, tj. rozkazu umieszczonego
w
programie.
Architektura komputerów – Procesor
26
Rozkazy mogą dotyczyć
a) operacji dwuargumentowych:
operacji arytmetycznych (dodawanie i odejmowanie)
operacji logicznych (sumowanie mnożenie, sumowanie mod 2,
itp.)
b) operacji jednoargumentowych (np. negowanie bitów lub
przesuwanie
zawartości rejestrów)
Na rys. 3. przedstawiono oznaczenie wejść i wyjść bloku
ALU
.
Pośród sygnałów wejściowych można wyróżnić dwie ich grupy:
wejścia
informacyjne
i wejścia
sterujące
.
Architektura komputerów – Procesor
27
Na wejścia informacyjne podawane są dwa słowa (A
0
– A
3
i B
0
– B
3
), które są argumentami wykonywanej operacji. W
zależności od długości słowa stosowanego w danym procesorze
mówi się także o liczbie bitów ALU.
Rys. 3. Oznaczenie końcówek 4-bitowego ALU
Wejścia sterujące S
0
– S
3
i M służą do programowania
funkcji wykonywanych przez układ.
Architektura komputerów – Procesor
28
Układ sterowania
Zwykle lista rozkazów procesora zawiera
rozkazy proste
, które
procesor wykonuje w jednym kroku (np. rozkaz dodawania dwóch
liczb ) oraz złożone, wykonywane w kilku krokach (na przykład
rozkazy mnożenia i dzielenia są wykonywane jaka ciąg dodawań i
przesuwań).
W celu zapewnienia właściwego wysterowania układu procesora
trzeba zapewnić odpowiednie sekwencje słów podawanych na
wejścia sterujące układu
ALU
.
Architektura komputerów – Procesor
29
Do tego celu stosuje się specjalne układy, które są złażonymi
automatami sekwencyjnymi. Przy projektowaniu układów, które
mają wymuszać odpowiednie pobudzenia układów wykonawczych
występuje szereg trudności:
dla wymaganej liczby wykonywanych rozkazów automaty
sterujące moją dużą liczbę stanów;
wymagane jest zapewnienie synchronizacji pracy układu
sterowania i układu wykonawczego, tj. konieczność
uwzględniania, podczas projektowania układu logicznego, czasu
wykonywania poszczególnych operacji.
Architektura komputerów – Procesor
30
Aby przezwyciężyć te trudności poszukiwano od dawna
efektywnych metod projektowania układów sterujących. W
zasadzie spotyka się dwa typy układów sterowania:
generatory sekwencji budowane ze standardowych układów
logicznych,
układy mikro-programowane
.
Te ostatnie znalazły największe praktyczne zastosowanie w
systemach komputerowych i chociaż jest to znana od dawna
(1951 r) koncepcja podana przez Wilkesa, to dopiero możliwości
stworzone przez technologię LSI pozwoliły praktycznie ją
zastosować.
Architektura komputerów – Procesor
31
Cykl rozkazowy procesora
Realizując program,
system mikroprocesorowy
wykonuje pewne
powtarzające się czynności, polegające na cyklicznym pobieraniu
kodów rozkazów z pamięci i wczytywaniu ich do układu sterowania
mikroprocesora, a następnie realizacji rozkazu, którego kod został
pobrany. W cyklu tym możemy wyróżnić
dwie fazy
zwane:
fazą
pobrania (ang. fetch)
i
fazą wykonania (ang. execution
).
Architektura komputerów – Procesor
32
Schematycznie następstwo kolejnych faz przedstawia rysunek 4.
Rys.4. Fazy cyklu rozkazowego
Faza pobrania
polega na pobraniu kodu rozkazu z komórki
pamięci o adresie przechowywanym w
liczniku rozkazów
, a
następnie na umieszczeniu tego kodu w
rejestrze rozkazów
znajdującym się w układzie sterowania mikroprocesora.
Architektura komputerów – Procesor
33
Kod rozkazu przesyłany jest do mikroprocesora magistralą
danych. Następnie zawartość licznika rozkazów jest modyfikowana
tak, aby wskazywał on na kolejny kod rozkazu
przeznaczony do
pobrania.
Po zakończeniu fazy pobrania następuje faza wykonania
.
Polega ona na zdekodowaniu kodu rozkazu znajdującego się w
rejestrze rozkazów, czyli stwierdzeniu, jaki to rozkaz. Po
zdekodowaniu kodu rozkazu układ sterowania wytwarza
wewnętrzne lub zewnętrzne sygnały sterujące realizujące dany
rozkaz.
Architektura komputerów – Procesor
34
Kolejne etapy realizacji fazy pobrania i fazy wykonania rozkazu
można przedstawić następująco:
A. Faza pobrania
1. Adresowanie czyli podanie zawartości licznika rozkazów na
magistralę adresową.
2. Wczytanie zawartości zaadresowanej komórki pamięci do
rejestru rozkazów mikroprocesora
3. Zwiększenie zawartości licznika rozkazów
Architektura komputerów – Procesor
35
B. Faza wykonania
4. Zdekodowanie kodu rozkazu i wytworzenie sygnałów
sterujących realizujących dany rozkaz.
Obieg informacji dla fazy pobrania i wykonania przedstawiony jest
na rysunku 5.
Architektura komputerów – Procesor
36
Rysunek 5. Schemat przepływu informacji przy pobieraniu kodu rozkazu
Architektura komputerów – Procesor
37
Oczywiście w przypadku kodów rozkazów zajmujących kilka
komórek pamięci etapy od 1 do 3 muszą być kilkakrotnie
powtórzone, zanim zrealizowane zostanie ostateczne wykonanie
rozkazu
.
Realizacja wszystkich wymienionych etapów wykonania rozkazu
tworzy pewien cykl, zwany od nazwiska jego twórcy cyklem von
Neumana.
Architektura komputerów – Procesor
38
Czas trwania fazy pobrania rozkazu zależy od rodzaju procesora
i rodzaju rozkazu. Jeśli procesor jest 8-bitowy i rozkaz zawiera 8-
bitowy kod operacyjny rozkazu i 16-bitowy adres argumentu, to
faza pobrania rozkazu składa się z 3 cykli maszynowych odczytu
pamięci:
odczytu kodu operacyjnego (faza pobrania rozkazu),
odczytu jednego bajtu adresu,
odczytu drugiego bajtu adresu
.
Architektura komputerów – Procesor
39
Jeśli procesor (i rozkaz) jest 32-bitowy, to zarówno kod
operacyjny, jak i adres argumentu można odczytać z pamięci w
jednym cyklu maszynowym. Pobranie argumentu może być zatem
jednocyklowe lub wielocyklowe. Często argument ma długość
równą długości słowa w pamięci i wówczas pobranie odbywa się w
jednym cyklu.
Architektura komputerów – Procesor
40
Ale czasem można spotkać argumenty o znacznej długości.
Na przykład w 16-bitowych mikrokomputerach stosowane są
nawet
80-bitowe
argumenty
(argumenty
operacji
zmiennopozycyjnych).
Argument
o
takiej
długości,
w
mikroprocesorach 16-bitowych, jest pobierany w 5 cyklach
odczytu pamięci.
Architektura komputerów – Procesor
41
Dla zilustrowania podanego opisu rozpatrzono sposób
wykonania
programu dodawania dwóch stałopozycyjnych liczb 16-
bitowych
w
komputerze 16-bitowym
. Kod rozkazowy ma długość
12 bitów
, a adres jest
20-bitowy
. Założono, że komórka pamięci
zawiera
16 bitów
. Pozwala to na umieszczenie zarówno kodu
rozkazowego, jak i adresu w
2
komórkach pamięci (razem
32
bity
). Założono ponadto, że:
adres pierwszego rozkazu programu wynosi
300,
argumenty operacji znajdują się w komórkach pamięci o
numerach
ADR1=841
i
ADR2=915
,
wynik operacji powinien zostać zapisany do komórki pamięci o
adresie
ADR2
.
Architektura komputerów – Procesor
42
Rys. 6. Mapa pamięci i zawartości rejestrów procesora dla przykładowego programu
Architektura komputerów – Procesor
43
Na rysunku 6 pokazano mapę pamięci programu i zawartości
rejestrów procesora dla omawianego przypadku. Program składa
się z 4 rozkazów:
rozkazu odczytu pierwszego argumentu i zapisania go do
rejestru A,
rozkazu odczytu drugiego argumentu i zapisania go do
rejestru B,
rozkazu dodania obu argumentów,
rozkazu przesłania wyniku do pamięci.
Architektura komputerów – Procesor
44
Celem pokazania zmian zachodzących w rejestrach procesora, w
czasie wykonywania tego programu, przedstawiono zawartości
rejestrów
A, B, PC, AD
i
RR
w kolejnych fazach wykonywania
programu. Dwa pierwsze rozkazy składają się z trzech cykli
maszynowych:
1. pobrania kodu operacyjnego oraz 4 bitów adresu,
2. pobrania dalszych 16 bitów adresu,
3. odczytu argumentu.
Rozkaz dodawania nie wymaga dostępu do pamięci oprócz
pobrania kodu rozkazu, ponieważ jest to rozkaz z argumentami w
rejestrach. Dlatego jest to
rozkaz jednocyklowy
. Pozostałe rozkazy
są rozkazami
trzycyklowymi.
Architektura komputerów – Procesor
45
Lista rozkazów i tryb adresowania
Komputer, będący systemem mikroprocesorowym, przetwarza
informacje zgodnie z wykonywanym programem. Program jest
ciągiem instrukcji realizujących pewien algorytm działania
systemu. W pamięci systemu mikroprocesorowego program
przechowywany jest w postaci binarnych kodów instrukcji
maszynowych (rozkazów) właściwych dla danego procesora.
Architektura komputerów – Procesor
46
Lista rozkazów
Określenie:
Rozkazem (instrukcją maszynową)
nazywamy najprostszą operację, której wykonania
programista może żądać od procesora.
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, to i tak nie mamy żadnego
wpływu na sposób realizacji rozkazu.
Architektura komputerów – Procesor
47
Rozkazy są więc najprostszymi operacjami, których możemy
używać przy tworzeniu programów.
Tworzenie programów
bezpośrednio przy pomocy instrukcji maszynowych jest bardzo
efektywne jednak dość żmudne i nie nadaje się do tworzenia
bardzo rozbudowanych programów
. W takich przypadkach
używamy tak zwanych języków wysokiego poziomu (np. Pacal,
C++, itp.), w których jednej instrukcji odpowiada wiele instrukcji
maszynowych.Zestaw
instrukcji
maszynowych
zależy
od
konkretnego procesora.
Określenie:
Listą rozkazów nazywamy zestaw wszystkich
instrukcji maszynowych (rozkazów), jakie potrafi wykonać
dany procesor.
Architektura komputerów – Procesor
48
Rozkazy tworzące listę rozkazów można podzielić na kilka
podstawowych grup, w zależności od ich przeznaczenia:
1. rozkazy przesłań,
2. rozkazy arytmetyczne i logiczne,
3. rozkazy sterujące wykonywaniem programu,
4. rozkazy sterujące pracą procesora
.
Rozkazy przesłań
są najczęściej wykonywanymi rozkazami. Nie
zmieniają one wartości informacji, natomiast przenoszą ją z miejsca
na miejsce. Ich duża częstotliwość wykonywania jest dość
oczywista. Jeśli chcemy wykonać jakąś operację, musimy zwykle
pobrać jej argumenty, a po jej wykonaniu zapisać wynik.
Architektura komputerów – Procesor
49
Wśród rozkazów przesłań wyróżnia się czasami operacje na
stosie (będące jednak też formą przesłań) czy instrukcje
wejścia/wyjścia, przesyłające lub odczytujące dane z portów
wejścia/wyjścia.
Typowymi przykładami rozkazów przesłań są:
MOV - move
- przesłanie słowa pomiędzy rejestrami procesora;
STR - store
- przesłanie słowa ze wskazanego w rozkazie rejestru
procesora do komórki pamięci;
LD - load
- przesłanie słowa z pamięci do wskazanego rejestru
procesora;
Architektura komputerów – Procesor
50
XCH - exchange
- wymiana zawartości rejestrów;
IN - input
- odczyt słowa z urządzenia wejściowego;
OUT - output
- przesianie zawartości wskazanego rejestru
procesora do urządzenia wyjściowego;
CLR - clear
- zerowanie rejestru;
SET - set
- zapisanie do rejestru jedynek;
PUSH - push
- zapisanie zawartości rejestru na stos;
POP - pop
- odczyt słowa z wierzchołka stosu i przesłanie go do
rejestru;
Architektura komputerów – Procesor
51
Pierwsze 6 rozkazów to rozkazy jednoargumentowe
. Muszą one
jednak specyfikować dwa adresy operandów.
Pierwszy
z nich
wskazuje miejsce skąd pochodzi argument operacji (źródło), a
drugi
wskazuje miejsce jego przesłania przeznaczenie).
Istnieją procesory, w których rozkazy takie mogą być
modyfikowane w taki sposób, aby ich wykonanie było wielokrotne,
tj. powtarzane określoną przez rozkaz liczbę razy. Umożliwia to
przesyłanie całych bloków słów
.
Architektura komputerów – Procesor
52
Mówimy, że są to rozkazy z powtarzaniem. W takim przypadku
rozkazy te są
dwuargumentowe
, gdyż drugi argument specyfikuje
ile razy ten rozkaz ma być wykonany. Pozostałe cztery rozkazy
wymienione w tej grupie są rozkazami
jednoargumentowymi
.
Architektura komputerów – Procesor
53
Rozkazy arytmetyczne i logiczne
służą do przetwarzania
informacji, czyli w wyniku ich wykonania jest ona zmieniana. Do
rozkazów tych zaliczamy:
rozkazy arytmetyczne, np.:
ADD - addition
- dodawanie;
SUB - subtraction
- odejmowanie;
MUL - multiplication
- mnożenie;
DIV - diyision
- dzielenie;
ABS - absolute
- wartość bezwzględna liczby;
NEG - negate
- zmiana znaku liczby;
INC - increment
- zwiększenie wartości o jeden;
DEC - decrement
- zmniejszenie wartości o jeden.
Architektura komputerów – Procesor
54
Pierwsze 4 rozkazy
tej grupy są argumentowe. Dlatego rozkazy
te muszą wskazywać trzy operandy:
dwa dla dwóch argumentów
operacji i jeden dla wyniku
. Zatem każdy taki rozkaz musi
specyfikować trzy adresy. Ponieważ takie rozwiązanie zmuszałoby
do wydłużania instrukcji, a co za tym idzie programów, to zmierza
się do zmniejszania liczby adresów operandów. Można przyjąć
wtedy, że jeden z argumentów jest zawsze przechowywany w tym
samym miejscu, np. w akumulatorze i tam też przesyłany jest
wynik operacji. W takim przypadku specyfikacji wymaga tylko
jeden operand.
Architektura komputerów – Procesor
55
Następne 4 podane rozkazy
są jednoargumentowe i dlatego
każdy z nich specyfikuje jedynie dwa adresy operandów. Wszystkie
podane rozkazy powodują odpowiednie ustawianie bitów w
rejestrze znaczników na wyjściu
ALU
. Argumentami takich
rozkazów mogą być liczby stałopozycyjne i zmiennopozycyjne.
Architektura komputerów – Procesor
56
rozkazy logiczne, np.:
AND - conjuction
- iloczyn;
OR - disjunction
- suma;
EXOR- exclusive-OR
- suma mod 2;
NOT - complement
- negacja.
Pierwsze trzy rozkazy
są dwuargumentowe i tylko ostatni rozkaz
jest jednoargumentowy. Argumenty tych rozkazów mogą być
adresowane na różne sposoby. Wykonanie omawianych rozkazów
także powoduje odpowiednie ustawienie znaczników.
Architektura komputerów – Procesor
57
rozkazy przesuwania informacji, np.:
SHL - shift left
- przesuwanie zawartości rejestru w lewo (na
najmniej znaczącą pozycję wpisywane jest 0, a na najbardziej
znaczącą pozycję jest zapisywany znacznik przeniesienia).
SHR - shift right
- przesuwanie zawartości rejestru w prawo (na
najbardziej znaczącą pozycję wpisywane jest 0, a na najmniej
znaczącą pozycję jest zapisywany znacznik przeniesienia).
Architektura komputerów – Procesor
58
SAL - shift arithmetic left
- przesuwanie arytmetyczne w lewo
(jak SHL), czyli mnożenie przez 2 z zachowaniem bitu znaku.
SAR - shift arithmetic right
- przesuwanie arytmetyczne w
prawo, czyli dzielenie przez 2 (najbardziej znaczący bit jest
pozostawiany a najmniej znaczący jest zapisywany na pozycję
znacznika przeniesienia).
ROL - rotate left
- przesuwanie cykliczne w lewo (najbardziej
znaczący bit jest zapisywany na najmniej znaczącą pozycję
oraz na pozycję znacznika przeniesienia).
Architektura komputerów – Procesor
59
ROR - rotate right
- przesuwanie cykliczne w prawo (najmniej
znaczący bit jest zapisywany na najbardziej znaczącą pozycję i
na pozycję znacznika przeniesienia).
RCL - rotate left with extend
- przesuwanie cykliczne w lewo
rejestru wydłu-żonego o znacznik przeniesienia.
RCR - rotate right with extend
- przesuwanie cykliczne w
prawo rejestru wydłu-żonego o znacznik przeniesienia.
Wszystkie podane operacje są jednoargumentowe
. Rozkazy
przesunięć mogą dotyczyć zarówno zawartości rejestrów jak i
zawartości komórki pamięci.
Architektura komputerów – Procesor
60
Rozkazy sterujące
wykonywaniem programu stanowią grupę
rozkazów pozwalającą zmieniać kolejność wykonywania instrukcji
programu.
Należą do nich przykładowo:
JMP - jump
- skok bezwarunkowy do miejsca w pamięci
wyspecyfikowanego w rozkazie;
Jc - jump conditional
- skok warunkowy gdzie c określa jaki
warunek musi być spełniony, aby rozkaz wykonać;
Architektura komputerów – Procesor
61
CALL - jump to subroutine
- wywołanie podprogramu polegające
na tym, że wykonywany jest skok wraz z zapamiętaniem na
stosie zawartości licznika rozkazów (ostatni adres);
Cc - call conditional
- warunkowe wywołanie podprogramu;
RET - return
- skok powrotny z podprogramu polegający na
przesłaniu ze stosu zapamiętanej wcześniej zawartości licznika
rozkazów;
SKIP - skip
- przeskok przez jeden rozkaz;
Architektura komputerów – Procesor
62
Rozkazy warunkowe są wykorzystywane do realizacji rozgałęzień
w programach. Jeśli warunek nie jest spełniony, to rozkaz nie jest
wykonywany, a wykonywany jest rozkaz następny, tj. znajdujący
się w programie po rozkazie warunkowym. Rozkazy skoków i
wywołań zawierają adres skoku, tj. adres komórki pamięci, w której
znajduje się rozkaz wykonywany bezpośrednio po wykonaniu
rozkazu skoku.
Architektura komputerów – Procesor
63
Rozkazy sterujące pracą procesora
stanowią niewielką
grupę rozkazów do której należą m.in.:
HALT - stop
- zatrzymanie wykonywania programu;
NOP - no operation
- rozkaz pusty.
Rozkaz
HALT
zatrzymuje pracę procesora, aż do momentu
ponownego uruchomienia programu przez zdarzenie zewnętrzne
(ponowną inicjalizację procesora, czyli po pojawieniu się sygnału
RESET
lub po zgłoszeniu przerwania, tj. pojawieniu się sygnału
HIT
), a rozkaz
NOP
jest rozkazem pustym nic nie rób.
Architektura komputerów – Procesor
64
Przedstawiona lista rozkazów stanowi uproszczony przykład
zbioru rozkazów procesora. Z tego opisu wynika jednak kilka
ważnych problemów.
Pierwszym z nich
jest problem liczby adresów,
które
powinny
zostać
wyspecyfikowane
w
rozkazie.
W zasadzie każdy rozkaz powinien podawać adresy 3 operandów
(
dwa adresy argumentów danego rozkazu i jeden adres wyniku
operacji)
oraz adres następnego rozkazu. Komputery, których
rozkazy zawierają te wszystkie adresy nazywane są
komputerami
czteroadresowymi
.Dla wyspecyfikowania podanych 4 adresów
potrzebne są bardzo długie słowa rozkazowe.
Architektura komputerów – Procesor
65
Celem
zmniejszenia długości rozkazu
stosuje się rozwiązania
pozwalające wyeliminować pewną liczbę adresów.
Jednym z nich
było wprowadzenie licznika rozkazów, co pozwoliło na eliminację
adresu
następnego
rozkazu
i
konstrukcję
komputerów
trzyadresowych.
Celem dalszego ograniczenia liczby adresów
można przyjąć założenie, że dla wszystkich operacji wynik będzie
przesyłany w miejsce jednego z argumentów.
Architektura komputerów – Procesor
66
Wówczas można zmniejszyć liczbę adresów
do dwóch
.
W komputerach o
bardzo krótkim słowie rozkazowym
(np.
mikrokomputery 8-bitowe) stosuje się dalsze ograniczenie liczby
adresów przez rozwiązanie polegające na tym, że jeden z
argumentów wszystkich rozkazów i wynik jest zawsze w tym
samym miejscu (na przykład w rejestrze akumulatora).
Takie
komputery nazywane są jednoadresowymi.
Architektura komputerów – Procesor
67
SPOSÓB PREZENTOWANIA ROZKAZU
Lista rozkazów procesora powinna zawierać następujące
informacje:
Oznaczenie symboliczne.
Rozkazy przechowywane są w postaci binarnej, jednak dla
większej czytelności stosuje się zapis symboliczny. Składa się on
z mnemonika (nazwy rozkazu) i argumentu.
Architektura komputerów – Procesor
68
Mnemonik
jest skrótem, który sugeruje rodzaj operacji
wykonanej przez rozkaz. W większości są to skróty angielskich
nazw.
Kod rozkazu:
a. musi zawierać określenie rodzaju wykonywanej operacji,
czyli tzw. kod operacji. Kod operacji musi być określony w
początkowej części (pierwszym bajcie lub bajtach) kodu
rozkazu w celu określenia, w jaki sposób ma przebiegać
dalsza realizacja rozkazu przez mikroprocesor.
b. może
zawierać
operandy
i/lub
adresy
operandów
wykonywanych operacji (dotyczy to także adresów
wyników).
Oczywiście
w
przypadku
rozkazów
wymagających argumentów informacja ta musi być zawarta
w rozkazie.
Architektura komputerów – Procesor
69
Opis działania rozkazu.
Symbolicznie działanie rozkazu możemy zapisać:
(PC) << (PC) + OFFSET
Słownie opis tego układu byłby następujący:
Wykonaj skok i pobierz kod rozkazu z komórki pamięci o adresie
równym etykieta.
Format rozkazu.
W formacie rozkazu oprócz sposobu rozmieszczenia informacji w
kodzie rozkazu zawarta jest również informacja o jego długości.
Ustawiane flagi.
Szybkość wykonywania rozkazu.
Architektura komputerów – Procesor
70
PRZYKŁADOWE ROZKAZY
Przykładowe rozkazy:
1.
MOV
Instrukcja MOV przesyła dane pomiędzy dwoma miejscami.
Obydwa argumenty muszą być tego samego rozmiaru.
Składnia:
MOV
mem, accum (prześlij zawartość akumulatora do komórki o
podanym adresie)
Architektura komputerów – Procesor
71
Format:
gdzie: address low, address high - przemieszczenie względem
początku segmentu
w=1 - operacja na słowach
w=0 - operacja na bajtach
2.
ADC
Instrukcja ADC sumuje dwie liczby umieszczone we wskazanych
miejscach oraz bit CY (przeniesienia). Należy ona do grupy
instrukcji arytmetycznych.
3.
LOOP
etykieta
Architektura komputerów – Procesor
72
Tryb adresowania
Rozkazy, jak każdy inny rodzaj informacji w systemie
mikroprocesorowym, są przechowywane w postaci kodów
binarnych. Kod rozkazu musi zawierać informacje niezbędne do
jego poprawnej realizacji. Informacje te muszą być rozmieszczone
w rozkazie w określony sposób.
Określenie:
Formatem rozkazu nazywamy sposób
rozmieszczenia informacji w kodzie rozkazu.
Architektura komputerów – Procesor
73
Kod rozkazu:
1.
musi zawierać określenie rodzaju wykonywanej operacji,
czyli tak zwany kod operacji. Kod operacji musi być określony w
początkowej części (pierwszym bajcie lub bajtach) kodu rozkazu
w celu określenia, w jaki sposób ma przebiegać dalsza realizacja
rozkazu przez mikroprocesor.
2.
może
zawierać
operandy
i/lub
adresy
operandów
wykonywanych operacji (dotyczy to także adresów wyników).
Oczywiście w przypadku rozkazów wymagających argumentów
informacja ta musi być zawarta w rozkazie.
Architektura komputerów – Procesor
74
Właśnie z tym drugim warunkiem określającym zawartość kodu
związane są tryby adresowania.
Określenie:
Trybem adresowania nazywa się sposób
określenia miejsca przechowywania argumentów rozkazu.
Można rozróżnić następujące tryby adresowania:
adresowanie natychmiastowe, w którym argument rozkazu
zawarty jest w kodzie rozkazu;
adresowanie bezpośrednie, w którym kod rozkazu zawiera adres
komórki pamięci przechowującej argument rozkazu;
Architektura komputerów – Procesor
75
adresowanie rejestrowe, w którym w kodzie rozkazu określony
jest rejestr zawierający argument rozkazu;
adresowanie pośrednie (rejestrowe pośrednie), w którym kod
rozkazu zawiera określenie rejestru, bądź rejestrów
zawierających adres komórki pamięci z argumentem rozkazu;
adresowanie indeksowe z przemieszczeniem, w którym adres
argumentu przechowywanego w pamięci obliczany jest jako
suma zawartości rejestru i wartości (tzw. przemieszczenia)
określonych w kodzie rozkazu.
Interpretacja graficzna trybów adresowania została przedstawiona
na rys. 6.
Architektura komputerów – Procesor
76
Rys.6. Tryby adresowania a) adresowanie natychmiastowe,
b) adresowanie bezpośrednie, c) adresowanie rejestrowe,
d) adresowanie pośrednie, e) adresowanie indeksowe z
przemieszczeniem
Architektura komputerów – Procesor
77
Rozwiązania zapewniające zwiększenie
efektywności procesora
Kolejka instrukcji
Pobieranie instrukcji z rejestru instrukcji
IR
do dalszego
przetwarzania (dekodowania, wykonania) odbywa się z różna
prędkością w zależności od:
trybu adresowania,
liczby argumentów,
czasu ich pobierania z pamięci,
liczby taktów zegara w jakich wykonywana jest instrukcja.
Architektura komputerów – Procesor
78
Również w różnym tempie odbywa się dostarczanie instrukcji do
rejestru rozkazów IR
w zależności od obciążenia szyny danych.
Mogą zatem powstawać sytuacje, w których
dekoder instrukcji
czeka na instrukcję w
IR
a układ pobierania instrukcji nie może jej
na czas dostarczyć bo szyna danych jest akurat zajęta innymi
transmisjami albo sytuacje w których szyna i pamięć są gotowe i
mogą dostarczyć instrukcję, natomiast procesor jest jeszcze
zajęty przetwarzaniem instrukcji poprzedniej.
Architektura komputerów – Procesor
79
W obu przypadkach jest konieczność wstrzymania pracy bloków
nie mających zajęcia i potrzeba wygenerowania martwego cyklu
ich pracy, tzn. czynności polegającej na nie zrobieniu nic w danym
cyklu zegara.
Architektura komputerów – Procesor
80
Aby martwych cykli pracy pamięci i ALU było jak najmniej
stosuje się kolejkę instrukcji.
Określenie:
Kolejka jest strukturą danych dualną do stosu.
Podobnie jak na stosie w jednym cyklu dostępu może być z
niej zdjęta tylko jedna dana. Na stosie była to dana ostatnio
odłożona, w kolejce jest nią dana odłożona wcześniej.
Obowiązuje tu reguła FIFO (first input first output).
Ponieważ obciążenie bloku wykonawczego procesora oraz
pamięci zmienia się dynamicznie i raz jedno jest większe raz
drugie, duże korzyści daje
zamienienie rejestru IR
na
wielopozycyjny bufor instrukcji
i stworzenie w nim kolejki
instrukcji.
Architektura komputerów – Procesor
81
Gdy
ALU
pracuje akurat wolniej a szyna dostarcza instrukcje
szybciej kolejka się zapełnia kilkoma instrukcjami. Gdy później
szyna stanie się z jakiegoś powodu wolniejsza w
stosunku do
ALU
, instrukcje będą pobierane z kolejki i nie nastąpi przestój w
pracy
ALU
. Ilustruje to rys. 7.
Architektura komputerów – Procesor
82
Kolejka ma pięć pozycji
.
Dekoder aktualnie dekoduje
instrukcję
„instrukcję 0”
pierwszej odczytywanej
pozycji kolejki, a instrukcje
następne „
instrukcja 1”,
„instrukcja 2”, „instrukcja
3”, „instrukcja 4”
zostały
pobrane i oczekują w
kolejce. Rejestr
PC
wskazuje adres
„instrukcji
4”
, która została ostatnio
pobrana. Gdy zakończy się
dekodowanie
„instrukcji 0”
,
zostanie ona usunięta z
kolejki, a na zwolnione miejsce zostanie wpisana
„instrukcja 5”
w ten
sposób, że rejestr
PC
zwiększy się o
1
i wystawi adres
„instrukcji 5”
.
Sprawdzaniem stanu kolejki i uzupełnianiem jej w razie wolnego miejsca
przez zwiększanie
PC
i kolejki zajmuje się specjalny blok włączony pomiędzy
szynę a bufor kolejki w pamięci
FIFO zwany
Blokiem Wyprzedzającego Wprowadzania Instrukcji
(BWWI)
.
Architektura komputerów – Procesor
83
Cykl pracy kolejki wygląda zatem następująco:
jeżeli kolejka posiada wolne miejsca,
Blok Wyprzedzającego
Wprowadzania Instrukcji
(BWWI) wprowadza na nie kolejne
instrukcje w tempie wyznaczonym przez zegar (max 1
instr./takt), ale ograniczonym również przez obciążenie szyny,
równocześnie jeżeli kolejka zawiera instrukcje, są one pobierane
do dekodowania w tempie wyznaczonym przez pracę dekodera.
Zanim przedstawione zostanie, jak wprowadzenie kolejki
instrukcji odbija się na procesie pobierania instrukcji należy
przypomnieć, że w skład cyklu instrukcyjnego procesora wchodzi
5 faz:
Architektura komputerów – Procesor
84
pobranie instrukcji (PI),
dekodowanie instrukcji (DI),
obliczenie adresu argumentów i pobranie argumentów (OA+PA),
wykonanie instrukcji (WI),
zapamiętanie wyników (ZW).
Wśród nich trzy fazy
PI, PA i ZW
wymagają wykonania dostępów
do pamięci. Dostępy te są najkrytyczniejsze w całym cyklu
instrukcyjnym ponieważ zajmują i obciążają szynę adresową i
szynę danych.
Architektura komputerów – Procesor
85
Wymienione 5 faz rozłożonych na trzy bloki:
pamięć i układy adresujące,
dekoder,
ALU
rozkłada się w czasie w sposób pokazany na rys. 8..
Pomiędzy trzema dostępami do pamięci występują dwa martwe
cykle pamięci
(MCP)
, pomiędzy wykonaniami instrukcji występują
martwe cykle
ALU (MCA)
.
Architektura komputerów – Procesor
86
Rys 8. Fazy wykonania cyklu instrukcyjnego bez kolejki instrukcji
Jeżeli szyna jest mało obciążona
i transmisje adresu do pamięci
oraz instrukcji i danych z pamięci nie wymaga oczekiwania na
zwolnienie szyny, to pobranie instrukcji odbywa się w jednym
takcie.
Architektura komputerów – Procesor
87
Wówczas w każdym martwym cyklu pamięci
układ wyprzedzającego
wprowadzania instrukcji może dokonać co najmniej jednego
pobrania następnej instrukcji do kolejki. Otrzymujemy schemat
pokazany na rys. 9.
Architektura komputerów – Procesor
88
Rys 9. Fazy wykonania cyklu instrukcyjnego z jednotaktowym
wykonaniem instrukcji pierwszej(WI1)przy kolejce instrukcji
Architektura komputerów – Procesor
89
Może wystąpić również sytuacja, w której wykonanie instrukcji
pierwszej
(WI1)
trwa więcej taktów zegara i wówczas pojawia się
więcej martwych cykli, które można przeznaczyć na pobranie
większej liczby instrukcji, np.
PI3 i PI4
, jak pokazuje rys. 10.
Przypadkom z rys.9 i 10. towarzyszyć będzie zapełnianie kolejki.
Rys 10. Fazy wykonania cyklu instrukcyjnego z dwutaktowym WI1
przy kolejce instrukcji
Architektura komputerów – Procesor
90
Jeżeli jednak na rys.9 szyna będzie
przeciążona
i po zażądaniu
pobrania
drugiej
instrukcji
przez
Blok
Wyprzedzającego
Wprowadzania Instrukcji nie nastąpi przesłanie, ale oczekiwanie
na zwolnienie szyny, np.
przez jeden takt
, to nie uda się zapełnić
kolejki.
PI2
nie zmieści się w żadnym z jednotaktowych martwych
cykli pamięci (
nie tylko PI2 i PI3 będą opóźnione, ale także
pobrania argumentu PA1 i zapisania wyniku ZW1
). Kolejka
instrukcji nie będzie się zapełniała, a w realizacjach w których
dekoder
i
ALU
nie czekają na zakończenie cyklu instrukcyjnego
(potokowych), lecz pobierają następne dane kolejka będzie wręcz
malała.
Architektura komputerów – Procesor
91
Jeżeli w kodzie programu pojawi się instrukcja
skoku JMP
(zwykła lub warunkowa) lub wywołanie podprogramu
CALL
wówczas mechaniczne pobieranie przez
BWWI
do kolejki kolejnych
instrukcji za instrukcją skoku jest problematyczne. Najprostszy
układ
BWWI
nie bada typu instrukcji pobieranej.
Architektura komputerów – Procesor
92
Kolejka jest zapełniana kolejno instrukcjami:
„instrukcja 1”,
JMP, „Instrukcja 2”, „Instrukcja 3”, ....
Gdy
JMP
dojdzie do
dekodowania i dekoder stwierdzi
skok
, zostanie on wykonany,
następuje przerwa w pracy procesora, kolejka zostanie opróżniona
z instrukcji „Instrukcja 2”, „Instrukcja 3”,... i zacznie się jej
ponowne zapełnianie instrukcjami wyznaczonymi przez skok (lub
podprogram).
Ta przerwa znacznie spowalnia działanie procesora, bo skoki są
częstym elementem programu.
Sytuację można poprawić
jeżeli
BWWI
będzie rozpoznawał instrukcję
JMP
po jej wprowadzeniu i
przełączy się na pobieranie następnych instrukcji za skokiem.
Architektura komputerów – Procesor
93
Jeszcze trudniejsza sytuacja występuje jeżeli skok jest
warunkowy i zajdzie tylko w przypadku odpowiedniej wartości
zmiennej określonej argumentem instrukcji skoku. Wówczas
opróżnianie kolejki może nastąpić dopiero po wyliczeniu przez
ALU
wartości tego argumentu. Jeśli z wartości argumentu wynika, że
skok nastąpi, kolejka i dekoder są opróżniane, i zacznie się nowe
zapełnianie kolejki instrukcjami za skokiem.
Architektura komputerów – Procesor
94
Osobnym problemem jest dobór długości kolejki
. Jeżeli kolejka
jest krótka, wówczas nawet przy niewielkiej przewadze szybkości
pobierania instrukcji nad szybkością dekodowania i wykonywania
(tzn
. gdy szyna jest mało obciążona działa szybko a procesor
wykonuje długie instrukcje i działa wolno)
łatwo się zapełnia i
przestaje spełniać swoja rolę.
Z drugiej strony
, gdy kolejka jest długa, wówczas
Blok
Wyprzedzającego Wprowadzania Instrukcji
przez większość czasu
swojej pracy ma do czynienia z
kolejką nie zapełnioną
i stale
pobiera instrukcje do kolejki obciążając nadmiernie szynę.
Architektura komputerów – Procesor
95
Powoduje to globalne spowolnienie systemu
.
Jak widać obydwie sytuacje są niekorzystne i należy dobrać
kompromisową długość kolejki. W praktyce stosuje się na ogół
kolejkę, która zawiera kilka pozycji.
Architektura komputerów – Procesor
96
Przetwarzanie potokowe
W przetwarzaniu omawianym wyżej, w czasie
jednego cyklu
instrukcyjnego
cały procesor zajmował się tylko jedna instrukcją.
Gdy dekoder dekodował, układ pobierania już zakończył pracę, a
układ adresowania i pobierania danych oczekiwał na wynik pracy
poprzednika.
Było to tzw. przetwarzanie szeregowe (rys.11).
Rys 11. Wykonywanie faz cyklu instrukcyjnego w sposób
szeregowy
Architektura komputerów – Procesor
97
W przetwarzaniu tym wynik otrzymujemy w
fazie ZW
, co
następuje jeden raz w każdym cyklu instrukcyjnym. Wielką zaletą
takiego przetwarzania jest to, że dopuszcza dowolne uzależnienia
rejestrowe
instrukcji
później
wykonywanej
od
wcześniej
wykonywanej, np. wynik obliczony w
WI1
i zapisany w
ZW1
może
być argumentem następnej instrukcji pobieranym w fazie PA2.
Architektura komputerów – Procesor
98
Inną możliwością jest przetwarzanie
równolegle
, w którym
wszystkie odpowiadające sobie fazy wszystkich zrównoleglonych
instrukcji są wykonywane równocześnie, jak pokazuje rys. 12.
Rys.12. Wykonywanie faz cyklu instrukcyjnego w sposób
równoległy
Architektura komputerów – Procesor
99
System wymaga zwielokrotnienia sprzętu i daje w jednym cyklu
instrukcyjnym tyle wyników ilekrotnie zrównoleglono sprzęt.
Jednak nie dopuszcza on wzajemnych uzależnień rejestrowych
instrukcji, wynik jednej nie może być argumentem innej.
Architektura komputerów – Procesor
100
Najczęściej stosowany obecnie jest
system przetwarzania
potokowego
, w którym jeżeli cykl instrukcyjny jest podzielony na
5
faz
, to rozpoczęcie przetwarzania następnej instrukcji następuje z
opóźnieniem względem poprzedniej o
1/5 cyklu
, czyli np. jeden
takt zegara.
Pokazuje to rys. 13.
Rys.13. Wykonywanie faz cyklu instrukcyjnego w sposób
potokowy
Architektura komputerów – Procesor
101
W systemie tym otrzymanie i zapis wyniku
ZW
następuje co
1/5
cyklu instrukcyjnego
, a wiec mamy pięć wyników w czasie jednego
cyklu.
System ten w zasadzie nie wymaga zwielokrotnienia sprzętu a
jedynie zapewnienia, aby każdy z pięciu podukładów procesora
mógł niezależnie od innego wykonywać dowolną fazę cyklu
podczas gdy pozostałe będą wykonywać pozostałe fazy.
Architektura komputerów – Procesor
102
Przetwarzanie potokowe
w formie ogólnej stawia duże
wymagania sprzętowi, bo występuje w niej jednoczesność faz
PI,
PA i ZW
wymagających dostępu do pamięci. Okazuje się to bardzo
trudne w
klasycznej architekturze von Neumanna
. W praktyce w
różnych architekturach istnieją różne ograniczone wersje tego
przetwarzania.
Architektura komputerów – Procesor
103
Architektura Harvard
W klasycznym przetwarzaniu potokowym korzystanie z dostępu
do pamięci może powodować przeciążenie szyny adresowej i
opóźnień pobierania i zapisu. Aby zmniejszyć to obciążenie
stosowana jest
architektura Harvard
. Polega ona na tym, że
rozdzielone zostają obszary adresowania instrukcji oraz danych i
dostępy do instrukcji oraz danych.
Architektura komputerów – Procesor
104
Architektura systemu dzieli się na trzy układy:
układ obsługujący instrukcje (licznik rozkazów, bufor pobierania
instrukcji i pamięć programu),
układ obsługujący dane (dekoder, generator adresów danych,
rejestry i pamięć danych),
układ wykonawczy (ALU i blok sterowania).
Architektura komputerów – Procesor
105
Rys 14. Architektura Harvard
Architektura komputerów – Procesor
106
W tych trzech układach wyróżnić można pięć bloków, które mogą
pracować niezależnie:
blok pobierania instrukcji (PI),
blok dekodowania instrukcji (DI),
blok obliczania adresów danych (AG),
blok pobierania danych i zapisywania wyników (PA),
blok wykonania operacji (WI)
co implikuje możliwość uruchomienia pięciu potoków (rys. 15.):
1. licznik rozkazów wystawia na szynę adresów instrukcji kolejne
adresy, pamięć programu zwraca instrukcje na szynę instrukcji i
zostają one zapisane do bufora pobierania instrukcji aż do
zapełnienia kolejki,
Architektura komputerów – Procesor
107
2. dekoder pobiera instrukcje z bufora instrukcji i dekoduje je,
3. blok obliczania adresów określa adresy danych i zapisuje je w
rejestrach adresowych,
4. adresy danych są wystawiane na szynę adresów danych,
pamięć danych zwraca dane na szynę danych i zostają one
zapisane do rejestrów danych (w potoku tym zamiast
pobierania argumentów może być również wykonany zapis
zawartości rejestrów do pamięci),
5. ALU pobiera dane z rejestrów, wykonuje operacje i wynik
zapisuje w rejestrze.
Architektura komputerów – Procesor
108
Rys.15. Schemat przetwarzania potokowego w architekturze
Harvard
Architektura komputerów – Procesor
109
Architektura typu RISC
Konstruktorzy
klasycznych komputerów
dążyli do wyposażenia
ich procesorów w możliwie uniwersalny zestaw rozkazów, tak aby
umożliwiał on optymalizację programów pisanych w języku
symbolicznym. Komputery takie nazwano komputerami z
rozbudowaną listą instrukcji CISC (
complex instruction set
computer
). Lista rozkazów w takich komputerach sięgała
200
lub
300
rozkazów. Różnią się one formatem i wykorzystywanymi
trybami adresowania.
Architektura komputerów – Procesor
110
Natomiast w praktyce, częstość występowania różnych
rozkazów i różnych trybów adresowania, upoważnia do
wprowadzenia pewnej ich klasyfikacji, np. pod względem częstości
ich występowania..
Są rozkazy powtarzające się w programach bardzo często, jak
np. rozkazy
przesłań
, które stanowią ok.
33%
wszystkich
występujących rozkazów. Inne rozkaz, jak np.
skoki
(
15%
),
rozkazy
arytmetyczne i logiczne
(
15%
), rozkazy
porównań
(
10%
)
mają mniejszą częstotliwość występowania..
Architektura komputerów – Procesor
111
Można także stwierdzić, że wiele rozkazów występuje w
programach jeszcze rzadziej. Są to rozkazy
mnożenia, dzielenia,
alokacji stosu
itp.
Podobnie pośród trybów adresowania są jedne występujące
częściej
(rejestrowe pośrednie i rejestrowe bezpośrednie) i drugie
występujące
rzadziej
(względne).
Z drugiej strony, wyróżnić można rozkazy wykonywane w
niewielkiej liczbie cykli maszynowych
(szczególne znaczenie mają
rozkazy jednocyklowe), czyli rozkazy trwające krótko.
Architektura komputerów – Procesor
112
Przesłanki te
nasunęły myśl budowania szybkich komputerów,
które wyposażone byłyby w zestaw instrukcji zawierający tylko
rozkazy trwające krótko i często powtarzające się w programach.
Taka filozofia projektantów doprowadziła do powstania
komputerów ze zredukowaną listą instrukcji typu
RISC
(
reduced
instruction set computer
). Charakteryzują się one nie tylko
uboższym zestawem rozkazów; ale i rozkazy dobierane są według
pewnych cech.
Architektura komputerów – Procesor
113
Lista
instrukcji
komputerów
RISC
charakteryzuje
się
następującymi cechami:
dostęp do pamięci operacyjnej jest możliwy tylko rozkazami
przesłań,
operandy wszystkich rozkazów znajdują się tylko w rejestrach
procesora,
Architektura komputerów – Procesor
114
stosowane są tylko rozkazy o stałym formacie (długości), co
pozwala przyspieszać operację pobierania rozkazów i ułatwia
synchronizację faz w potoku,
stosowanie niewielkiej liczby trybów adresowania pozwala
uprościć sterowanie procesorem i zapewnia dużą szybkość fazy
obliczania adresu danych.
Architektura komputerów – Procesor
115
W porównaniu z klasycznym rozwiązaniem
von Neumana
architektura komputerów typu
RISC
odznacza się także cechami, z
których najważniejsze to:
architektura potokowa umożliwiająca skrócenie cyklu dostępu do
pamięci, ponieważ różne bloki procesora jednocześnie wykonują
różne zadania,
zwykle bardzo prosty układ sterowania procesora, gdyż
niewielka liczba rozkazów, stały ich format oraz proste tryby
adresowania pozwalają na zmniejszenie pamięci
mikroprogramów;
Architektura komputerów – Procesor
116
rozdzielenie obszarów pamięci dla programów i dla danych
stosujące architekturę typu Harvard,
sprzętowe rozwiązanie stosu ze względu na odpowiednio dużą
liczbę rejestrów procesora, co przyspiesza wywoływanie i
zagnieżdżanie podprogramów
.