Podstawy architektury komputera
Układ mikroprocesorowy i specjalizowany układ cyfrowy
Układy cyfrowe służą do przetwarzania informacji. Przetwarzanie polega na dostarczeniu do układu danych, które są poddawane działaniom dzięki którym otrzymujemy wyniki. Wynikami mogą być przykładowo sygnały sterujące pracą urządzeń, obrazy, teksty itp.
Przetwarzanie może się odbywać na dwa sposoby:
Poprzez układ realizujący określone (wyspecjalizowane) zadanie. Sposób będzie zależał od użytych układów, połączeń czyli generalnie od sprzętu(hardware)
dane wyniki
Z zastosowaniem układu mikroprocesorowego, w skład którego wchodzi także układ przetwarzający informacje czyli procesor. Procesor wykonuje operacje zwane instrukcjami lub rozkazami. Do systemu mikroprocesorowego musimy więc dostarczyć oprócz danych wejściowych także program (software). W ststemach mikroprocesorowych sposób przetwarzania informacji jest okreslany głównie przez oprogramowanie, co ułatwia w razie potrzeby zmianę sposobu przetwarzania informacji.
dane wynik
program
Schemat blokowy układu mikroprocesorowego
Zadaniem CPU oprócz przetwarzania informacji jest sterowanie praca pozostałych układów systemu. W skład CPU wchodzą : mikroprocesor i zegar oraz sterownik magistral. Mikroprocesor jest układem przetwarzającym informację i sterującym pracą reszty układów. Zegar systemowy wytwarza przebiegi czasowe niezbędne do pracy mikroprocesora i systemu. Sterownik magistral jest układem który posredniczy w sterowaniu magistralami wytwarzając sygnały na podstawie informacji otrzymanych z mikroprocesora.
Każde działanie wykonywane przez system mikroprocesorowy czyli np. komputer jest wynikiem realizacji okreslonego programu
Program musi być przechowywany w miejscu z którego mikroprocesor będzie mógł szybko odczytywac kolejne instrukcje przeznaczone do wykonania. Nie nadają się więc do tego celu pamięci masowe a jedynie pamięci półprzewodnikowe.
W bloku pamięci systemu stosowane są zarówno pamięci RAM jak i ROM. W pamięci RAM (pamięć operacyjna) przechowywane są kody instrukcji tworzących program, dane oraz wyniki działania programu.
Ponieważ RAM jest pamięcią ulotną i po włączeniu nie zawiera żadnych użytecznych informacji, aby więc system rozpoczął pracę musi istnieć program inicjujący umieszczony w pamięci nieulotnej. Takim programem jest BIOS (basic input output system) umieszcony w pamięci ROM.
Ostatnim niezbędnym blokiem systemu są tzw.układy wejścia-wyjścia. Posredniczą one w wymianie informacji pomiędzy mikroprocesorem i pamięcią a urzadzeniami zewnętzrnymi np. dysk twardy, napędy, drukarka zwanymi urzadzeniami peryferyjnymi. Potrzeba posredniczenia może wynikać np. z konieczności translacji sygnałów czy dostosowania szybkości pracy urządzenia do pracy systemu.
Wszystkie omówione bloki komunikują się z sobą używając wspólnych dróg zwanych magistralami. W systemie występują trzy rodzaje magistral:
magistrala danych
magistrala adresowa
magistrala sterująca
Magistralą danych przesyłane są dane do systemy , wyniki wykonanych działań oraz kody instrukcji(rozkazy). Jest ona magistralą dwukierunkową tzn. informacjie mogą wpływać do syatemu(np. dane, rozkazy) lub wypływać (np. wynik)
Magistralą adresową przesyłane są adresy komórek układu pamięci lub układów wejścia-wyjścia.
Magistrala sterująca jest zestawem linii sterujących pracą układów współpracujących z procesorem lub sygnalizacji określonych stanów(np. przepełnienia).
Zasada działania mikroprocesora
1. Schemat blokowy
Podział układów mikroprocesora na jednostkę wykonawczą i jednostkę sterującą wynika logicznie z zadań jakie pełni mikroprocesor.
Zadaniem jednostki wykonawczej EU (execution unit) jest przetwarzanie informacji czyli wykonywanie operacji arytmetycznych i logicznych. Rodzaj wykonywanych operacji zależy od wewnętrznych sygnałów sterujących wytwarzanych przez jednostkę sterującą CU.
W skład jednostki wykonawczej wchodzi jednostka arytmetyczno-logiczna ALU oraz zestaw współpracujących z nią rejestrów.
Informacją wejściową części wykonawczej są dane zaś wyjściową są wyniki.
W skład jednostki sterującej wchodza rejestr rozkazów IR, dekoder rozkazów i układ sterowania. W rejestrze rozkazów przechowywany jest kod aktualnie wykonywanego rozkazu. Kody rozkazu pobierane są do rejestru rozkazów z pamięci. Ciąg rozkazów tworzy program wykonywany przez system.
Po pobraniu z pamięci kod rozkazu jest dekodowany w dekoderze rozkazów jest więc okreslane jakiego rodzaju kod znajduje się w dekoderze rozkazów. Na tej podstawie układ sterowania wytwarza wewnetrzne lub/i zewnętrzne sygnały sterujące realizujące dany rozkaz.
Rejestry procesora dostępne programowo
Zgodnie ze schematem blokowym zarówno jednostka arytmetyczno logiczna jak i układ sterowania współpracują z okreslonym zestawem rejestrów. Zawartość części rejstrów może być zmieniana w wyniku wykonania przez procesor odpowiedniej instrukcji. Rejestry te nazywane są rejestrami dostępnymi programowo. Pozostałe rejestry są niedostępne dla użytkownika i ich zestaw nie jest zwykle znany
A |
F |
B |
C |
D |
E |
H |
L |
PC |
|
SP |
A- akumlator
B, C, D, E, H, L - rejestry robocze
SP- wskaźnik stosu
F - rejestr znaczników (flagowy)
PC - licznik rozkazów
Akumlator - rejestr który zawiera jeden z argumentów wykonywanej operacji (operand) , do
tego rejestru ładowany jest również wynik
Rejestr flagowy - rejestr zawierający dodatkowe cechy wyniku operacji np. znak wyniku,
przekroczenie zakresu .Wystąpienie określonej cechy sygnalizowane jest
ustawieniem lub wyzerowaniem określonego bitu. Ustawiane bity nazywane są znacznikami lub flagami. Podstawowe flagi to:
CY- przekroczenie zakresu długości słowa
ZF- ostatnim wynikiem było zero
S - ostatnim wynikiem była jedynka
OV-przekroczenie zakresu dla operacji arytmetycznej
Licznik rozkazów - jest to jeden z istotniejszych rejestrów, oznaczany również jako
IP(instruction pointer - wskaźnik instrukcji). Zawiera on adres komórki pamięci w której przechowywany jest kod rozkazu przeznaczonego do wykonania jako następny. Zawartość tego licznika musi być więc zmieniana po wczytaniu rozkazu tak aby przy następnym wywołaniu wskazał kolejny rozkaz. Jeśli rozkazy wykonywane są kolejno to stan tego licznika będzie wzrastał za każdym razem o jeden - pobierany będzie kod z komórki o numerze większym o jeden.
Wskaźnik stosu - to rejestr zawierający adres ostatniej zapełnionej komórki stosu.
Sam stos jest rodzajem pamięci oznaczonej LIFO (last in first out -ostatni wchodzi pierwszy wychodzi). Odczyt ze stosu odbywa się od ostatniego wprowadzonego adresu(tak jak stos talerzy).
Wierzchołek stosu to adres ostatniej zapełnionej komórki stosu
Stos można budować w kierunku rosnących adresów lub w kierunku malejących adresów. Przy założeniu narastania stosu w kierunku adresów rosnących każdy zapis na stos zwiększa zawartość wskaźnika stosu a każdy odczyt zmniejsza jego zawartość. Dzięki temu wskaźnik stosu wskazuje zawsze na ostatnią zapełnioną komórkę stosu.
Rejestry robocze - mają ogólne przeznaczenie tzn. mogą przechowywać argumenty
wykonywanych operacji, wyniki czy też adresy, mogą też być np. licznikami pętli. Ich zastosowanie zależy od projektanta mikroprocesora
Cykl rozkazowy
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 wczytania ich do układu sterowania mikroprocesora a następnie realizacji rozkazu, którego kod został pobrany. W cyklu można wyróżnić dwie fazy: fazę pobrania i fazę wykonania.
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 IR znajdującym się w układzie sterowania mikroprocesora. Kod ten jest przesyłany 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.
Faza wykonania polega na zdekodowaniu kodu rozkazu znajdującego się w rejestrze IR czyli stwierdzeniu jaki to rozkaz. Po zdekodowaniu kodu rozkazu układ sterowania wytwarza wewnętrzne i/lub zewnętrzne sygnały sterujące realizujący dany rozkaz
Etapy realizacji fazy pobrania i fazy wykonania:
Faza pobrania:
adresowanie - podanie zawartości licznika na magistralę adresową AB PC
wczytanie zawartości zaadresowanej komórki pamięci do rejestru rozkazów mikroprocesora IR M(PC)
zwiększenie zawartości licznika rozkazów (PC) (PC)+1
Faza wykonania
|
zdekodowanie kodu rozkazu i wytworzenie sygnałów sterujących realizujących dany rozkaz
μ P - mikroprocesor
MEM
MEM- pamięć
AB - adres
DB - kod rozkazu
(magistrala danych)
W przypadku rozkazów zajmujących kilka komórek pamięci etapy 1- 3 musza być kilkakrotnie powtórzone zanim system przejdzie do wykonania rozkazu.
Realizacja wszystkich wymienionych etapów wykonania rozkazu tworzy określony cykl zwany cyklem von Neumana.
W cyklu rozkazowym następują po sobie na przemian faza pobrania i faza wykonania. W celu przyspieszenia pracy systemu stosuje się modyfikację tego cyklu zwaną prefetchingiem
czyli wstępnym pobraniem instrukcji. Polega ona na równoległym wykonywaniu fazy pobrania następnego rozkazu jeszcze w trakcie wykonania rozkazu poprzedniego. Rozwinięciem idei prefetchingu jest praca potokowa.
Lista rozkazów, tryby adresowania
Komputer będący systemem mikroprocesorowym przetwarza informacje zgodnie z wykonywanym programem, czyli ciągiem instrukcji realizujących 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 mikroprocesora.
Rozkaz jest więc najprostszą operacją której wykonania żąda programista od procesora
Tworzenie programów bezpośrednio przy pomocy rozkazów nazywane jest programowaniem w asemblerze. Asembler jest językiem niskiego poziomu tzn kod z asemblera jest tłumaczony już bezpośrednio na kod maszynowy. Programowanie w asemblerze jest żmudne i nie nadaje się do tworzenia rozbudowanych programów.
Dlatego stosuje się języki wysokiego poziomu np. Pascal, C++. W językach tych jednej instrukcji odpowiada wiele instrukcji maszynowych czyli rozkazów. Tłumaczeniem programów wyższych poziomów na rozkazy maszynowe zajmuje się specjalny program zwany kompilatorem .
Dodatkowo w przypadku błędów programu można posłużyć się specjalnym narzędziem (programem)-debuggerem. Pod windows najczęściej stosowany jest Lahey Fortran, uniwersalnym debuggerem jest GDB. Debuggery są często wbudowane w języki programowania i działają razem z kompilatorami(g++ w języku C++). Programy testujące w debuggerze piszę się tą samą składnią co w języku dla którego jest przeznaczony.
Zestaw instrukcji maszynowych jakie potrafi wykonać dany procesor nazywa się listą rozkazów
Rozkazy możemy podzielić na kilka podstawowych grup:
Rozkazy przesłań
Rozkazy arytmetyczne i logiczne
Rozkazy sterujące(skoki, wywołania podprogramów)
Inne (np. rozkazy testujące)
Najczęściej wykonywane są rozkazy przesłań, wykonywanych na argumentach, stosie lub jako instrukcje wejścia wyjścia.
Rozkazy arytmetyczne służą do przetwarzania informacji, w wyniku wykonania operacji jest ona zmieniona.
Rozkazy sterujące pozwalają wykonać instrukcje skoku, wywołania podprogramów czy pętli.
Rozkazy przechowywane są w postaci kodów binarnych. Sposób rozmieszczenia informacji w kodzie rozkazu nazywa się formatem rozkazu.
Kod rozkazu musi zawierać określenie rodzaju wykonywanej operacji - tzw. kod operacji. Kod ten musi być określony w początkowej części kodu rozkazu w celu określenia jak ma przebiegać dalsza realizacja rozkazu.
Kod może zawierać operendy i adresy operendów jeśli one występują oraz adresy wyników. W przypadku używania argumentów informacja ta musi być zawarta w rozkazie.
Tryb adresowania jest to sposób określenia miejsca przechowywania argumentów rozkazu.
Argumenty rozkazu mogą być przechowywane w rejestrach, w pamięci lub w kodzie rozkazu.
Przy adresowaniu natychmiastowym argument rozkazu zawarty jest w kodzie rozkazu
Kod rozkazu
Przy adresowaniu bezpośrednim kod rozkazu zawiera adres komórki pamięci w której przechowywany jest rozkaz
Kod rozkazu
MEM
Przy adresowaniu rejestrowym w kodzie rozkazu określony jest rejestr w którym przechowywany jest argument.
Kod rozkazu
Rejestr
Przy adresowaniu pośrednim kod rozkazu zawiera określenie rejestru bądź rejestrów w których znajduje się adres komórki pamięci zawierającej argument
Kod rozkazu MEM
Rejestr
Przy adresowaniu indeksowym z przemieszczeniem adres argumentu przechowywanego w pamięci obliczany jest jako suma zawartości rejestru określonego w kodzie rozkazu i wartości umieszczonej w kodzie rozkazu zwanej przemieszczeniem.
Kod rozkazu MEM
Rejestr
Sposób prezentowania rozkazów
Lista rozkazów procesora powinna zawierać następujące informacje:
Oznaczenie symboliczne rozkazu, które składa się z mnemonika i pola argumentów . Oznaczenie takiestosuje się dla ułatwienia zrozumienia tresci programu. Zapis binarny czy heksadecymalny byłby nieczytelny.
Przykładowy rozkaz o symbolicznym znaczeniu (asembler)
Przykład 1
JMP SHORT etykieta
EB 03h JMP SHORT NEXT 000
001
mnemonik 010
argument 011
Kod rozkazu NEXT 100
w zapisie
heksadecymalnym 101
ten rozkaz zostanie wykonany
jako następny
Mnemonik jest pewnym skrótem używanym w asemblerze który powinien sugerować rodzaj operacji wykonywanej przez rozkaz. Można go traktować jako nazwę rozkazu. Mnemoniki pochodzą od słów angielskich, podany tu mnemonik JMP jest skrótem od jump - skacz do i oznacza skok do kodu oznaczonego przez argument.
Opis słowny rozkazu
Opis słowny wygląda następująco:
Wykonaj skok i pobierz kod rozkazu z komórki pamięci o adresie równym etykieta (w podanym przykładzie jest to adres NEXT =100) Słowo SHORT oznacza skok bliski w zakresie od 127 bajtów w górę do 128 bajtów w dół(wartość takiego skoku można zapisać w postaci jednego bajtu - kod U2)
Format rozkazu
W przypadku rozkazu JMP SHORT etykieta jest on następujący:
Kod operacji
Kod
rozkazu
Argument
Format rozkazu oprócz sposobu rozmieszcenie informacji w kodzie mówi też o długości kodu rozkazu - w naszym przypadku jest on dwubajtowy(jeden bajt kodu operacji i jeden bajt argumentu)
Ustawienie flagi
Flaga a w zasadzie rejestr flagowy zawiera dodatkowe cechy wyniku operacji. Może to być np. znak wyniku czy przekroczenie zakresu. Zastosowanie rejestrów flagowych jest zależne od konstruktora całego układu (do jakich przypadków przewidział ustawianie flag).
Przy standartowych zastosowaniach rejesrtu flagowego w naszym przypadku flagi nie byłyby ustawiane.
Przykład 2
ADC - instrukcja ADC sumuje dwie liczby umieszczone we wskazanych miejscach oraz bit CY (bit przeniesienia - patrz sumatory cyfrowe ). Jest to instrukcja arytmetyczna.
ADC ax, bx
do liczby umieszczonej w ax dodaj liczbę umieszczoną w ba oraz bit CF. Wynik umieści w ax.
W związku z wykonywaniem operacji arytmetycznych ustawione zostaną wszystkie flagi
Często stosowanym mnemonikiem jest MOV - przesyłanie danych pomiędzy dwoma miejscami, przy czym obydwa argumenty muszą być tego samego rozmiaru.
Specjalizowany układ cyfrowy
System mikroprocesorowy
PC
μ P
IR
Kod rozkazu
Kod rozkazu
Kod rozkazu
Kod operacji
argument
Kod operacji
adres
argument
Kod operacji
Określenie rejestru
argument
Kod operacji
adres
Określenie rejestru
argument
Kod operacji
wartość
Określenie rejestru
argument
przemieszczenie
∑
11101011
00000011
Kolejny rozkaz
11101011
przemieszczenie