Lista rozkazów Określenie



Pobieranie 94.68 Kb.
Data29.10.2017
Rozmiar94.68 Kb.

Komputer, będący systemem mikroprocesorowym, przetwarza informacje zgodnie z wykonywanym programem. Program jest ciągiem instrukcji realizujących pewien 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 procesora.

Lista rozkazów

 

Określenie: Rozkazem (instrukcją maszynową) nazywamy najprostszą operację, której wykonania programista może żądać od procesora.

Sposób realizacji rozkazu nie jest istotny dla użytkownika systemu i z reguły nie jest znany. Nawet jeżeli wiemy, że dany rozkaz jest realizowany jako ciąg prostszych operacji, zwanych mikrooperacjami czy mikrorozkazami, to i tak nie mamy żadnego wpływu na sposób realizacji rozkazu. Rozkazy są więc najprostszymi operacjami, których możemy używać przy tworzeniu programów. 
Tworzenie programów bezpośrednio przy pomocy instrukcji maszynowych jest bardzo efektywne jednak dość żmudne i nie nadaje się do tworzenia bardzo rozbudowanych programów. W takich przypadkach używamy tak zwanych języków wysokiego poziomu (np. Pacal, C++, itp.), w których jednej instrukcji odpowiada wiele instrukcji maszynowych. 
Zestaw instrukcji maszynowych zależy od konkretnego procesora. 
 

Określenie: Listą rozkazów nazywamy zestaw wszystkich instrukcji maszynowych (rozkazów), jakie potrafi wykonać dany procesor.

 Rozkazy tworzące listę rozkazów można podzielić na kilka podstawowych grup, w zależności od ich przeznaczenia:

1. rozkazy przesłań, 


2. rozkazy arytmetyczne i logiczne
3. rozkazy sterujące wykonywaniem programu, 
4. rozkazy sterujące pracą procesora.

Rozkazy przesłań są najczęściej wykonywanymi rozkazami. Nie zmieniają one wartości informacji, natomiast przenoszą ją z miejsca na miejsce. Ich duża częstotliwość wykonywania jest dość oczywista. Jeśli chcemy wykonać jakąś operację, musi-my zwykle pobrać jej argumenty, a po jej wykonaniu zapisać wynik. Wśród rozkazów przesłań wyróżnia się czasami operacje na stosie (będące jednak też formą przesłań) czy instrukcje wejścia/wyjścia, przesyłające lub odczytujące dane z portów wejścia/wyjścia. 
Typowymi przykładami rozkazów przesłań są:

MOV - move - przesłanie słowa pomiędzy rejestrami procesora; 
STR - store - przesłanie słowa ze wskazanego w rozkazie rejestru procesora do komórki pamięci; 
LD - load - przesłanie słowa z pamięci do wskazanego rejestru procesora; 
XCH - exchange - wymiana zawartości rejestrów; 
IN - input - odczyt słowa z urządzenia wejściowego; 
OUT - output - przesianie zawartości wskazanego rejestru procesora do urządzenia wyjściowego; 
CLR - clear - zerowanie rejestru; 
SET - set - zapisanie do rejestru jedynek
PUSH - push - zapisanie zawartości rejestru na stos; 
POP - pop - odczyt słowa z wierzchołka stosu i przesłanie go do rejestru;

Pierwsze 6 rozkazów to rozkazy jednoargumentowe. Muszą one jednak specyfikować dwa adresy operandów. Pierwszy z nich wskazuje miejsce skąd pochodzi argument operacji (źródło), a drugi wskazuje miejsce jego przesłania przeznaczenie). Istnieją procesory, w których rozkazy takie mogą być modyfikowane w taki sposób, aby ich wykonanie było wielokrotne, tj. powtarzane określoną przez rozkaz liczbę razy Umożliwia to przesyłanie całych bloków słów. Mówimy, że są to rozkazy z powtarzaniem. W takim przypadku rozkazy te są dwuargumentowe, gdyż drugi argument specyfikuje ile razy ten rozkaz ma być wykonany Pozostałe cztery rozkazy wymienione w tej grupie są rozkazami jednoargumentowymi. 
Rozkazy arytmetyczne i logiczne służą do przetwarzania informacji, czyli w wyniku ich wykonania jest ona zmieniana. Do rozkazów tych zaliczamy:

  • rozkazy arytmetyczne, np.:


ADD - addition - dodawanie
SUB - subtraction - odejmowanie; 
MUL - multiplication - mnożenie; 
DIV - diyision - dzielenie; 
ABS - absolute - wartość bezwzględna liczby; 
NEG - negate - zmiana znaku liczby; 
INC - increment - zwiększenie wartości o jeden; 
DEC - decrement - zmniejszenie wartości o jeden.

