, AKO3, Politechnika Gdańska ETI Informatyka Niestacjonarne, Sem III, Architektura komputerow 

AKO3

AKO3, Politechnika Gdańska ETI Informatyka Niestacjonarne, Sem III, Architektura komputerow
[ Pobierz całość w formacie PDF ]
Zasady kodowania instrukcji (rozkazów)
¨
wszelkie informacje w komputerze kodowane są w postaci ciągów
zerojedynkowych — taka postać informacji wynika ze stosowania
elementów elektronicznych, które pracują pewnie i stabilnie jako
elementy dwustanowe;
¨
zatem również poszczególne instrukcje (rozkazy) programu muszą
być przedstawiane w postaci ciągów zerojedynkowych; producent
procesora (np. firma Intel) ustala szczegółowe zasady kodowania
instrukcji, przyporządkowując każdej z nich ustalony ciąg zer i
jedynek; przykładowo instrukcjom mnożenia i dzielenia przypisano
następujące kody:
mnożenie liczb 8-bitowych bez znaku
11110110..100
mnożenie liczb 32 (lub 16)-bitowych bez
znaku
11110111..100
mnożenie liczb 8-bitowych ze znakiem
11110110..101
mnożenie liczb 32 (lub 16)-bitowych ze
znakiem
11110111..101
dzielenie liczby 16-bitowej bez znaku przez
liczbę 8-bitową
11110110..110
dzielenie liczby 64 (lub 32)-bitowej bez
znaku przez liczbę 32 (16)-bitową
11110111..110
dzielenie liczby 16-bitowej ze znakiem przez
liczbę 8-bitową
11110110..111
dzielenie liczby 64 (lub 32)-bitowej ze
znakiem przez liczbę 32 (16)-bitową
11110111..111
¨
obok kodu wykonywanej operacji instrukcja (rozkaz) zawiera także
informacje o położeniu w pamięci przetwarzanych (np. mnożonych)
liczb, jak również wskazania dokąd należy przesłać wynik obliczenia;
 2
