LISTY ROZKAZÓW: WŁASNOŚCI I FUNKCJE



WŁASNOŚCI ROZKAZÓW MASZYNOWYCH


rozkazy maszynowe (komputerowe) – rozkazy wykonywane przez procesor

lista rozkazów – zbiór rozkazów, które może wykonać dany procesor


Elementy rozkazu maszynowego:

a) kod operacji – w kodzie binarnym, określa operację jaka ma zostać wykonana

b) odniesienie do argumentów źródłowych – odniesienie do argumentów, danych wejściowych

c) odniesienie do wyniku – operacja często zwraca wynik

d) odniesienie do następnego rozkazu – wskazuje jaki rozkaz ma wykonać następny, często jest to kolejny rozkaz po prostu


Rozkazy do wykonania umieszczane są w pamięci głównej lub dyskowej. Jeżeli nie ma jawnego odniesienia do następnego rozkazu wykonywane są one po kolei. Jeżeli ma być wykonany inny rozkaz niż wynika z kolejności, to trzeba podać jego adres.


Argumenty źródłowe i wyniki mogą znajdować się w:

a) pamięć główna lub wirtualna – podaje się adres tego fragmentu pamięci

b) rejestr procesora – podaje się identyfikator rejestru

c) urządzenie wejścia/wyjścia – podaje się moduł i urządzenie we/wy



REPREZENTACJA ROZKAZU:


- każdy rozkaz reprezentowany jest za pomocą ciągu bitów (format IAS)

- rozkaz jest dzielony na pola odpowiadające polom składowym rozkazu

- rozkaz podczas wykonywania jest wczytywany do rejestru rozkazów (IR) w procesorze

- zamiast kodu binarnego często używa się symboli czytelnych dla człowieka (ADD, MULTIPLY ..)


mnemoniki – symbole odpowiadające rozkazom binarnym, czytelne dla człowieka


Na przykład rozkaz „ADD R,Y” może oznaczać dodanie wartości rejestru R do wartości komórki o adresie Y



PODZIAŁ ROZKAZÓW:


Jedno polecenie języka wysokiego poziomu może wywoływać kilka rozkazów maszynowych.


Rozkazy możemy podzielić na takie grupy:

a) przetwarzanie danych – rozkazy arytmetyczne i logiczne (obliczenia na liczbach i bitach)

b) przechowywanie danych – rozkazy pamięciowe (lokowanie i odczytywanie pamięci)

c) ruch danych – rozkazy wejścia/wyjścia (przenoszenie danych do wewnątrz i na zewnątrz)

d) sterowanie – rozkazy testowania i rozgałęzienia (sprawdzanie poprawności, sterowanie rozkazami)


rozkazy pamięciowe – przenoszą dane pomiędzy rejestrami i pamięcią komputera, oraz wyników do użytkownika


akumulator – rejestr procesora w starych komputerach (OC), o ogólnym przeznaczeniu, gdzie domyślnie są zachowywane

wyniki obliczeń, jak np. stos


Liczba adresów w rozkazie:

- jest istotną miarą efektywności i architektury komputerowej

- wraz z używaniem rozkazów o mniejszej liczbie adresów zwiększamy ilość używanych rozkazów

- rozkazy bez adresowe korzystają ze stosu do zapamiętywania danych, domyślne miejsce

- w przypadku rozkazów wieloadresowych korzysta się z wielu rejestrów o ogólnym przeznaczeniu

- odnoszenie się do rejestrów zamiast do obszarów pamięci jest szybsze i efektywniejsze



PROJEKTOWANIE LISTY ROZKAZÓW:


Musimy zaprojektować:

- repertuar operacji

- rodzaje danych

- format rozkazu, długość, ilość pól

- rejestry do których mogą się odwoływać rozkazy

- tryby adresowania pamięci


RODZAJE ARGUMENTÓW:


a) liczby:

- mają ograniczony zakres i dokładność

- typy liczb: całkowite, stałopozycyjne, zmiennopozycyjne, dziesiętne

- reprezentacja liczb dziesiętnych: każda cyfra reprezentowana jest przez cztery bity (np. 1 = 0001 itd.)


b) znaki:

- tak jak teksty przechowywane w postaci binarnej zgodnie z jakimś kodem (np. ASCII)


ANSI – (American National Standards Institute) - stworzył kod ASCII


ASCII (American Standard Code for Information Interchange):

- każdy znak jest reprezentowany przez unikalne 7 bitów,

- znaki przesyła się na 8 bitach (bit parzystości),

- liczby są reprezentowane przez 011XXXX, gdzie XXXX to czterobitowa reprezentacja liczb dziesiętnych


EBCDIC (Extended Binary Coded Decimal Interchange Code) – inny sposób kodowania znaków w systemie binarnym


c) dane logiczne:

- pojedyncze bity, przyjmują wartość 0 lub 1

- dowolną wartość możemy traktować jako jakiś obiekt albo ciąg znaków logicznych


