Procesor i język maszynowy - wprowadzenie

Z Otwarta edukacja
Przejdź do nawigacji Przejdź do wyszukiwania

Informacje o module:

  • Poziom: Podstawowy
  • Profil: Dla techników i inżynierów


Struktura komputera

W sklepach z zabawkami można dostać skarbonki w kształcie zwierzęcia, które po wrzuceniu monety w otwór na głowie zamyka usta, jakby coś połykało. W działaniu takiej skarbonki można wyróżnić kilka operacji: wrzucona moneta naciska na przedłużenie szczęki (1), szczęka zamyka się i moneta spada (2), szczęka otwiera się i skarbonka wraca do punktu początkowego (0). Zauważmy, że aby scharakteryzować działanie skarbonki, wystarczy opisać ją w pewnych wybranych momentach czasu. Opis taki nazywamy stanem urządzenia. W naszym przypadku możemy wyróżnić stany: podstawowy (0), wrzucona moneta (1), zamknięta szczęka (2). Samo działanie poza tymi wybranymi momentami nas nie interesuje - w takim opisie czas zmienia się skokowo (mówimy, że czas ma charakter dyskretny). Jest to oczywiście pewne uproszczenie, ale pozwala na dokonanie opisu w sposób bardzo ścisły.

Komputer jest urządzeniem posiadającym pamięć

Pamięcią nazwiemy urządzenie, którego stan w kolejnych momentach czasu możemy odczytać. Przykładem tak rozumianej pamięci może być zwykły notes. Możemy przeglądając go odczytać umieszczone tam zapiski. Zapiski te stanowią stan notesu. Tego typu pamięć ma jednak pewną wadę - zapis nie daje się łatwo zmieniać i nie może to być wykonane automatycznie. Pamięć komputera poza możliwością zmiany stanu musi charakteryzować się możliwością łatwego określenia zasad tych zmian tak, aby mogło to odbywać się automatycznie. Sposób automatycznej zmiany stanu można określić podając dla każdego stanu stan następny (po zmianie).

Pamięć prawdziwych komputerów składa się z bardzo prostych elementów elektronicznych. Mogą się one znajdować w jednym z dwóch stanów: 0 lub 1. Stan jest reprezentowany przez wysokość napięcia (wysokie napięcie = 1, niskie = 0). Elementów takich jest za to bardzo dużo. Wielkość pamięci mierzy się w bitach (jeden element dwustanowy = 1 bit). Osiem bitów nazywa się bajtem. 1024 bajty to kilobajt (kB), a 1024 kilobajty to 1 megabajt (MB). Obecnie komputery mają przeważnie 8, 16, 32, 64 lub 128 MB pamięci.

Procesor dokonuje zmian stanu pamięci

Oczywiście zmiany pamięci nie wykonują się same z siebie. Potrzebny jest element który w sposób automatyczny wykona je zgodnie z instrukcjami. Po to właśnie komputer wyposażony jest w procesor, dokonujący zmian pamięci (stanu) w kolejnych momentach czasu.

Pamiec procesor.png

Procesor jest układem elektronicznym przetwarzającym sygnały odczytane z pamięci. W jednym momencie odczytuje stan pamięci i oblicza stan następny. W następnym momencie zmienia się stan pamięci na wypracowany przez procesor.

Kolejne chwile czasu (w których następuje zmiana stanu) wyznacza generator sygnałów elektrycznych zwany zegarem. Częstotliwość generowanego sygnału jest podstawowym parametrem określającym szybkość komputera (mówimy że procesor działa z szybkością 100MHz, 200MHz, itd..)


Teoretycznie rzecz biorąc następny stan pamięci zależy od stanu aktualnego całej pamięci. Jak wspomnieliśmy jednak, pamięć komputera jest bardzo duża. Dla uproszczenia konstrukcji procesory wykonuje się więc w ten sposób, że mogą one odczytywać i zmieniać jedynie mały fragment pamięci. Nie ma to większego wpływu na funkcjonalność komputera (zamiast zmienić stan wszystkich elementów równocześnie, zmienia się je po kolei). Sytuację tą można porównać do poruszania się w układzie współrzędnych tylko wzdłuż osi układu. W jednym kroku zmienia się tylko jedna współrzędna, ale nie ogranicza to zasięgu naszego ruchu (dla takich modeli często mówi się o przestrzeni stanów).

Procesor - serce komputera

Cykl działania procesora można więc określić w sposób następujący:

  1. . Odczyt fragmentu pamięci (komórki, słowa).
  2. . Wykonanie operacji (+wyznaczenie następnego stanu tego fragmentu pamięci).
  3. . Zapis nowych wartości do pamięci.
  4. . Wyznaczenie nowego fragmentu pamięci do pobrania.

Poszczególne operacje są wykonywane w takt zegara komputera. Każdy z powyższych punktów może być wykonywany w kilku taktach, ale teoretycznie możliwe jest wykonanie jednego cyklu tylko w dwóch taktach (punkty 2,3 i 4 mogą być wykonane w jednym kroku). Zależy to od budowy procesora.