¨
w niektórych typach procesorów (rzadko spotykanych) instrukcja
zawiera informacje o położeniu kolejnej instrukcji, którą ma wykonać
procesor — w procesorach Pentium pole to nie występuje, ponieważ
położenie kolejnej instrukcji wskazuje rejestr
EIP
;
¨
podsumowując, ciąg zerodynkowy opisujący instrukcję, która
wykonuje operację dwuargumentową, np. dodawania
A + B
powinien zawierać następujące elementy (pola):
1. kod operacji (zakodowany opis wykonywanych
czynności);
2. położenie pierwszego operandu (
A
);
3. położenie drugiego operandu (
B
);
4. dokąd przesłać wynik (
W
) ?
5. gdzie znajduje się kolejna instrukcja do wykonania ?
(tylko wyjątkowo, jeśli w procesorze nie jest używany
wskaźnik instrukcji);
W
¬
¨
w trakcie wieloletniego rozwoju informatyki opracowane
najrozmaitsze sposoby kodowania instrukcji (rozkazów); w
początkowym okresie rozwoju mikrokomputerów występowały silne
ograniczenia sprzętowe, np. pojemność pamięci RAM wynosiła 32
KB; w tej sytuacji szczególną uwagę zwracano na możliwość
kodowania programów za pomocą możliwie krótkiego kodu;
3
¨
w celu zmniejszenia liczby bitów instrukcji w wielu procesorach, w
tym także w Pentium, przyjęto różne ograniczenia:
·
wynik operacji przesyłany do lokacji, w której dotychczas
znajdował się pierwszy operand (
A
) — w tej sytuacji pole (4)
nie jest potrzebne;
co najwyżej jeden operand (
A
albo
B
) może wskazywać na
lokację pamięci, drugi operand lub oba operandy muszą
wskazywać na rejestry; zauważmy, że w procesorze Pentium
wskazanie pewnego bajtu pamięci w segmencie wymaga
podania adresu 32-bitowego, podczas gdy wskazanie rejestru
wymaga podania trzech bitów (bo jest 8 rejestrów ogólnego
przeznaczenia);
·
¨
w wielu przypadkach adres komórki pamięci, na której wykonywane
jest działanie, wyznaczany jest w dość złożony sposób na podstawie
adresu zawartego w instrukcji i zawartości rejestrów modyfikacji
adresowych; zazwyczaj dostępnych jest kilka sposobów obliczania
tego adresu, a sposób zastosowany w konkretnej instrukcji opisuje
kilka bitów;
¨
w procesorach Pentium dla poszczególnych klas instrukcji stosowane
są różne formaty kodowania; dla instrukcji (rozkazów) niesterujących
istotne znaczenie ma tzw.
podstawowy format rozkazu
; inne formaty
stanowią często odmiany formatu podstawowego.
Przypomnienie: po wykonaniu instrukcji niesterującej, jako następną
procesor wykonuje instrukcję bezpośrednio przylegającą w pamięci do
instrukcji właśnie wykonanej; innymi słowy: instrukcje niesterujące
oddziaływują na wskaźnik instrukcji EIP wg poniższej formuły:
EIP
¬
EIP + <liczba bajtów instrukcji>
4
Tryby adresowania
¨
w trybie rzeczywistym (i w trybie V86) standardowo używane są
operandy 8- i 16-bitowe; jeśli jednak przed instrukcją wykonującą
działanie na operandzie 16-bitowym zostanie umieszczony dodatkowy
bajt 66H, to działanie zostanie wykonane na operandzie 32-bitowym;
ten dodatkowy bajt nosi nazwę
przedrostka rozmiaru operandu
;
¨
w trybie chronionym, bit D (czasami oznaczany także B — ang.
default/big bit, dalsze wyjaśnienia zostaną podane przy omawianiu
trybu chronionego) w deskryptorze segmentu kodu określa
standardowy rozmiar operandów i adresów dla wszystkich instrukcji
zawartych w segmencie:
·
D = 0
®
adresy 16-bitowe, operandy 8 lub 16 bitowe, albo
D = 1
®
adresy 32-bitowe, operandy 8 lub 32 bitowe
·
¨
segment kodu, w którym bit D = 0 nazywany jest
segmentem 16-
bitowym
, jeśli zaś D = 1, to segment kodu nazywany jest
segmentem
32-bitowym
;
5
¨
w trybie chronionym istnieje również możliwość doraźnej zmiany
trybu 16-bitowego na 32-bitowy lub odwrotnie:
·
jeśli program jest wykonywany w trybie 16-bitowym, to
poprzedzenie rozkazu dodatkowym bajtem o kodzie 66H, tzw.
przedrostkiem rozmiaru argumentu
powoduje, że operacja
zostanie wykonana na obiektach 32-bitowych (np. na rejestrze
ECX
); ten sam bajt umieszczony przed instrukcją, jeśli
procesor pracuje w trybie 32-bitowym powoduje, że operacja
zostanie wykonana na obiektach 16-bitowych (np. na rejestrze
CX
);
analogiczną rolę pełni bajt o kodzie 67H (
przedrostek
rozmiaru adresu
) w odniesieniu do rozmiarów adresu: jeśli
procesor pracuje w trybie 16-bitowym, to poprzedzenie
instrukcji bajtem 67H powoduje, że adres efektywny zostanie
obliczony wg reguł dla trybu 32-bitowego, itd.; obliczony
adres efektywny nie jest jeszcze adresem fizycznym —
wyznaczenie adresu fizycznego w trybie chronionym wymaga
wykonania dość złożonych operacji;
·
¨
użycie dyrektywy .386 w typowym asemblerze powoduje, że
tworzone są segmenty 32-bitowe; jeśli w takiej sytuacji potrzebny jest
segment 16-bitowy, to dyrektywę
SEGMENT
należy zapisać w
postaci
nazwa SEGMENT use16
jeśli używane są dyrektywy skrócone
.model
,
.code
,
.data
, itd., to
dyrektywa
.model
powinna być zapisana w postaci, np.
.model use16 small
¨
rozmiar adresu odgrywa też istotną rolę w operacjach wykonywanych
na stosie (np.
PUSH ECX
) — i tak jeśli dla pewnej instrukcji
obowiązuje adres 16-bitowy, to wierzchołek stosu dla tej instrukcji
wskazuje rejestr
SP
, jeśli adres 32-bitowy — to rejestr
ESP
.
[ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • dodatni.htw.pl