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