Rodzaje danych w Pentium:

a) bajt (8 bitów)

b) słowo (16 bitów)

c) podwójne słowo (32 bity)

d) poczwórne słowo (64 bity)


Pentium stosuje „styl cienkokońcówkowy”


Styl cienkokońcowy (little-endian) – oznacza, że najmniej znaczący bajt jest przechowywany pod najniższym adresem


Rodzaje danych w PowerPC:

a) bajt (8 bitów)

b) półsłowo (16 bitów)

c) słowo (32 bity)

d) podwójne słowo (64 bity)


PowerPC stosuje zarówno styl cienko jak i grubo-końcówkowy


Styl grubokońcowy (big-endian) – oznacza, że najmniej znaczący bajt jest przechowywany pod najwyższym adresem


IEEE 754 - standard reprezentacji binarnej i operacji na liczbach zmiennoprzecinkowych (IEEE floating-point standard),

implementowany powszechnie w procesorach i oprogramowaniu obliczeniowym.



RODZAJE OPERACJI:


Rozkazy zawierają kod mówiący o tym, jaki rodzaj operacji ze sobą niosą. Mamy takie rodzaje operacji:

- logiczne

- arytmetyczne

- transferu danych

- konwersji

- wejścia/wyjścia

- sterowania systemowego

- przekazywania sterowania


a) transfer danych:

- podajemy co przenosimy, gdzie na jakiej jednostce pamięci itd ...

- czy pracujemy w rejestrze czy w pamięci czy na urządzeniach we/wy

- podajemy tryb użytego adresowania


b) operacje arytmetyczne:

- standardowe operacje matematyczne na liczbach dziesiętnych

- wykonywane w ALU


c) operacje logiczne:

- operacje logiczne: and, or, xor, not, itd.

- przesunięcie bitów


przesunięcie logiczne – z jednej strony bit jest tracony, a z drugiej dopisywane jest zero

przesunięcie arytmetyczne – jeżeli jest w prawo to bit skrajny z lewej jest powielany


d) konwersje:

- konwersje typów danych z jednego na drugi


e) operacje wejścia/wyjścia:

- rozkazów we/wy jest niewiele ale wiele jest rodzajów wywołań i argumentów


f) sterowanie systemowe:

- używane przez sam system operacyjny

- rozkazy te modyfikują lub czytają rejestr sterowania


g) przekazywanie sterowania:

- przekazywanie sterowania programu do innego miejsca jawnie

- rodzaje rozkazów przekazywania sterowania: rozgałęzienie, pominięcie, wywołanie podprogramu


Rozgałęzienie:

- podajemy inny rozkaz do wykonania niżby wynikał z sekwencji rozkazów

- często jest to warunkowe, czyli zależne od spełnienia danego warunku

- przykład rozkazu rozgałęzienia [BRE X,Y,Z] – rozgałęzienie do Z jeżeli (X>Y)


Pominięcie:

- podajemy inny rozkaz do wykonania niżby wynikał z sekwencji rozkazów

- przykład rozkazu rozgałęzienia [ISZ R1] – pomiń następny rozkaz jeżeli (R1==0)


Wywołanie podprogramu:

- wywołanie i uruchomienie podprogramu, a po tym powrót do miejsca wywołania

- adres wywołania podprogramu przechowywany jest w: stosie, rejestrze, początku podprogramu

- przykład rozkazu wywołania podprogramu [CALL Z] – wywołaj podprogram Z




STOSY


stos – to uporządkowany zbiór elementów do których mamy dostęp tylko z jednej strony (wierzchołek stosu), stos jest jednym z

rodzajów list LIFO (Last In – First Out)

długość stosu – to ilość elementów na stosie przechowywanych


Operacja na stosie:

- POP – zdejmowanie ze stosu

- PUSH – wkładanie na stos


Istotne adresy stosu (przechowywane w pamięci procesora):

a) wskaźnik stosu – zawiera adres wierzchołka stosu

b) podstawa stosu – zawiera adres najniższej lokacji stosu

c) granica stosu – zawiera adres najwyższej lokacji zarezerwowanego obszaru pamięci


OBLICZANIE WYRAŻEŃ


notacja wrostkowa – operator binarny występuje pomiędzy argumentami, np. ( 1 + 2 )

notacja przyrostkowa (odwrotna notacja polska) – operator następuje po swoich argumentach, np. ( 1+2x3 ) = ( 123 x + )



TRYBY KOŃCÓWKOWE


a) tryb grubokońcówkowy – od lewej do prawej, najpierw najstarszy bajt

b) tryb cienkokońcówkowy – od prawej do lewej, najpierw najmłodszy bajt



W czym sprawdzają się lepiej od konkurenta:


a) tryb cienkokońcówkowy:

- arytmetyka matematyczna

- konwersja adresów liczb całkowitych


b) tryb grubokońcówkowy:

- sortowanie łańcuchów znaków

- rzutowanie typów danych

- spójny porządek danych w pamięci