Lista rozkazów maszynowych
Działanie procesora jest określone przez rozkazy, które on wykonuje.
Rozkazy te są nazywanerozkazami maszynowymi lub rozkazami
komputerowymi. Zbiór różnych rozkazów, które może wykonywać
procesor, jest określany jako lista rozkazów Jednym z obszarów, w
których projektant komputera i jego programista mają wspólny obraz
maszyny, jest lista rozkazów maszynowych. Z punktu widzenia
projektanta, lista rozkazów maszynowych określa wymagania
funkcjonalne w stosunku do procesora: implementacja
procesora jest zadaniem, które w znacznej mierze polega na wdrożeniu
listy rozkazów maszynowych. Z punktu widzenia użytkownika,
tylko ten użytkownik, który wybiera programowanie w języku
maszyny uświadamia sobie strukturę rejestrów i pamięci, rodzaje
danych bezpośrednio obsługiwanych przez maszynę oraz
funkcjonowanie AL
Elementy rozkazu maszynowego
Każdy rozkaz musi zawierać elementy wymagane przez procesor
do jego wykonania.
Elementami tymi są:
Kod operacji. Określa operację, jaka ma być przeprowadzona
(np. ADD, I/O). Operacja jest precyzowana za pomocą kodu
binarnego -kodu operacji. Odniesienie do argumentów źródłowych.
Operacja może obejmować jeden lub wiele argumentów źródłowych;
są one danymi wejściowymi operacji.
Odniesienie do wyniku. Operacja może prowadzić do powstania
wyniku.
Odniesienie do następnego rozkazu. Mówi ono procesorowi,
skąd ma on pobrać następny rozkaz po zakończeniu wykonywania
bieżącego rozkazu
Reprezentacja rozkazu
Wewnątrz komputera każdy rozkaz jest reprezentowany za pomocą
ciągu bitów. Rozkaz jest dzielony na pola odpowiadające elementom
składowym rozkazu. Ten obraz rozkazu nazywa się formatem rozkazu.
Powszechną praktyką jest używanie symbolicznej reprezentacji
rozkazów maszynowych.
Rodzaje rozkazów
Dowolny program napisany w języku wysokiego poziomu musi być przetłumaczony
na język maszynowy, aby mógł być wykonany. Wyróżnia się
następujące rodzaje rozkazów :
Sterowanie. Rozkazy testowania i rozgałęzienia. Rozkazy testowania
są używane do sprawdzania wartości słów danych lub stanu obliczeń.
Rozkazy rozgałęzienia są używane do przeskoczenia do innego
zestawu rozkazów zależnie od podjętych decyzji.
Przetwarzanie danych. Rozkazy arytmetyczne i logiczne. Rozkazy
arytmetyczne zapewniają zdolność obliczeniową przetwarzania
anych numerycznych. Rozkazy logiczne (Boole'a) operują na bitach
słowa raczej jako na bitach niż na liczbach; wobec tego zapewniają
one zdolność przetwarzania dowolnych innych rodzajów
danych, jakie użytkownik może chcieć wykorzystywać
Przechowywanie danych. Rozkazy pamięciowe. Służą do
przenoszenia danych między pamięcią a rejestrami.
Ruch danych. Rozkazy wejścia-wyjścia. Są potrzebne do
przenoszenia danych i programów do pamięci oraz wyników
obliczeń do użytkownika
Przekazywanie sterowania
Istnieje wiele przyczyn, dla których wymagane są operacje
przekazywania sterowania.
Do najważniejszych należą:
Podczas praktycznego używania komputerów podstawowe znaczenie
ma możliwość wykonywania każdego rozkazu więcej niż raz, a Jest
nie do pomyślenia odrębne wypisywanie każdego rozkazu. Jeśli ma
być przetwarzana tablica lub lista jednostek danych, wymagana
jest pętla programowa. Jedna sekwencja rozkazów jest wykonywana
powtarzalnie, aż będą przetworzone wszystkie dane. Praktycznie
wszystkie programy obejmują podejmowanie decyzji. Chcemy, żeby
komputer wykonywał określone działania w pewnych warunkach,
zaś inne działania w innych warunkach. Prawidłowe ułożenie dużego
lub nawet średniego programu komputerowego jest
wyjątkowo trudnym zadaniem. Jest korzystne, jeśli dysponujemy
sposobami podziału takiego zadania na mniejsze części, nad którymi
można pracować oddzielnie.
Rozgałęzienia
Jednym z argumentów rozkazu rozgałęzienia jest adres następnego
rozkazu przewidzianego do wykonania.
Występują dwa rodzaje rozgałęzień: warunkowe i bezwarunkowe.
Istnieją dwie powszechnie stosowane metody generowania warunków,
które mają być testowane w rozkazach rozgałęzienia warunkowego.
Większość maszyn przewiduje 1-bitowy lub wielobitowy kod
warunkowy, który jest ustalany jako wynik pewnych operacji.
Innym rozwiązaniem, które może występować łącznie z 3-adresowym
formatem rozkazu, jest przeprowadzenie porównania i określenie
rozgałęzienia w ramach jednego rozkazu
Rozkazy pominięcia
Inną często spotykaną formą rozkazu przekazania sterowania
jest rozkaz pominięcia. Rozkaz pominięcia zawiera adres domyślny.
Zwykle rozkaz pominięcia oznacza pominięcie jednego rozkazu;
wobec tego adres domyślny jest równy adresowi następnego rozkazu
plus długość jednego rozkazu.
Adres Rozkaz
301
.....
.....
309 ISZ R1
310 BR 301
311
Typowym przykładem jest rozkaz
inkrementacja-i-pominięcie-jeśli-zero (ISZ).
Podprogramy standardowe
Jedną z najważniejszych innowacją w rozwoju języków
programowania jest podprogram standardowy. Podprogram standardowy
jest stanowiącym całość programem komputerowym, który jest
wbudowywany do większego programu. Podprogram standardowy
może być wywołany w dowolnym punkcie programu.
Mechanizm podprogramu standardowego obejmuje dwa
podstawowe rozkazy: rozkaz wywołania, który powoduje skok
z aktualnej lokacji do pod-programu, oraz rozkaz powrotu
powodujący powrót od podprogramu do miejsca, w którym
nastąpiło wywołanie. Oba te rozkazy należą do rozkazów rozgałęzień.
Wywołanie podprogramu standardowego może nastąpić również
wewnątrz podprogramu standardowego. Umożliwia to zagnieżdżanie
podprogramów na dowolnej głębokości.
Stosy
Stos jest uporządkowanym zestawem elementów, z których tylko do
jednego można mieć dostęp w określonej chwili.
Wskaźnik stosu. Zawiera adres wierzchołka stosu. Jeśli element jest
dodawany lub usuwany ze stosu, wskaźnik jest odpowiednio
inkrementowany lub dekrementowany, aby w dalszym ciągu
pokazywał wierzchołek stosu.
Podstawa stosu. Zawiera adres najniższej lokacji w zarezerwowanym
bloku. Jeśli dokonywana jest próba operacji POP, gdy stos jest pusty,
zgłaszany jest błąd.
Granica stosu. Zawiera adres drugiego końca zarezerwowanego
bloku. Jeśli czyniona jest próba operacji PUSH, gdy stos jest
zapełniony, zgłaszany jest błąd
Projektowanie listy rozkazów
Do najważniejszych problemów projektowych należą:
Repertuar operacji. Ile operacji, które operacje i jak złożone
operacje powinny być przewidziane.
Rodzaje danych. Różne rodzaje danych, na których dokonywane są operacje.
Format rozkazu. Długość rozkazu (w bitach), liczba adresów, rozmiar różnych pól itd.
Rejestry. Liczba rejestrów w procesorze, do których mogą się
odnosić rozkazy, oraz ich zastosowanie.
Adresowanie. Tryb lub tryby, w których są specyfikowane adresy
argumentów
Adresowanie
Pole lub pola adresowe w typowym formacie rozkazu są ograniczone.
Chcielibyśmy dysponować możliwością odnoszenia się do dużego
zakresu lokacji w pamięci głównej lub -w pewnych systemach
wirtualnej. Aby osiągnąć ten cel, zastosowano różnorodne metody
adresowania. Wszystkie te metody opierają się na kompromisie
między zakresem adresów i (lub) elastycznością adresowania z
jednej strony, a liczbą odniesień do pamięci i (lub) złożonością
obliczania adresów z drugiej strony.
Adresowanie natychmiastowe
Najprostszą formą adresowania jest adresowanie natychmiastowe,
w którym argument jest w rzeczywistości obecny w rozkazie.
ARGUMENT = A Tryb ten może być stosowany do
definiowania i używania stałych lub do ustalania początkowych
wartości zmiennych.
Adresowanie bezpośrednie
EA = A. Metoda ta była powszechna we wcześniejszych generacjach
komputerów i jest nadal spotykana w małych systemach komputerowych.
Wymaga tylko jednego odniesienia do pamięci i nie wymaga żadnych
obliczeń
Adresowanie pośrednie
W przypadku adresowania bezpośredniego problemem jest to, że
długość pola adresowego jest zwykle mniejsza niż długość słowa,
co ogranicza zakres adresów. W jednym z rozwiązań pole adresowe
odnosi się do słowa w pamięci, które z kolei zawiera pełnej długości
adres argumentu. Metoda taka jest znana jako adresowanie
pośrednie
Adresowanie rejestrowe
EA = R
Pole adresowe odnoszące się do rejestrów ma zwykle 3 lub 4 bity,
wobec tego może się odwoływać do 8 lub 16 rejestrów roboczych.
Adresowanie pośrednie rejestrowe
W obu przypadkach jedyną różnicą jest to, czy pole adresowe
odnosi się do lokacji w pamięci, czy do rejestru.
W obu przypadkach ograniczenie przestrzeni adresowej
(ograniczony zakres adresów) pola adresowego jest eliminowane
w ten sposób, że pole to odnosi się do zawierającej adres lokacji
o długości słowa.
Adresowanie z przesunięciem
Adresowanie z przesunięciem wymaga dwóch pól adresowych w
rozkazie, przy czym przynajmniej jedno z nich jest jawne.
Wartość zawarta w jednym polu adresowym (wartość równa A)
jest używana bezpośrednio. Drugie pole adresowe, lub odniesienie
domyślne oparte na kodzie operacji, odnosi się do
rejestru, którego zawartość po dodaniu do A daje adres efektywny.
Trzy najczęstsze zastosowania adresowania z przesunięciem:
adresowanie względne, adresowanie z rejestrem podstawowym,
indeksowanie.
Adresowanie stosowe
Stosowy tryb adresowania jest formą adresowania domyślnego.
Rozkazy maszynowe nie muszą zawierać odniesienia do pamięci,
lecz domyślnie operują na wierzchołku stosu.
Długość rozkazu
Długość rozkazu wpływa na rozmiar pamięci, organizację pamięci,
strukturę magistrali, złożoność i szybkość procesora.
Decyzja dotycząca długości rozkazu określa bogactwo i
elastyczność maszyny, widziane przez programistę posługującego
się językiem asemblerowym. Wszystkie elementy (kody operacji,
argumenty, tryby adresowania, zakres adresów) wymagają bitów i
popychają w kierunku dłuższych rozkazów. Jednak dłuższe rozkazy
mogą prowadzić do rozrzutności. Rozkaz 32-bitowy zajmuje dwa
razy tyle przestrzeni, co 16-bitowy, jednak jego użyteczność wzrasta
znacznie mniej niż dwukrotnie. Albo długość rozkazu powinna być
równa długości jednostki transferu z (i do) pamięci (w systemie
magistralowym -szerokości magistrali danych), albo jedno powinno
być wielokrotnością drugiego. Ewidentnie powszechną, lecz mimo
to ważną własnością jest to, że długość rozkazu powinna być
wielokrotnością długości znaku, która zwykle wynosi 8 bitów, oraz
długości liczb stałopozycyjnych.
Przydział bitów -cz. I
Przy danej długości rozkazu istnieje oczywista wymienność między
liczbą kodów operacji a zdolnością adresowania. Więcej kodów
operacji oznacza oczywiście więcej bitów w polu kodu operacji.
W przypadku formatu rozkazu o danej długości następuje
zredukowanie liczby bitów dostępnych na potrzeby adresowania.
Istnieje interesujące ulepszenie dotyczące tego problemu: jest nim
użycie kodów operacji o zmiennej długości. W tym rozwiązaniu
występuje minimalna długość kodu operacji, jednak w przypadku
niektórych kodów mogą być specyfikowane dodatkowe operacje
za pomocą dodatkowych bitów w rozkazie.
Liczba trybów adresowania: czasem tryb adresowania może być
domyślny. Na przykład pewne kody operacji mogą zawsze
wymagać indeksowania. W innych przypadkach tryby adresowania
muszą bć jawne, do czego jest potrzebny jeden lub więcej bitów.
Przydział bitów -cz. II
Liczba argumentów. Zmniejszona liczba adresów może prowadzić
do dłuższych, bardziej kłopotliwych programów. Typowe rozkazy
współczesnych maszyn przewidują dwa argumenty. Każdy adres
argumentu w rozkazie może wymagać własnego wskaźnika
trybu lub też wskaźnik trybu może być związany tylko z
jednym polem adresowym.
Rejestry a pamięć. Maszyna musi mieć rejestry, dzięki którym
dane mogą być wprowadzane do procesora w celu przetwarzania.
W przypadku rejestru pojedynczego, widzialnego dla użytkownika
(nazywanego zwykle akumulatorem), adres jednego
argumentu jest domyślny i nie pochłania bitów rozkazu. Jednak
programowanie jedno rejestrowe jest kłopotliwe i wymaga wielu
rozkazów. Nawet w przypadku wielu rejestrów potrzeba tylko kilku
bitów do określenia rejestru. Im więcej rejestrów można przeznaczyć
na od-niesienia do argumentów, tym mniej potrzeba bitów. W wielu
badaniach wykazano, że pożądana liczba rejestrów widzialnych dla
użytkownika wy-nosi od 8 do 32. Wiele maszyn ma jeden zestaw
rejestrów roboczych, zawierający zwykle 8 do 16 rejestrów. Mogą
one być używane do przechowywania danych albo też do
przechowywania adresów w przypadku adresowania z przesunięciem.
Współcześnie występuje tendencja do odchodzenia od jednego
estawu rejestrów roboczych w kierunku dwóch lub większej
liczby zestawów wyspecjalizowanych (np. dane i przesunięcia).
Przydział bitów -cz. III
Zakres adresów. W przypadku adresów odnoszących się do pamięci
zakres możliwych adresów jest powiązany z liczbą bitów
adresowych. Ponieważ stanowi to poważne ograniczenie,
bezpośrednie adresowanie jest rzadko stosowane. Dzięki adresowaniu
z przesunięciem zakres adresów ulega poszerzeniu aż do wielkości
wynikającej z długości rejestru adresowego. Nawet w tym przypadku
nadal wygodne jest stosowanie raczej dużych przesunięć w
stosunku do adresu rejestrowego, co wymaga stosunkowo dużej
liczby bitów adresowych w rozkazie. Stopień granulacji adresu.
W przypadku adresów, które odnoszą się raczej do pamięci niż
do rejestrów, dodatkowym czynnikiem jest stopień granulacji
adresu. W systemie o słowach 16-lub 32-bitowych adres może
odnosić się do słowa lub bajtu, zależnie od wyboru projektanta.
Adresowanie bajtowe jest wygodne do manipulowania znakami,
jednak przy ustalonym rozmiarze pamięci wymaga więcej bitów
adresowych.