Pierwsze 4 rozkazy tej grupy sš argumentowe. Dlatego rozkazy te muszš wskazywać trzy operandy: dwa dla dwóch argumentów operacji i jeden dla wyniku. Zatem każdy taki rozkaz musi specyfikować trzy adresy. Ponieważ takie rozwišzanie zmuszałoby do wydłużania instrukcji, a co za tym idzie programów, to zmierza się do zmniejszania liczby adresów operandów. Można przyjšć wtedy, że jeden z argumentów jest zawsze przechowywany w tym samym miejscu, np. w akumulatorze i tam też przesyłany jest wynik operacji. W takim przypadku specy-fikacji wymaga tylko jeden operand. 
Następne 4 podane rozkazy sš jednoargumentowe i dlatego każdy z nich specyfikuje jedynie dwa adresy operandów. Wszystkie podane rozkazy powodujš odpowiednie ustawianie bitów w rejestrze znaczników na wyjściu ALU. Argumentami takich rozkazów mogš być liczby stałopozycyjne i zmiennopozycyjne.

  • rozkazy logiczne, np.:


AND - conjuction - iloczyn; 
OR - disjunction - suma; 
EXORexclusive-OR - suma mod 2; 
NOT - complement - negacja.

Pierwsze trzy rozkazy sš dwuargumentowe i tylko ostatni rozkaz jest jednoargumentowy. Argumenty tych rozkazów mogš być adresowane na różne sposoby. Wykonanie omawianych rozkazów także powoduje odpowiednie ustawienie znaczników.

  • rozkazy przesuwania informacji, np.:


SHL - shift left - przesuwanie zawartości rejestru w lewo (na najmniej znaczšcš pozycję wpisywane jest 0, a na najbardziej znaczšcš pozycję jest zapisywany znacznik przeniesienia). 
SHR - shift right - przesuwanie zawartości rejestru w prawo (na najbardziej znaczšcš pozycję wpisywane jest 0, a na najmniej znaczšcš pozycję jest zapisywany znacznik przeniesienia). 
SAL - shift arithmetic left - przesuwanie arytmetyczne w lewo (jak SHL), czyli mnożenie przez 2 z zachowaniem bitu znaku. 
SAR - shift arithmetic right - przesuwanie arytmetyczne w prawo, czyli dzielenie przez 2 (najbardziej znaczšcy bit jest pozostawiany a najmniej znaczšcy jest zapisywany na pozycję znacznika przeniesienia). 
ROL - rotate left - przesuwanie cykliczne w lewo (najbardziej znaczšcy bit jest zapisywany na najmniej znaczšcš pozycję oraz na pozycję znacznika przeniesienia). 
ROR - rotate right - przesuwanie cykliczne w prawo (najmniej znaczšcy bit jest zapisywany na najbardziej znaczšcš pozycję i na pozycję znacznika przeniesienia). 
RCL - rotate left with extend - przesuwanie cykliczne w lewo rejestru wydłu-żonego o znacznik przeniesienia. 
RCR - rotate right with extend - przesuwanie cykliczne w prawo rejestru wydłu-żonego o znacznik przeniesienia.

Wszystkie podane operacje sš jednoargumentowe. Rozkazy przesunięć mogš dotyczyć zarówno zawartości rejestrów jak i zawartości komórki pamięci. W niektórych komputerach można spotkać różne modyfikacje tych rozkazów, jak np. przesuwanie na dwóch połšczonych rejestrach lub przesuwanie dwuargumentowe, gdzie drugi argument określa liczbę pozycji o jakš ma być przesunięta zawartość danego rejestru. 


Rozkazy sterujšce wykonywaniem programu stanowiš grupę rozkazów pozwalajšcš zmieniać kolejność wykonywania instrukcji programu. Należš do nich przykładowo:

JMP - jump - skok bezwarunkowy do miejsca w pamięci wyspecyfikowanego w rozkazie; 
J c jump conditional - skok warunkowy gdzie c określa jaki warunek musi być spełniony, aby rozkaz wykonać; 
CALL - jump to subroutine - wywołanie podprogramu polegajšce na tym, że wykonywany jest skok wraz z zapamiętaniem na stosie zawartości licznika rozkazów (ostatni adres); 
C c - call conditional - warunkowe wywołanie podprogramu; 
RET - return - skok powrotny z podprogramu polegajšcy na przesłaniu ze stosu zapamiętanej wcześniej zawartości licznika rozkazów; 
SKIP - skip - przeskok przez jeden rozkaz;

Rozkazy warunkowe sš wykorzystywane do realizacji rozgałęzień w programach. Jeśli warunek nie jest spełniony, to rozkaz nie jest wykonywany, a wykonywany jest rozkaz następny, tj. znajdujšcy się w programie po rozkazie warunkowym. Rozkazy skoków i wywołań zawierajš adres skoku, tj. adres komórki pamięci, w której znajduje się rozkaz wykonywany bezpośrednio po wykonaniu rozkazu skoku. 