Jednym z najistotniejszych pomysłów na jakie wpadli konstruktorzy komputera jest zapis instrukcji dla procesora w pamięci komputera. Aby procesor mógł sam odczytywać rozkazy (instrukcje) z pamięci i efektywnie działać zgodnie z przedstawionym powyżej schematem trzeba było przyjąć kilka dodatkowych założeń:

  1. . Wszystkie instrukcje otrzymują swoje kody (załóżmy, że wszystkie informacje zapisane w pamięci są liczbami). Wraz z niektórymi z tych kodów są pamiętane parametry instrukcji (zob. przykład poniżej).
  1. . Wszystkie komórki pamięci zostają ponumerowane (0,1,2,...). Mówimy, że komórki są adresowane.
  1. . Wydziela się fragmenty pamięci w których będą pamiętane:*
  • wynik ostatniej instrukcji (rozkazu)
  • kod wykonywanej instrukcji
  • numer komórki (adres) zawierającej kod kolejnego rozkazu do wykonania


Te fragmenty pamięci nazywamy rejestrami. Rejestry zazwyczaj stanowią część procesora i nie są adresowane tak jak reszta pamięci. W konkretnych realizacjach procesorów ilość rejestrów jest większa (zazwyczaj jednak nie więcej niż 10). Ta wewnętrzna złożoność procesora jest jedną z przyczyn, dla których pewne operacje wymagają więcej niż dwóch taktów zegara.

Projektujemy procesor

Budowę procesora najlepiej pokazać na przykładzie. W tym celu zaprojektujemy prosty, przykładowy procesor. Przyjmujemy, że procesor zawiera rejestry:

  • akumulator - wynik operacji
  • licznik - adres kolejnej operacji


Dodatkowo mamy rejestry pomocnicze, które są używane przez procesor do przechowywania aktualnie wykonywanej instrukcji:

  • instrukcji - kod pobranego rozkazu
  • parametru - parametr operacji


Każda instrukcja zajmuje w pamięci dwa bajty (kod + parametr). Po pobraniu kodu rozkazu lub parametru licznik automatycznie zwiększa się o jeden (czyli wskazuje na następny rozkaz).


Procesor.png

Procesor działa powtarzając trzy operacje (każdy rozkaz jest wykonywany w czasie trzech taktów zegara):

1. pobranie kodu instrukcji (z miejsca wskazanego przez licznik, zwiększa się o 1)

2. pobranie parametru (z miejsca wskazanego przez licznik, zwiększa się o 1)

3. wykonanie operacji

tak długo, aż napotka rozkaz STOP.


Nasz procesor wykonuje następujące instrukcje:


nazwa kod parametr opis
POBIERZ 1 adres danej przepisuje zawartość wskazanej komórki pamięci do akumulatora
APOBIERZ 2 adres pamięci przepisz do akumulatora zawartość komórki o adresie wskazanym przez adres pamięci
WPISZ 3 adres danej zapisuje zawartość akumulatora do wskazanej komórki pamięci
DODAJ 4 adres danej dodaje zawartość wskazanej komórki do zawartości akumulatora
USTAW 5 liczba ustaw zawartość akumulatora na liczba
SKOCZ_DO 6 adres wpisz adres do licznika
ZERO 7 adres gdy akumulator zawiera zero, wpisz adres do licznika
STOP 0 0 zatrzymaj

Spróbujmy napisać prosty program. Przyjmiemy, że adresy rozkazów zaczynają się od 0, a adresy danych od 100. Pierwsza komórka pamięci (adres 100) zawiera ilość liczb do zsumowania, druga będzie zawierać wynik, a trzecia będzie używana przez nas do adresowania. Następne zawierają liczby do zsumowania.

Program w postaci symbolicznej będzie wyglądał następująco:

0: USTAW LICZBY ; adres liczb do zsumowania

2: WPISZ ADRES ; ustawienie komórki wskazującej sumowaną liczbę

4: USTAW 0 ; zerowanie

6: WPISZ WYNIK ; zapisanie wyniku

8:A: POBIERZ ILOSC ; ilość liczb do zsumowania

10: ZERO K ; nie ma już liczb do zsumowania

12: DODAJ -1 ; zmniejsz ilość

14: WPISZ ILOSC ; zapisz nową ilość

16: APOBIERZ ADRES ; pobranie kolejnej liczby

18: DODAJ WYNIK ; dodanie dotychczasowej sumy

20: WPISZ WYNIK ; zapis wyniku

22: POBIERZ ADRES ; pobranie adresu

24: DODAJ 1 ; zwiększenie o 1

26: WPISZ ADRES ; zapisanie nowego adresu

28: SKOCZ_DO A ; powtórzenie dla następnej liczby

30:K: STOP

W powyższym zapisie mamy pięć kolumn:

  • adres w pamięci (z dwukropkiem)
  • opcjonalni: symboliczny zapis adresu (też z dwukropkiem)
  • kod instrukcji
  • parametr
  • komentarz (po średniku)


Zamiast pisać kody instrukcji i adresy użyliśmy symboli. Podobnie zostały przedstawione adresy instrukcji (A, K).

Wartość symboli:

LICZBY = 103

ADRES = 102

WYNIK = 101

ILOSC = 100

A = 8

K = 30

Początek pamięci wygląda następująco (na początku wiersza podano adres pierwszej z komórek):

0: 5; 103; 3; 102; 5; 0; 3;101;1; 100;

10: 7; 30;4; -1; 3;100;2;102;4;101;

20: 3;101;22:1;102;4;1;3;102;6;8;0

Dla ćwiczenia spróbuj zamienić kody symbolami i porównaj z podanym wcześniej zapisem.

Spróbuj określić zawartość komórek o adresie powyżej 100 i prześledzić jak będą się one zmieniały wraz z wykonywaniem programu.