Model programowy komputera I: format rozkazów - XP

Transkrypt

Model programowy komputera I: format rozkazów - XP
Wykład
Temat:
Model programowy komputera I: format rozkazów, lista
rozkazów, tryby adresowania, cykl rozkazowy, realizacja
programu w komputerze.
Zawartość wykładu:
1. Pojęcie modelu programowego procesora
2. Format słowa rozkazu wewnętrznego
3. Lista rozkazów wewnętrznych komputera
4. Tryby adresowania danych i rozkazów
5. Przykład formatu słowa rozkazowego współczesnego procesora
6. Cykl rozkazowy i jego realizacja w komputerze
7. Realizacja programu w komputerze
Pojęcie modelu programowego procesora
Model programowy komputera wyjaśnia sposób wykonywania programu w
komputerze.
Jest to zbiór informacji o komputerze, który jest potrzebny do zrozumienia
działania programów użytkowych w języku wewnętrznym komputera ( tym samym
napisania takich programów).
Model programowy komputera, który obejmuje sposób działania wszystkich
rozkazów wewnętrznych komputera (całą listę rozkazów) jest równoważny
architekturze komputera.
Model programowy komputera obejmuje model programowy procesora i model
współpracy z urządzeniami zewnętrznymi.
Model programowy komputera opiera się o znajomość podstawowego schematu
blokowego procesora oraz schematu podłączenia do procesora pamięci
operacyjnej i układów wejścia/wyjścia.
Znajomość podstawowego schematu blokowego procesora i komputera jest
niezbędna dla zrozumienia formatu i listy rozkazów wewnętrznych.
Uproszczony schemat blokowy mikroprocesora 8-bitowego
Rejestr rozkazów
(RR)
Zespół rejestrów
uniwersalnych
i specjalnych
Sprzężenie z szynami
zewnętrznymi
Wewnętrzna szyna danych
Zewnętrzna
szyna
danych
Selektor rejestru
Rejestr danych (B)
Dekoder rozkazów
Układ arytmetyczno – logiczny (ALU)
Rejestr buforowy
danych (RBD)
Układ sterowania
Rej. adresowy
Rej. stanu proc.
Rej. wsk. proc.
Licznik rozk. (LR)
Akumulator (A)
ALU
Taktowanie
Układ
nastêpnika
Rejestr warunków
Wewnętrzna szyna adresowa
Wewnętrzna szyna sterowania
Rejestr buforowy
adresu (RBA)
Przerwania
Generator
sygnałów
sterujących
Zewnętrzna
szyna
adresowa
Zewnętrzna
szyna
sterowania
Na schemacie blokowym procesora (mikroprocesora) wyróżnione są cztery
podstawowe podzespoły:
• układ sterowania,
• zespół rejestrów uniwersalnych i specjalizowanych,
• układ arytmetyczno-logiczny
• układ sprzężenia z zewnętrzną szyną systemową.
Te podzespoły podłączone są do trzech szyn procesora: wewnętrznej szyny
danych, szyny adresowej i szyny sterującej.
Poprzez rejestr buforowy danych i rejestr buforowy adresów, szyna danych i
szyna adresowa wraz z szyną sterującą wychodzą na zewnątrz procesora by
stworzyć tam zewnętrzne szyny, do których podłącza się bloki pamięci operacyjnej
i układy wejścia/wyjścia.
Na schemacie występuje jeden wykonawczy układ arytmetyczno-logiczny z
rejestrem bitów warunków, wytwarzanych przez testy wyniku operacji
arytmetycznej: wynik zerowy, wynik z nadmiarem, wynik z przeniesieniem, wynik
ujemny, wynik w podwójnej precyzji, itp.
W bardziej rozbudowanych procesorach występuje więcej układów
wykonawczych, identycznych lub wyspecjalizowanych dla określonych operacji
np. przesuwanie, porównywanie, mnożenie, dzielenie, operacje zmiennoprzecinkowe, operacje na adresach itp., które są równolegle podłączone do szyn
wewnętrznych.
Zespół rejestrów uniwersalnych liczy pewną liczbę rejestrów wykorzystywanych
dla przechowywania danych.
Rejestry specjalne zawierają rejestry adresowe, rejestr wskaźnika stosu i rejestr
stanu.
Zespół rejestrów adresowych jest wykorzystywany w operacjach modyfikacji
adresu zawartego w rozkazie.
Rejestr rozkazów należący do układu sterowania przechowuje słowo rozkazu
wewnętrznego podczas wykonania.
Słowo rozkazu jest dekodowane przez dekoder rozkazu. W wyniku dekodowania,
kody binarne operacji zawarte w słowie rozkazu zostają zamienione na sygnały
logiczne, które podawane są do generatora sygnałów sterujących.
Generator sygnałów sterujących realizuje kombinacje logiczne tych sygnałów z
innymi sygnałami, takimi jak sygnały taktujące, wartości warunków i stany
przerwań. W wyniku tych kombinacji logicznej powstają sygnały sterujące, które
są rozprowadzane poprzez szynę sterującą do wszystkich elementów
wykonawczych komputera.
Format słowa rozkazu wewnętrznego
Budowę słowa rozkazu wewnętrznego i sposób dekodowania określa tzw . format
rozkazu (ang. instruction format).
Format rozkazu podaje długość słowa rozkazu, podział na pola bitowe oraz
sposób interpretacji (traktowania) poszczególnych pól.
Pola bitowe słowa rozkazowego służą do:
• zakodowania w nich operacji do wykonania w rozkazie
• zakodowania sposobu dekodowania rozkazu
• umieszczenia bitów danych.
Najprostszy format rozkazu składa się z dwu pól:
• pola części operacyjnej
• pola części adresowej.
Część
operacyjna
Część
adresowa
Bity określające
operacje podzespołów
mikroprocesora
Bity określające
adres podzespołów
mikroprocesora
Najprostszy format rozkazu
Słowo rozkazowe w komputerze może mieć stałą lub zmienną długość.
Długość słowa rozkazowego zależy od jego części operacyjnej i może być
określona dopiero po jej zdekodowaniu.
7
0
7
0
Kod operacyjny
7
Operand
0
Kod operacyjny
7
0
Kod operacyjny
7
0
Adres operandu
7
0
Adres operandu
7
0
Adres operandu
Stała i zmienna długość słowa rozkazu.
Część operacyjna może składać się z jednego lub wielu pól.
W każdym polu zakodowano binarnie wykluczające się operacje, które mają być
wykonane w ramach danego rozkazu.
W polu części adresowej umieszczone być mogą adresy argumentów operacji z
części operacyjnej ( binarne numery komórek pamięci albo rejestrów) albo też tzw.
argumenty natychmiastowe czyli dane binarne, bezpośrednio użyteczne dla
operacji rozkazu.
Część operacyjna
Pole A
Pole B
Pole C
Część adresowa
Ciąg bitów
Budowa słowa rozkazowego
Format rozkazu może być stały lub zmienny.
Przy stałym formacie, długość i podział na pola jest identyczny dla wszystkich
rozkazów wewnętrznych komputera.
Dekodowanie wszystkich pól słowa rozkazowego może odbywać się jednocześnie,
tzn. wszystkie bity są podane na wejścia wszystkich dekoderów pól.
Strukturę dekodera rozkazu stanowi wiele dekoderów pól pracujących równolegle
(każde wytwarza jeden sygnał aktywujący jakąś operację w komputerze).
Sposób dekodowania rozkazu o stałym formacie
Część operacyjna
Pole A
Pole B
Pole C
DekC
DekA
DekB
Część adresowa
Ciąg bitów
Przy zmiennym formacie rozkazu, zarówno długość słowa rozkazu jak i sposób
podziału na pola są różne dla różnych rozkazów.
Przy zmiennym formacie rozkazu, dekodowanie rozkazu następuje stopniowo,
jedna faza dekodowania po drugiej.
W każdej fazie dekoduje się ustalone pola rozkazu. Wartości kodu w tych polach
decydują o tym jakie pola dekodować w następnej fazie, a więc na wejścia jakich
dekoderów dopuścić bity kolejne dekodowane w następnej fazie.
Przy stwierdzeniu odpowiednich kodów w odpowiednich polach, dekodowanie
bieżącego rozkazu ustaje i pobierany jest nowy rozkaz (poprzez odpowiednie
sygnały z generatora sygnałów sterujących).
Strukturę dekodera stanowi drzewo dekoderów z bramkami dopuszczającymi
odpowiednie bity do odpowiednich dekoderów.
Sposób dekodowania rozkazu o zmiennym formacie
Część operacyjna
Faza I Faza II
Część adresowa
Faza III
Ciąg bitów
Faza I
Selektor
Selektor
Selektor
Faza II
Selektor
Faza III
Faza II
Faza III
Lista rozkazów komputera
W komputerze o modelu von Neumana, wykonanie wszelkich programów (nawet
napisanych w językach wysokiego poziomu) sprowadza się do wykonania ciągu
rozkazów wewnętrznych składających się na program.
Rozkazy wewnętrzne wyrażają prawie wszystkie operacje, które komputer może
wykonać. Nie dotyczy to operacji, które nie są programowalne przez użytkownika
komputera, tzn. jak to się mówi „są zaszyte lub zrealizowane w sprzęcie (ang.
hardwired)”, np. obsługa przerwań, obsługa pamięci podręcznej.
Zbiór wszystkich rozkazów wewnętrznych, w które wyposażono dany komputer ,
rozumiany jako zbiór operacji tych rozkazów, nazywamy listą rozkazów
komputera (ang. computer instruction list lub computer instruction set).
Typy rozkazów wewnętrznych komputera
Ze względu na rodzaj operacji wykonywanej w rozkazie wyróżniamy następujące
typy rozkazów wewnętrznych komputera:
• rozkazy arytmetyczno-logiczne
• rozkazy przesyłania danych
• rozkazy operacji na bitach
• rozkazy sterujące programem
• rozkazy systemowe.
W rozkazie wewnętrznym jest zawsze określona operacja, która ma być wykonana.
W zależności od konkretnego rozkazu mogą tam być też podane:
• adresy argumentów operacji,
• sposób wyliczenia finalnego adresu argumentów operacji (tzw. tryb
adresowania) na podstawie adresu zawartego w rozkazie (możliwa jest
modyfikacja adresu przy użyciu informacji zapamiętanych w komputerze
danych),
• dane natychmiastowe.
Rozkazy wewnętrzne mają postać bardzo niewygodną dla człowieka.
Aby ułatwić pisanie programów niskiego poziomu przez programistów
wprowadzono symboliczne języki programowania tzw. języki asemblerowe.
W językach asemblerowych program wyraża się w postaci instrukcji
odpowiadających rozkazom języka wewnętrznego zapisanych symbolicznie.
Rozkaz asemblera zawiera:
• symbol operacji wykonywanej przez rozkaz (skróty – mnemoniki),
• symbol trybu adresowania, wartości i symboli adresów używanych przez rozkaz
(etykiety)
• symbole i wartości danych (stałe i zmienne).
Wartości adresów i danych mogą być zapisywane w różnych zapisach:
dziesiętnym, szesnastkowym, ósemkowym lub binarnym. lecz zawsze z
określeniem rodzaju użytego zapisu (identyfikator).
Typy rozkazów wewnętrznych na przykładzie komputerów
personalnych typu IBM PC.
Rozkazy arytmetyczno-logiczne
Rozkazy arytmetyczno logiczne składają się trzech podstawowych grup rozkazów:
• rozkazy arytmetyczne,
• logiczne
• przesunięć.
Rozkazy arytmetyczne
ADD
Obliczenie sumy argumentów (od ang. addition).
SUB
Obliczenie różnicy argumentów (od ang. subtraction).
MUL
Obliczanie iloczynu z podwójną lub pojedynczą dokładnością
(od ang. multiplication).
DIV
Obliczenie ilorazu (od ang. division).
ABS
Obliczenie wartości bezwzględnej (od ang. absolute value).
NEG
Zmiana znaku liczby (od ang. negate sign).
INC
Zwiększ o 1 (od ang. increment).
DEC
Zmniejsz o 1 (od ang. decrement).
Rozkazy logiczne
AND
Wykonanie operacji AND na argumentach.
OR
Wykonanie operacji OR na argumentach.
EXOR
Wykonanie operacji EXOR na argumentach.
NOT
Wykonanie operacji NOT na argumentach.
Rozkazy przesunięć
SHL/SHR
Przesunięcie logiczne w lewo / w prawo.
(od ang. shift left / shift right).
SAL/SAR
Przesunięcie arytmetyczne w lewo / w prawo.
(od ang. shift arithmetical left / shift arithmetical right).
ROL/ROR
Wykonanie rotacji w lewo / w prawo.
(od ang. rotate left / rotate right).
Rozkazy przesyłania danych
MOV
STR
Przesłanie danych między rejestrami lub między pamięcią a rejestrem
(od ang. move).
Przesłanie danych między rejestrem a pamięcią.
(od ang. store).
MOVSX
Przesłanie bajtu, słowa, podwójnego słowa z rozszerzeniem znaku.
(od ang. move single/double).
LEA
Ładowanie adresu efektywnego z pamięci do rejestru
(od ang. load efective address)..
PUSH
PUSHA
IN, OUT
Umieszczenie danych z rejestru na stosie. (wepchnij)
Umieszczenie zawartości wszystkich rejestrów na stosie
(wepchnij wszystkie).
Wejście, wyjście danych z urządzeń wejścia-wyjścia
Rozkazy operacji na bitach
BTS
Testowanie i ustawienie bitu. Kopiowana jest bieżąca wartość bitu do
znacznika CF, a bit jest ustawiany na l. (od ang. bit test).
BSP
Sprawdzanie bitów w przód. Sprawdzane jest słowo lub podwójne słowo
w poszukiwaniu bitu l a numer pierwszego bitu l jest zapisywany w
rejestrze (od ang. bit set prime).
CLR
Wyzeruj zawartość rejestru. (od ang. clear).
SET
Wstaw same jedynki do rejestru.(ustaw na 1).
Rozkazy sterujące programem
JMP
Skok bezwarunkowy (od ang. jump).
JE/JZ
Skok warunkowy, jeśli równy (lub jeśli zero)
(od ang. jump if equal, jump if zero).
CALL
Wywołanie podprogramu (wywołaj).
RET
Powrót z podprogramu (od ang. return).
LOOPE/ LOOPZ
Wykonanie pętli, jeśli równy /jeśli zero,
skok warunkowy z badaniem zawartości w rejestru ECX po
dekrementacji. (od ang. loop if equal, loop if zero).
INT / INTO
Przerwanie programowane / przerwanie w razie nadmiaru.
(od ang. interrupt, interrupt if overflow).
SKIP
Pominięcie wykonania następnego rozkazu (przeskocz).
HALT
Zatrzymaj wykonywanie programu
Rozkazy systemowe
LMSW
Ładowanie słowa stanu procesora do rejestru stanu z pamięci
lub rejestru, przełącz do trybu systemu operacyjnego.
(od ang.
SGDT
LGDT
LSL
LDS
load machine status word register).
Zapisanie wskaźnika globalnej tablicy deskryptorów w pamięci
(od ang. store global descriptor table register).
Ładowanie wskaźnika globalnej tablicy deskryptorów z pamięci
(od ang. load global descriptor table register).
Ładowanie granicy segmentu do rejestru. (od ang. load segment limit).
Ładowanie z pamięci rejestru wskaźnika segmentu DS
(od ang. load DS).
ENTER
Utworzenie w stosie ramki dla parametrów procedury
z języka wysokiego poziomu.
ESC
Skierowanie programu do koprocesora numerycznego (od ang. escape).
WAIT
Czekaj na zmianę stanu wejścia BUSY (czekaj).
Tryby adresowania danych i rozkazów
Bardzo często zawartość pola adresowego rozkazu nie jest bezpośrednio użyta jako
adres danej lub rozkazu lecz procesor wykonuje na nim tzw. operacje adresujące
(ang. addressing operations), które przekształcają zawartość pola adresowego
zanim zostanie wykorzystana jako ostateczny adres argumentu rozkazu.
Rodzaj operacji, którą procesor wykonuje na zawartości pola adresowego rozkazu
jest nazywany trybem adresowania (ang. addressing mode).
Tryb adresowania dla rozkazu jest zwykle określony w jednym lub kilku polach
należących do pola kodu operacji rozkazu.
W niektórych przypadkach rozkazów, tryb adresowania wynika bezpośrednio z
kodu operacji rozkazu.
Podstawowe tryby adresowania
Adresowanie natychmiastowe
Kod operacji
Operand
W trybie natychmiastowym pole adresowe zawiera bezpośrednio operand (ang.
operand) czyli daną dla rozkazu. Długość operandu zależy od kodu operacji lub od
kodu operacji i dodatkowego pola sterującego w rozkazie.
Ten tryb adresowania stosujemy, gdy np. chcemy bezpośrednio z rozkazu ( bez
odwoływania się do pamięci) załadować do rejestru prostą daną – bajt lub parę
bajtów.
Adresowanie bezpośrednie (bezwzględne)
Kod operacji
Adres
Pamięć
Operand
Adresowanie bezpośrednie jest najbardziej podstawowym trybem adresowania.
W tym trybie zawartość pola adresowego stanowi już finalny adres argumentu
rozkazu w pamięci operacyjnej i nie podlega przekształceniu.
Ten tryb stosujemy, gdy nie zależy nam na tym, aby nasz program był przesuwalny
w pamięci operacyjnej, lecz jest przeznaczony do wykonania przy zapisie w ściśle
określone miejsce w pamięci.
Adresowanie pośrednie
Kod operacji
Adres pośredni
Pamięć
Adres
Operand
Przy adresowaniu pośrednim rozkaz zawiera adres komórki pamięci operacyjnej,
w której zawarty jest finalny adres operandu rozkazu.
W tym przypadku komórka pamięci wskazana przez adres rozkazu pośredniczy w
określeniu finalnego adresu.
Tryb pośredni stosujemy, gdy chcemy, aby finalny adres operandu rozkazu mógł
być dynamicznie wstawiony do komórki pośredniczącej w adresowaniu w czasie
wykonywania programu.
Może tak być, gdy ten adres zależy od jakichś testów na wyniku operacji
poprzedzającego rozkazu.
Adresowanie indeksowe
Kod operacji
Adres bazowy
Pamięć
Rejestr indeksowy
Przesunięcie
Przesunięcie
Operand
Adresowanie indeksowe jest inaczej nazywane modyfikacją adresu przez
indeksowanie.
W tym trybie wykorzystuje się specjalne rejestry procesora tzw. rejestry
indeksowe (ang. index registers), które zawierają przesunięcie, który trzeba dodać
do adresu istniejącego w rozkazie aby wyliczyć adres finalny operandu.
Ten tryb adresowania pozwala przesunąć adres zawarty w rozkazie o wartość
rejestru indeksowego.
Używając tego trybu we wszystkich rozkazach programu, można osiągnąć
możliwość wykonania programu przy załadowaniu w dowolne miejsce
pamięci. W tym celu należy napisać program wstawiając do rozkazów programu
adresy, które odpowiadają umieszczeniu pierwszej instrukcji programu pod
adresem zerowym w pamięci. Następnie wiedząc, pod jakim finalnym adresem jest
umieszczony pierwszy rozkaz programu, umieszczamy ten adres w rejestrze
indeksowym.
Dzięki operacji indeksowania rozkazów programu, wszystkie adresy operandów
zostaną przesunięte o tę samą wartość – stąd nazwa zawartości rejestru
indeksowego: przesunięcie.
Taka organizacja przesuwalności programu w pamięci nosi nazwę dynamicznej
relokacji programu w pamięci.
Rejestrów indeksowych w procesorze jest zwykle wiele, gdyż mogą one być
przydzielone różnym programom lub fragmentom programów, które są
wykonywane w tym samym okresie czasu.
Rejestr indeksowy do użycia, może być określony przy pomocy specjalnego pola
wspomagającego kodowanie trybu adresowania w innym polu rozkazu.
Adresowanie względne
Kod operacji
Licznik rozkazów
Następna instrukcja
Operand
Przesunięcie
Przesunięcie
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
znać przesunięcia całości programu w stosunku do adresu zerowego.
Przy adresowaniu względnym, finalny adres danej jest wyliczany względem
bieżącej zawartości licznika rozkazów, a więc do rozkazu wstawiamy przesunięcie
danej w programie względem adresu następnego rozkazu, np. n komórek w przód
lub w tył. Musimy tylko zapewnić, aby dana została umieszczona w spodziewanym
miejscu pamięci, a ściślej w spodziewanej odległości od rozkazu, który z tej danej
korzysta.
Można to osiągnąć przez zaplanowanie w jakiej odległości od danego rozkazu,
będzie umieszczony obszar danych programu.
Adresowanie pośrednie indeksowe
Kod operacji
Adres pośredni
Pamięć
Adres bazowy
Rejestr indeksowy
Operand
Adresowanie pośrednie indeksowe zapewnia jednoczesną możliwość
zastosowania w programie adresowania pośredniego z modyfikacją adresu
odczytanego z komórki pośredniczącej poprzez zawartość rejestru indeksowego.
Umieszczony w rozkazie adres wskazuje na komórkę przechowującą adres danej,
który może być tam wstawiany dynamicznie jako wynik obliczeń programu. Do
tego adresu stosowane jest następnie indeksowanie poprzez zawartość rejestru
indeksowego.
Zawartość rejestru indeksowego może też być wstawiona dynamicznie w wyniku
działania innej części programu. W zależności od zawartości rejestru indeksowego
trafiamy zatem do innej komórki zawierającej operand.
Adresowanie pośrednie indeksowe pozwala na dwupoziomowe dynamiczne
określanie adresu danych w wyniku obliczeń wykonanych w poprzedzających
fragmentach programu, metodą wpisania pewnego adresu bazowego a następnie
modyfikacji tego adresu bazowego przez rejestr indeksowy.
Adresowanie indeksowe pośrednie
Kod operacji
Adres bazowy
Pamięć
Rejestr indeksowy
Przesunięcie
Adres
Operand
Adresowanie indeksowe pośrednie zapewnia najpierw modyfikację adresu
zawartego w rozkazie przez zawartość rejestru indeksowego a następnie tak
otrzymany adres jest stosowany do wskazania komórki pamięci, w której jest
przechowywany finalny adres operandu rozkazu.
Adresowanie indeksowe pośrednie pozwala na dynamiczne określanie adresów
danych w programie w czasie wykonania programu, przy zapewnieniu
przesuwalności w pamięci całego programu.
Dla dynamicznego określanie adresów danych w programie, program piszemy
począwszy od adresu zerowego w pamięci stosując adresowanie indeksowe do
wszystkich rozkazów z wyjątkiem tych, które działają na danych wybieranych
dynamicznie.
Te rozkazy adresujemy poprzez użycie adresowania pośredniego indeksowego,
umieszczając adres komórki pośredniczącej (względem adresu zero) w bieżącym
rozkazie.
Po załadowaniu programu do pamięci, wpisywana jest do rejestru indeksowego
wartość przesunięcia początku programu w stosunku do adresu zerowego ( robi to
program ładujący).
W trakcie wykonywania programu wszystkie adresy programu, łącznie z tymi,
gdzie zastosowano adresowanie pośrednie oraz tymi. które wpisują adres danej do
komórki pośredniczącej, zostaną zmodyfikowane.
Adresowanie rejestrowe
Mikroprocesor
Kod operacji
Numer rejestru
Zespół
rejestrów
Operand
Adresowanie rejestrowe stosuje się, gdy dana dla rozkazu jest przechowywana w
rejestrze. Część adresowa rejestru zawiera wtedy jedno lub więcej pól, w których
znajdują się identyfikatory rejestrów. Adresowanie rejestrowe jest często
stosowane w tym samym rozkazie razem z innymi trybami adresowania
dotyczącymi pamięci operacyjnej. Wówczas rozkaz dotyczy zarówno pamięci
operacyjnej jak i rejestrów procesora.
Adresowanie pośrednie rejestrowe
Kod operacji
Numer rejestru
Pamięć
Mikroprocesor
Zespół
rejestrów
Operand
Adres
Adresowanie pośrednie rejestrowe polega na tym, że jako miejsce pobrania
finalnego adresu operandu rozkazu stosuje się rejestr procesora, którego
identyfikator umieszczony jest w polu adresowym rozkazu.
Przy pomocy trybu adresowania pośredniego rejestrowego można dynamicznie
określić finalny adres operandu poprzez odpowiednie załadowanie zawartości
rejestru, w zależności od przebiegu obliczeń w programie.
Przykład formatu słowa rozkazu wewnętrznego procesora Pentium
Bajty
1 lub 2
0 lub 1
0 lub 1
0, 1, 2 lub 4
0, 1, 2 lub 4
Kod operacji
MOD/RM
Sterowanie
modyfikacją
Przesunięcie
Natychmiastowy
Modyfikacja Rejestr/Operacja
7
6
5
4
Skala
Rejestr/Operacja
3
2
1
0
7
6
Rejestr indeksowy
Rejestr bazowy
5
2
4
3
1
0
Pole „Kod operacji” o długości 1-2 bajtów określa operację podstawowa
wykonywaną w rozkazie. Pola „MOD/RM” oraz „ Sterowanie modyfikacją” , o
długości 0-1 bajt każde, określają tryb i szczegóły modyfikacji adresu
wykonywanej na adresach argumentu (ów). Pole „Przesunięcie” zawiera
przesunięcie adresu, o ile pola związane z modyfikacją wskazują na użycie
przesunięcia dla określenia adresu argumentu (ów). Pole „Natychmiastowy”
zawiera dane o długości 1-4 bajtów, o ile pola związane z modyfikacją wskazują na
użycie argumentu natychmiastowego.
Cykl rozkazowy i jego realizacja w komputerze
Rozkazy wewnętrzne komputera są wykonywane w procesorze w ramach tzw.
cyklu wykonania rozkazu, który składa się z dwu faz: pobrania rozkazu i
wykonania rozkazu.
Start
Pobranie
następnego
rozkazu
Faza pobierania
Wykonanie
rozkazu
Faza wykonania
Stop
2
Wprowadzenie
adresu rozkazu
Następny
rozkaz
Pobranie rozkazu
Faza pobierania
1
3
Dekodowanie
kodu operacji rozkazu
4
Obliczenie
adresu argumentu
wiele argumentów
6
7
Pobranie argumentu
Operacja na danych
Faza wykonania
5
Łańcuch
lub
wektor
Obliczenie
adresu wyniku
wiele wyników
8
Zapisanie wyniku
Składniki faz w cyklu wykonania rozkazu.
Fazy należące do cyklu wykonania rozkazu mają długości czasowe określone przez
sygnały taktujące pochodzące z zegara.
W każdej fazie generator sygnałów sterujących dostarcza odpowiednich sygnałów,
które powodują realizację operacji przewidzianych w tych fazach.
Odbywa się to metodą otwarcia odpowiednich dróg przesyłania informacji w
komputerze (np. szyn) i aktywacji odpowiednich działań w układach
wykonawczych (np. ALU – dodanie/ odjęcie, układ następnika licznika rozkazów,
itp.).
Realizacja programu w komputerze
Realizację wykonania prostego programu rozważymy w uproszczonym komputerze
składającym się mikroprocesora i pamięci operacyjnej podłączonej do niego za
pomocą szyny systemowej ( szyna danych, szyna adresowa i szyna sterująca).
Program, którego wykonanie rozpatrzymy składa się z 4 rozkazów zapisanych pod
kolejnymi adresami w pamięci od 0 do 3 oraz z 3 danych dla których przeznaczono
komórki o adresach od 4 do 6.
Program składa się z następujących rozkazów, (rozkazy zapisujemy za pomocą
typowch skrótów języka asemblera) :
move 4 - pobierz daną z pamięci spod adresu 4 do rejestru akumulatora,
add 5 - dodaj do akumulatora daną spod adresu 5,
store 6 - zapamiętaj zawartość akumulatora w pamięci pod adresem 6,
stop - zatrzymaj wykonanie programu.
Po wykonaniu programu wynik obliczeń znajduje się w komórce pamięci
operacyjnej o adresie 6.
Podłączenie mikroprocesora do pamięci operacyjnej zawierającej program.
Szyna danych
Mikroprocesor
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Szyna adresowa
Szyna sterowania
Pamięć operacyjna
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
Założona struktura blokowa procesora.
Szyna danych
Pamięć operacyjna
0
Kod
Adres RR
operacji
Taktowanie
Dekoder
Selektor
LR
0
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Szyna adresowa
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Szyna sterowania
RR – rejestr rozkazów
A – rejestr akumulatora
RBD – rejestr buforowy danych
LR – licznik rozkazów
Warunki – rejestr warunków (flagi)
RBA – rejestr buforowy adresu
Pamięć operacyjna zawiera komórki, które symbolicznie są przedstawione
w postaci wierszy składających się z numeru komórki i pola zawartości komórki.
W rzeczywistości komórka zawiera tylko pole zawartości.
Adres jest podawany do pamięci z zewnątrz (z procesora prze szynę adresów) i po
zdekodowaniu przez dekoder adresu, powoduje uaktywnienie (wybranie) komórki
o podanym adresie.
Może być wykonany odczyt lub zapis zawartości (rodzaj operacji
zależy od sygnału podanego przez szynę sterującą do układu sterowania pamięci).
Sposób wykonania kolejnych rozkazów komputera można omawiać wykorzystując
symboliczny zapis operacji, czyli :
tzw. język przesłań między-rejestrowych (ang. register transfer language).
Nazwa języka pochodzi od tego, że podstawową operacją wyrażalną w tym języku
są przesłania informacji między rejestrami, komórkami pamięci i blokami
funkcjonalnymi (obliczeniowymi) w komputerze.
Języki takie należą do większej grupy języków służących do opisu sprzętu
komputera i sposobu jego działania, tzw. języków opisu sprzętu (ang. hardware
description languages).
Język przesłań między-rejestrowych wykorzystuje reprezentacje elementów
pamięciowych lub bloków obliczeniowych komputera (rejestrów, pamięci
operacyjnej, pamięci pomocniczej, jednostki arytmetyczno-logicznej) w postaci ich
nazw, np. A, RR , LR, pamięć, P, ALU, itp..
Zawartość elementów pamięciowych lub wyjściowe dane z bloku
obliczeniowego (rozumiane jako ciąg bitów) symbolizuje nazwa elementu wzięta w
nawias prostokątny, np. [A], [RR], [RBD], [ALU].
Adresowanie informacji wewnątrz elementu pamięciowego lub słowa wyjścia z
bloku obliczeniowego opisuje się za pomocą nazwy elementu, po którym
występuje specyfikacja wybranego fragmentu zawartości w nawiasie okrągłym.
Przykłady:
RR (Kod Operacji) – pole rejestru RR o nazwie Kod Operacji,
RR (Adres) – pole rejestru RR o nazwie Adres,
ALU (bity 10 – 24) – bity od 10 do 24 słowa stanowiącego wynik operacji ALU.
Komórki pamięci mogą być opisane przy pomocy nazwy całej pamięci np. P dla
pamięci operacyjnej oraz specyfikacji adresu w nawiasie okrągłym
Przykłady
P (999) – komórka pamięci P o adresie 999,
P (RBA) – komórka pamięci P o adresie zawartym w rejestrze RBA,
P (LR) ( Kod Operacji) – pole Kod Operacji w komórce pamięci P o adresie
zawartym w rejestrze LR.
Na zawartościach elementów pamięciowych można wykonać operacje, które
symbolizowane są operatorami, np. → prześlij, + dodaj, - odejmij, itp.
Przykłady
[A] → P (1024) – oznacza prześlij zawartość rejestru A do komórki pamięci o
adresie 1024,
[RR (Adres)] → LR – prześlij zawartość pola Adres rejestru RR do rejestru LR,
[A (0-15)] + [LR] → LR – dodaj zawartość bitów od 0 do 15 rejestru A do
zawartości LR i wynik zapisz do LR.
Przesyłanie zawartości bitowej odbywa się z wpisywaniem bitów na te same
pozycje w elemencie docelowym ( bit na pozycji zero elementu źródłowego
wpisuje się na pozycje zero w elemencie docelowym), chyba, że jest to określone
inaczej.
Przykład
[RR (Adres)] → LR (14 –31) – przesłanie pola Adres z rejestru RR na bity 14-31
rejestru LR.
Wykonanie przykładowego programu opisane za pomocą języka
przesłań między-rejestrowych
• Dla prezentacji użyty będzie schemat blokowy komputera
• Elementy komputera, które biorą udział w opisywanej operacji zaznaczać
będziemy na czerwono.
• Pod schematem blokowym podany jest opis operacji w języku przesłań międzyrejestrowych
Faza pobrania rozkazu
Przed wykonaniem każdego programu, adres komórki pamięci operacyjnej,
która zawiera pierwszy rozkaz programu musi być wprowadzony do licznika
rozkazów LR.
Wykonuje to system operacyjny na podstawie odpowiedniej dyrektywy
użytkownika np.„ Wykonaj program o nazwie alfa.”.
We współczesnych komputerach taka dyrektywa jest nazwa zbioru zawierającego
wykonywalny kod binarny programu, a więc alfa.exe.
Nazwa jest zamieniana na adres pierwszego rozkazu programu o nazwie alfa.
W przypadku naszego przykładowego programu jest to adres 0. Jest on
wprowadzony do rejestru LR przed wykonaniem programu.
0
Kod
Adres RR
operacji
Taktowanie
Dekoder
Selektor
LR
0
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Operacja [LR] →RBA
W tej operacji zawartość licznika rozkazów LR jest przesłana do rejestru
buforowego pamięci operacyjnej RBA. Odbywa się to pod wpływem sygnałów
sterujących wysyłanych z układu sterującego, a ściślej jego generatora sygnałów.
0
Kod
Adres RR
operacji
Taktowanie
Dekoder
Selektor
LR
1
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Operacja [LR] + 1 → LR
Jako następna operacja jest wykonany następnik na zawartości licznika rozkazów
LR. W ten sposób LR zawiera adres potencjalnego następnego rozkazu do
wykonania. O ile pobrany rozkaz nie zmieni zawartości LR, to zawartość LR
postała w wyniku operacji następnika będzie adresem następnego rozkazu. W
naszym przypadku będzie to adres 1. Operacja następnika na LR w fazie pobierania
rozkazu jest charakterystyczną cechą komputera o modelu von Neumana.
Move 4
Kod
Adres RR
operacji
Taktowanie
Dekoder
Selektor
LR
1
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Operacja [P (RBA)] →RBD
Kolejna operacja w fazie pobrania rozkazu jest odczyt komórki pamięci o adresie
zawartym w RBA do rejestru buforowego RBD. Generator sygnałów sterujących
podaje wtedy do układu sterowania pamięcią sygnał „odczyt pamięci” (ang.
memory read). Po odczycie, rejestr RBD zawiera rozkaz „move 4”.
Move 4
Move
4
Taktowanie
Dekoder
RR
Selektor
LR
1
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Operacja [RBD] → RR
Następna operacja polega na przepisaniu zawartości rejestru RBD do rejestru
rozkazów RR. Pole „Kod operacji” rejestru RR zawiera kod binarny rozkazu
„move” a pole adresowe „Adres” zawiera liczbę binarną 4. Ta operacja kończy fazę
pobrania pierwszego rozkazu naszego programu. Następna faza cyklu rozkazu to
faza wykonania.
Move 4
Faza wykonania rozkazu
Move
4
Taktowanie
Dekoder
Selektor
RR
1
LR
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Dekodowanie rozkazu „move 4”
Faza wykonania rozkazu rozpoczyna się od zdekodowania rozkazu a ściślej od
zdekodowania pola „Kod operacji” rejestru RR.
Generator sygnałów sterujących wysyła sygnały, który otwierają:
1) drogę z pola „kod operacji rejestru RR do Dekodera rozkazów
2) drogę z Dekodera rozkazów do Generatora sygnałów sterujących
Te dwie drogi w układzie sterującym pozostaną otwarte już do końca wykonania
rozkazu.
Dekoder rozkazów podaje na wejście Generatora sygnałów sygnały odpowiadające
kodowi „move”.
Sygnały z dekodera są kombinowane logicznie w Generatorze sygnałów z
sygnałami zegarowymi Taktowanie.
W wyniku kombinacji logicznej powstają sygnały sterujące, które w kolejnych
chwilach czasowych są wysyłane do wszystkich układów komputera, aby
umożliwić tam wykonanie odpowiednich operacji składających się na wykonanie
rozkazu „move”.
Część tych sygnałów jest wysyłana z powrotem do układu zegarowego, aby
wytwarzał sygnały „Taktowanie” odpowiednie dla rozkazu „move”.
Move 4
Move
4
Taktowanie
Dekoder
RR
Selektor
LR
1
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
4
[RR (Adres)] → RBA
Następuje obecnie przesłanie zawartości pola adresowego „Adres” rejestru
rozkazów RR do rejestru buforowego adresu pamięci RBA. Liczba binarna 4
znajdzie się w RBA aby posłużyć w następnym takcie czasowym do wybrania
komórki pamięci dla odczytu określonego w rozkazie „move”.
Przy przesłaniu zawartości pola „Adres” z rejestru RR następuje wykorzystanie
tylko części linii wewnętrznej szyny danych.
Na wyjściu z wewnętrznej szyny danych do zespołu rejestrów znajduje się układ
Selektor, który otwiera drogę do potrzebnego rejestru, w tym przypadku rejestru
RBA.
Operacją sterują odpowiednie sygnały z Generatora sygnałów sterujących.
W przypadku np. rozkazu „jump” lub „call” układ Selektor otworzyłby drogę z
pola „Adres” rejestru RR do licznika rozkazów LR.
10
Move
4
Taktowanie
Dekoder
RR
Selektor
LR
1
0
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
4
Operacja [P (RBA)] → RBD
Nastepuje taraz odczyt z pamięci słowa o adresie 4 wskazanym przez rejestr
buforowy adresu RBA i wpisanie tego słowa do rejestru buforowego danych
pamięci RBD.
Generator sygnałów sterujących wysyła do pamięci sygnał „odczyt pamięci” oraz
sygnał otwierający zewnętrzną szynę danych do rejestru RBD.
W ten sposób dana binarna 10 znajdzie się w rejestrze RBD.
10
Move
4
Taktowanie
Dekoder
RR
Selektor
LR
1
10
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
0
Operacja [RBD] → A
Następna operacja to przesłanie poprzez wewnetrzną szynę danych zawartości
rejestru RBD do rejestru akumulatora A. Ta operacja kończy wykonanie rozkazu
„move 4”.
Generator sygnałów sterujących wyśle teraz sygnały sterujące, które spowodują
pobranie do rejestru rozkazów RR następnego rozkazu do wykonania.
Jest to rozkaz „add 5”. Jego adres 1 czeka już w liczniku rozkazów LR.
Pobranie składać się będzie z takich samych operacji jak pobranie rozkazu „move
4” ale dotyczyć będzie innego adresu pobranego z licznika rozkazów LR.
Operacje te są następujące:
[LR] → RBA
[LR] + 1 → LR
[P (RBA)] → RBD
[RBD] → RR
Po odczycie z pamięci rozkaz „add 5” znajdzie się w rejestrze rozkazów RR.
Pole „Kod operacji” rozkazu „add 5” zawiera więc kod binarny „add”
Pole „Adres” zawiera liczbę binarną 5.
Jednocześnie w liczniku rozkazów LR mamy adres następnego rozkazu do
wykonania, liczbę binarną 2.
Wykonanie rozkazu „add 5”
Pomijamy rysunek przedstawiający otwarcie dekodera na dekodowanie części
operacyjnej rozkazu „add 5”.
Rozkaz „add 5” ma dodać zawartość rejestru akumulatora do zawartości komórki
pamięci o adresie 5 i zapisać wynik w akumulatorze.
Add 5
Add
5
Taktowanie
Dekoder
RR
Selektor
2
LR
10
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
5
Operacja [RR(Adres)] → RBA
Rysunek przedstawia pierwszą po zdekodowaniu rozkazu operację, która składa się
na wykonanie „add 5”. Jest to przesłanie adresu 5 z pola „Adres” rejestru rozkazów
RR do rejestru buforowego adresu RBA.
20
Add
5
Taktowanie
Dekoder
RR
Selektor
LR
2
10
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
5
Operacja [P(5)] → RBD
Kolejna operacja to odczyt słowa pamięci spod adresu 5 do rejestru buforowego
danych RBD przez zewnętrzną .szynę danych. Generator sygnałów sterujących
generuje sygnał „odczyt pamięci” i otwiera wyjście z pamięci na szynę i wyjście z
szyny do rejestru RBD. RBD zawiera po tej operacji dana binarną 20.
20
Add
5
Taktowanie
Dekoder
RR
Selektor
LR
2
10
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
5
Operacja {[A], [RBD]} → ALU
Następuje teraz dodanie danych w jednostce arytmetyczno-logicznej ALU.
Zauważmy, że akumulator zawiera daną 10 pobrana w poprzednim rozkazie.
Generator sygnałów sterujących wysyła sygnały, które otwierają wyjście z rejestru
A oraz wyjście z RBD na wewnętrzną szynę danych i wejścia ALU. Sygnały te
trwają tak długo, jak długo trwa operacja dodawania w sumatorze ALU.
20
Add
5
Taktowanie
Dekoder
RR
Selektor
LR
2
30
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
5
Operacja [ALU] → A i wpisanie warunków
Gdy wynik dodawania jest gotowy, następuje zamknięcie dostępu do wejść ALU
ze strony wyjścia z rejestru A i wewnętrznej szyny danych oraz zamknięcie wyjścia
z rejestru RBD na wewnętrzną szynę danych.
W tej samej chwili następuje otwarcie wyjścia ALU na wewnętrzną szynę danych i
wejścia z tej szyny do rejestru akumulatora A.
Otwarcie wejścia do A trwa tylko tak długo jak to jest potrzebne do zapisania w
nim wyniku z ALU.
Wynik z ALU utrzymuje się jeszcze stabilnie przez ten czas, ze względu na
opóźnienie reakcji ALU na stan swoich wejść spowodowane propagacją sygnałów
w układach logicznych.
Jednocześnie z wpisaniem wyniku z ALU do A, zostają wpisane wyniki testów
wyniku ALU do rejestru warunków - Warunki. Ta operacja kończy wykonanie
rozkazu „add 5”.
Przed pobraniem następnego rozkazu, bit „Nadmiar ALU” rejestru warunków jest
analizowany w Generatorze sygnałów sterujących.
• Jeśli wystąpił nadmiar ALU, wykonywanie programu jest przerywane i
pobierany jest rozkaz programu obsługi przerwania wewnętrznego (wyjątku),
który sygnalizuje użytkownikowi błąd arytmetyczny. Generator sygnałów
sterujących emituje niezbędne dla tego sygnały sterujące.
• Jeśli nadmiar ALU nie wystąpił, następuje pobranie następnego rozkazu naszego
programu. Jest to rozkaz „store 6” zapisany w pamięci pod adresem 2. Pobranie
zostaje dokonane w znany już nam sposób, zgodnie z zawartością licznika
rozkazów LR równą 2.
Wykonanie rozkazu „store 6”
Podobnie jak przy poprzednim rozkazie nie rysujemy rysunku dekodowania
rozkazu.
Po pobraniu rozkazu pole „kod operacji rejestru RR zawiera kod „store” a pole
„Adres” RR zawiera liczbę 6.
Rozkaz „store 6” ma zapisać do komórki pamięci o adresie 6 zawartość rejestru
akumulatora A.
Store 6
Store
6
Taktowanie
Dekoder
RR
Selektor
LR
3
30
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
6
Operacja [RR (Adres)] → RBA
Pierwszą operacją po zdekodowaniu rozkazu jest przesłanie zawartości pola
„Adres” rejestru RR do rejestru buforowego adresu RBA. W ten sposób adres
binarny 6 potrzebny dla wykonania rozkazu „store” znajdzie się w RBA.
30
Store
6
Taktowanie
Dekoder
RR
Selektor
LR
2
30
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
0
Sterowanie
pamięcią
6
Operacja [A] → RBD
Następna operacja jest przesłanie zawartości rejestru A do rejestru buforowego
danych RBD, aby można było wyprowadzić te zawartość na zewnętrzna szynę
danych wiodąca do pamięci operacyjnej. W ten sposób liczba 30 znajdzie się w
RBD.
30
Store
6
Taktowanie
Dekoder
RR
Selektor
LR
2
30
A
RBD
ALU
±1
Generator
sygnałów
Warunki
RBA
Nr komórki
0
1
2
3
4
5
6
Dekoder
adresu
Zawartość
move 4
add 5
store 6
stop
10
20
30
Sterowanie
pamięcią
6
Operacja [RBD] → P (RBA)
Ostatnią operacją składową rozkazu „store 6” jest zapis danej 30 z rejestru
buforowego danych do komórki pamięci o adresie 6 wskazywanej przez zawartość
rejestru RBA.
Generator sygnałów sterujących podaje do układu sterowania pamięcią sygnał
„zapisz pamięć” oraz otwiera drogi (szynę adresową i danych) dla przesłania
adresu z rejestru RBA oraz danych z rejestru RBD.

Podobne dokumenty