Rozkazy sterujšce pracš procesora stanowiš niewielkš grupę rozkazów do której należš m.in.:

HALT - stop - zatrzymanie wykonywania programu; 
NOP - no operation - rozkaz pusty.

Rozkaz HALT zatrzymuje pracę procesora, aż do momentu ponownego uruchomienia programu przez zdarzenie zewnętrzne (ponownš inicjalizację procesora, czyli po pojawieniu się sygnału RESET lub po zgłoszeniu przerwania, tj. pojawieniu się sygnału HIT), a rozkaz NOP jest rozkazem pustym - „nic nie rób”.

Przedstawiona lista rozkazów stanowi uproszczony przykład zbioru rozkazów procesora. Z tego opisu wynika jednak kilka ważnych problemów. Pierwszym z nich jest problem liczby adresów, które powinny zostać wyspecyfikowane w rozkazie. W zasadzie każdy rozkaz powinien podawać adresy 3 operandów (dwa adresy argumentów danego rozkazu i jeden adres wyniku operacji) oraz adres następnego rozkazu. Komputery, których rozkazy zawierajš te wszystkie adresy nazywane sš komputerami czteroadresowymi. Dla wyspecyfikowania podanych 4 adresów potrzebne sš bardzo długie słowa rozkazowe. Celem zmniejszenia długości rozkazu stosuje się rozwišzania pozwalajšce wyeliminować pewnš liczbę adresów. Jednym z nich było wprowadzenie licznika rozkazów, co pozwoliło na eliminację adresu następnego rozkazu i konstrukcję komputerów trzyadresowych. Celem dalszego ograniczenia liczby adresów można przyjšć założenie, że dla wszystkich operacji wynik będzie przesyłany w miejsce jednego z argumentów. Wówczas można zmniejszyć liczbę adresów do dwóch. W kom-puterach o bardzo krótkim słowie rozkazowym (np. mikrokomputery 8-bitowe) stosuje się dalsze ograniczenie liczby adresów przez rozwišzanie polegajšce na tym, że jeden z argu-mentów wszystkich rozkazów i wynik jest zawsze w tym samym miejscu (na przykład w rejestrze akumulatora). Takie komputery nazywane sš jednoadresowymi. 




Zobacz też  




Tryb adresowania

Rozkazy, jak każdy inny rodzaj informacji w systemie mikroprocesorowym, sš przechowywane w postaci kodów binarnych. Kod rozkazu musi zawierać informacje niezbędne do jego poprawnej realizacji. Informacje te muszš być rozmieszczone w rozkazie w określony sposób. 
 

Określenie: Formatem rozkazu nazywamy sposób rozmieszczenia informacji w kodzie rozkazu.

Kod rozkazu:

  1. musi zawierać określenie rodzaju wykonywanej operacji, czyli tak zwany kod operacji. Kod operacji musi być określony w poczštkowej części (pierwszym bajcie lub bajtach) kodu rozkazu w celu określenia, w jaki sposób ma przebiegać dalsza realizacja rozkazu przez mikroprocesor.

  2. może zawierać operandy i/lub adresy operandów wykonywanych operacji (dotyczy to także adresów wyników). Oczywiście w przypadku rozkazów wymagajšcych argumentów informacja ta musi być zawarta w rozkazie.

Właśnie z tym drugim warunkiem określajšcym zawartość kodu zwišzane sš tryby adresowania. 
 

Określenie: Trybem adresowania nazywa się sposób określenia miejsca przechowywania argumentów rozkazu.

Można rozróżnić następujšce tryby adresowania:

  • adresowanie natychmiastowe, w którym argument rozkazu zawarty jest w kodzie rozkazu;

  • adresowanie bezpośrednie, w którym kod rozkazu zawiera adres komórki pamięci przechowujšcej argument rozkazu;

  • adresowanie rejestrowe, w którym w kodzie rozkazu określony jest rejestr zawierajšcy argument rozkazu;

  • adresowanie pośrednie (rejestrowe pośrednie), w którym kod rozkazu zawiera określenie rejestru, bšdź rejestrów zawierajšcych adres komórki pamięci z argumentem rozkazu;

  • adresowanie indeksowe z przemieszczeniem, w którym adres argumentu przechowywanego w pamięci obliczany jest jako suma zawartości rejestru i wartości (tzw. przemieszczenia) określonych w kodzie rozkazu.

Interpretacja graficzna trybów adresowania została przedstawiona na rys. 10.1.



Rys.10.1. Tryby adresowania a) adresowanie natychmiastowe, b) adresowanie bezpośrednie, c) adresowanie rejestrowe, d) adresowanie pośrednie, e) adresowanie indeksowe z przemieszczeniem 

Pobieranie 94.68 Kb.

Share with your friends:




©operacji.org 2020
wyślij wiadomość

    Strona główna