Rejestr ogólnego przeznaczenia - Wydział Fizyki i Informatyki

Transkrypt

Rejestr ogólnego przeznaczenia - Wydział Fizyki i Informatyki
Budowa wnętrza procesora x86
Marika Kuczyńska , Joanna Tokarz
Akademia Górnicz- Hutnicza im. Stanisława Staszica w Krakowie
Wydział Fizyki i Informatyki Stosowanej
Fizyka Techniczna
Kraków, 20.03.2013
Plan prezentacji
1. Schemat Budowy procesora Intel (IA-32)
3. Jednostka Wykonawcza
a) Rejestry ogólnego przeznaczenia
- rejestry arytmetyczne
- rejestry wskaźnikowe i indeksowe
a) Rejestr znaczników (EFLAG, RFLAG)
c) Wskaźnik instrukcji (EIP/RIP)
d) Jednostka zmiennoprzecinkowa, koprocesor (FPU)
e) Rejestry kontrolne (CR)
4. Instrukcje
a) rejestry MMX (64bit)
b) rejestry XXM (128bit)
c) rozszerzenie AVD (rejestr YMM) (255bit)
Schemat blokowy mikroprocesora Intel
IE-32 (32-bity)
Jednostka wykonawcza
Jednostka interfejsowa
Jednostka Wykonawcza
Jednostka wykonawcza
składa się z:
h
- podstawowych rejestrów
wykonawczych:
–
–
–
–
ogólnego przeznaczenia
segmentów
RFlag
wskaźnika instrukcji
- rejestrów koprocesora
-
rejestru kontrolnego
rejestru statusu
rejestru znaczników
rejestrów wskaźnikowych
- rejestrów XMM i MMX
Jednostka wykonawcza
mod 32
mod 64
Rejestry jednostki wykonawczej
Główne rejestry:
- 16 rejestrów ogólnego
przeznaczenia GPRs
(32/64 bity)
- 6 rejestrów segmentowych
(16 bitów)
- rejestr znaczników
(EFLAG\RFLAG)
(32/64 bity)
- licznik rozkazów – EIP/RIP
(32/64 bity)
- 8 rejestrów jednostki
zmiennoprzecinkowej
- 16 rejestrów XMM (128 bitów)
Rejestr ogólnego przeznaczenia
W skład bloku rejestru ogólnego
przeznaczenia wchodzą:
p
- rejestr arytmetyczny
- rejestr wskaźnikowy
- rejestr indeksowy
Zastosowanie:
pk
-
Służą jako liczniki (głównie rejestr ECX)
Funkcjonują jako przechowalnie argumentów
Przechowywanie operandów i wyników obliczeń arytmetycznych.
Są wskaźnikami pamięci
Rejestr ogólnego przeznaczenia
(General-Purpose Register)
8 bits
16 bits
- Rejestr bajtów (Byte Registers )
AL, BL, CL, DL, AH, BH, CH, DH
- Rejestr słów (Word Registers)
AX, BX, CX, DX, DI, SI, BP, SP
- Rejestr podwójnych słów (Doubleword Registers )
EAX, EBX, ECX, EDX, EDI, ESI, EAX, EBX, ECX,
EDX, EDI, ESI, EBP, EBP, ESP
32 bits
Rejestr ogólnego przeznaczenia
(General-Purpose Register)
- Rejestr poczwórnych słów (Quadword Registers )
RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8 - R15
Rejestr ogólnego przeznaczenia
(General-Purpose Register)
KIEDYŚ:
Rejestry danych:
Rejestry adresowe:
EAX – rejestr akumulacji
ESP – wskaźnik stosu
EBX - rejestr bazowy
EBP – wskaźnik bazowy
ECX - rejestr licznika
ESI - wskaźnik źródła
EDX - rejestr danych
EDI - przeznaczenie
k
TERAZ:
Każdy z 16 rejestrów może wykonywać
każdą z wyżej wymienionych prac.
Nie ma podziału na rejestry poszczególnego
przeznaczenia, ponieważ rejestry są
przemienne i wymienne.
k
R8 – R15 reprezentują 8 nowych GPR, gotowych do użycia.
Rejestr znaczników (flag)
Dzięki rejestrowi znaczników mamy możliwość kontrolowania
ustawień samego procesora.
k
Zapisane są w nim takie ustawienia, jak np. :
j
- możliwość korzystania
z instrukcji wejścia-wyjścia,
j
- informacje nt. ostatnio
przeprowadzanej operacji
arytmetycznej.
Rejestr znaczników (flag) EFLAG
Flagi znajdujące się w rejestrze dzielimy na:
k
-
flagi stanu (S)
flagi systemowe (X)
flagi sterowania (C)
Znaczenia flag (S)
CF (carry flag) - znacznik przeniesienia
0 - wynik operacji arytmetycznej nie powoduje powstania przeniesienia
z najbardziej znaczącego bitu
1 - wynik takie przeniesienie powoduje
PF (parity flag) - znacznik parzystości - ustawiany w zależności od
liczby jedynek w najmniej znaczących 8 bitach wyniku
0 - liczba jedynek w wyniku operacji nieparzysta
1 - liczba jedynek w wyniku operacji parzysta
AF (auxiliary carry flag) - znacznik przeniesienia połówkowego
(pomocniczego)
0 - brak przeniesienia pomiędzy trzecim i czwartym bitem bajta (BCD)
1 - występuje przeniesienie
Znaczenia flag (S)
ZF (zero flag) - znacznik zera
0 - wynik operacji różny od zera
1 - wynik operacji równy zeru
S
SF (sign flag) - znacznik znaku równy najbardziej znaczącemu
bitowi wyniku
F
0 - wynik operacji dodatni
1 - wynik operacji ujemny
IF (interrupt flag) - znacznik przerwań
0 - brak zezwolenia na przyjmowanie
przerwań z wejścia INT
1 - zezwolenie na przyjmowanie przerwań
DF (direction flag) (C) - znacznik kierunku
0 - rejestry są zwiększane
1 - rejestry są zmniejszane
OF (overflow flag) - znacznik nadmiaru
F
0 - suma modulo 2 przeniesień z najbardziej
znaczącej pozycji i pozycji przedostatniej jest równa 0
1 - suma modulo 2 przeniesień z najbardziej znaczącej pozycji i pozycji
przedostatniej jest równa 1 (przekroczenie zakresu w kodzie U2)
TF (trap flag) - znacznik pułapki umożliwiającej pracę krokową
0 - praca krokowa wyłączona
1 - praca krokowa włączona, mikroprocesor po wykonaniu każdego rozkazu
wykona skok do odpowiedniego podprogramu obsługi przerwania
Znaczenia flag (X)
IOPL (I/O priviege field) –
poziom uprzywilejowania we/wy
0 - odczyt/zapis jest zabroniony
1 – odczyt/zapis jest dozwolony
d
NT (Nested task flag) flaga zadania zagnieżdżonego
0 - obecny proces nie wywodzi
się z żadnego innego
1 - proces jest zadaniem zagnieżdżonym
g
RF (resume flag) – flaga wznowienia
0 – nie wystąpiło przerwanie zatrzymujące
wykonanie programu
1 - wystąpiło przerwanie zatrzymujące
wykonanie programu
g
AC (Alignment chcek flag) –
sprawdzenie wyrownania
0 - włączone
1 - włączone
VIF (Virtual interrupt flag) –
flaga przerwania wirtualnego
0 - nie pozwala na przerwania
w trybie wirtualnym
1 – pozwala na wirtualne przerwania
VIP (Virtual interrupt pending flag) –
oczekujące przerwanie wirtualne
0 - brak wirtualnych przerwań
1 - trwa wirtualne przerwanie
VM (Virtual-8086 mode flag) –
flaga trybu wirtualnego 8086
ID (identification flag) - identyfikacja
0 - brak przejścia, pozostanie w obecnym trybie
0 – nie można zmienić wartości
1 - przejście w tryb emulacji procesora 8086
1 - można zmienić wartość
Wskaźnik instrukcji
(instruction pointer)
IP - wskazuje na adres aktualnie wykonywanej instrukcji.
Procesor ma zapętlony sposób działania: pobiera
instrukcję, wykonuje ją i, na koniec cyklu, zwiększa
zawartość rejestru IP o długość wykonanej instrukcji. W
razie uruchomienia programu, początkowo rejestr IP
wskazuje na początek segmentu kodu.
EIP – rozszerzenie IP na 32 bity
RIP – rozszerzenie IP na 64 bity
- nie możemy się dostać do IP bezpośrednio przez software
- kontrolowany jest przez instrukcje takie jak: JMP, Jcc, CALL,
RET, przerwania i wyjątki
Rejestry koprocesora
FPU (floating point unit)
Czyli tak zwany koprocesor - Jest to blok procesora
wspomagający go w obliczeniach zmiennoprzecinkowych
Składa się z:
- Rejestrów kontrolnych
- Rejestru statusu
- rejestru znaczników
- wskaźnika instrukcji
- wskaźnika opernadów
Rejestry kontrolne
Istnieje 5 rejestrów kontrolnych:
d
CR0- Modyfikuje podstawowe operacje procesora.
k
CR1- Ten rejestr jest zarezerwowany i nie mamy do niego żadnego
dostępu.
d
CR2- Jeśli dojdzie do gdzieś do błędu, to adres wystąpienia tego
błędu jest przechowywany właśnie w CR2
d
CR3- Używany tylko jeśli bit PG w CR0 jest ustawiony. CR3
umożliwia procesorowi zlokalizowanie położenia tablicy katalogu
stron dla obecnego zadania. Ostatnie (wyższe) 20 bitów tego
rejestru wskazują na wskaźnik na katalog stron zwany PDBR
(ang. Page Directory Base Register).
d
CR4- Używany w trybie chronionym w celu kontrolowania operacji
takich jak wsparcie wirtualnego 8086, technologii stronicowania
pamięci, kontroli błędów sprzętowych i innych.
Rejestry kontrolne
- Mają długość 32 bitów na procesorze 386 lub wyższym.
- Na procesorze x86-64 analogicznie rejestry mają długość 64 bitów.
Rejestry kontrolne - CR0
PE (Protection Enabled)
0 – pracuje w trybie rzeczywistym
1 – pracuje w trybie chronionym
WP (Write Protection)
0 – ochrona wyłączona
1 – włącza ochronne zapisu
MP (Monitor Coprocessor)
1 – kontroluje instrukcje WAIT/FWAIT
AM (Aligment Mask)
0 – maska wyłączona
1 – włącza maskę wyrównania
EM (Emulate Flag)
0 – obecność jednostki x87
1 – nie ma żadnego koprocesora
NW (No Write-Through)
0 – zapis do pamięci poprzez cache
1 – bezpośredni zapis do pamięci
TS (Task switched) Pozwala zachować zadania x87.
1 – przełączanie zadań
CD (Casche disable)
0 – pamięć cache włączona
ES (Extention type) Mówi nam jaki mamy koprocesor. 1 – pamięć cache wyłączona
0 – 80287
1 – 80387
PG (Paging Flag)
NE (Numeric Error)
1 – włącza wewnętrzne raportowanie błędów FPU
0 – wyłączone stronicowanie
1 – włączone stronicowanie
Rejestry kontrolne - CR4
VEM (Virtual 8086 Mode Extensions)
1 – włącza wirtualną flagę przerwań
PCE (Performance-Monitoring Counter Enable)
0 - rozkaz może być wykonany tylko w
g
PVI (Protected Mode Virtual Interrupts)
trybie jądra (poziom 0)
1 - włącza sprzętowe wsparcie dla wirtualnej
1 - rozkaz RDPMC może być wykonany w
flagi przerwań (VIF) w trybie chronionym
;jhbj
każdym poziomie uprzywilejowani
;jhbdj
TSD (Time Stamp Disable)
OSFXSR (Operating system support for FXSAVE
0 - rozkaz RDTSC może być wykonany
and FXSTOR instructions)
na każdym poziomie uprzywilejowania
1 –Wsparcie systemu operacyjnego dla
1 - rozkaz RDTSC może być wykonany
tylko w poziomie uprzywilejowania 0
(czyli w trybie jądra)
s
instrukcji FXSAVE i FXSTOR
g,,
OSXMMEXCEPT (Operating System Support for
Unmasked SIMD Floating-Point Exceptions)
PGE (Page Global Enabled)
1 - Wsparcie systemu operacyjnego dla
1 – włącza globalne stronicowanie
niemaskowanych wyjątków technologii SIMD
Rejestr MMX
* Rozszerzenie MMX wraz ze swoimi rejestrami zostało
wprowadzone w procesorach Pentium (1997).
k
* Rejestry MMX są ponumerowane od
MM0 do MM7 i wszystkie są 64-bitowe.
i
* Rejestry te nie są wydzielone, lecz
są częścią składową rejestrów jednostki
stałoprzecinkowej.
i
* MMX pozwala na :
-
przeprowadzanie kilku obliczeń stałoprzecinkowych jednocześnie.
-
wykorzystywane są również przez rozszerzenia stworzone przez
AMD - 3DNow oraz 3DNow!, które z kolei umożliwiają
przeprowadzanie obliczeń zmiennoprzecinkowych.
Rejestr XMM
* Rejestry XMM zostały wprowadzone
wraz z rozszerzeniem SSE w
procesorach Pentium III (1999).
* Są ponumerowane od XMM0 do XMM7,
każdy po 128 bitów.
* Rozszerzenie SSE jest kontynuacją
rozszerzenia MMX, gdyż założenia są
podobne, lecz umożliwiają dodatkowo
obliczenia na liczbach
zmiennoprzecinkowych.
* Co więcej rejestry XMM nie są "aliasami"
na rejestry FPU, zatem koprocesor i
Rejestry technologii SSE mogą być
używane równolegle.
Rejestr YMM
AVX (Advanced Vector Extensions) –
rozszerzenie zestawu instrukcji SSE
opublikowane w marcu 2008 przez firmę
Intel.
* wprowadzono 256-bitowe rejestry
* Dodano kilka rozkazów działających
wyłącznie na rejestrach YMM (19 instr).
* Dodane specjalizowane instrukcje
wspomagające szyfrowanie AES (6 instr).
* Rozszerzone kodowanie rozkazów(166 instr).
* Dodane 4-argumentowe rozkazy
akumulujące wyniki mnożenia wektorów
liczb zmiennoprzecinkowych (12 instr).
Mnemoniki instrukcji
PS, PD - wektor liczb zmiennoprzecinkowych,
SS, SD - skalar (pierwszy element wektora), tj.
liczba zmiennoprzecinkowa, odpowiednio,
pojedynczej i podwójnej precyzji.
i
wyniki mnożenia rozpoczynają się od VFM lub
VFNM, np. VFMADDPD
natomiast mnemoniki rozkazów wspomagających
szyfrowanie od AES. np. AESDEC
Instrukcje
Przesłaniania:
- MOV – przesłanianie proste
- XCHG – wymiana
- MIVSX – przesłanianie z rozszerzeniem bitu znaku
- MOVZX – przesłanie z rozszerzonymi zerami
Arytmetyczno-logiczne (jednoargumentowe):
- INC, DEC – inkrementacja, dekrementacja
- NOT, NEG – negacja bitów, zamiana znaku
Arytmetyczno-logiczne (dwuargumentowe):
- ADD, ADC – inkrementacja, dekrementacja
- SUB, SBB – odejmowanie zwykłe i z przeniesieniem
- CMP – porównanie: odejmowanie bez zapisu wyniku
- AND, OR, XOR – logiczne bitowe
- TEST – test: iloczyn logiczny bez zapisu wyniku
Instrukcje
Przesunięcia i rotacje:
liczba pozycja zapisana jest jako stała w instrukcji albo w CL
- SHL, SHR – logiczne w lewo/prawo; z dopełnieniem zerami
- SAR – arytmetyczne w prawo; z kopiowaniem znaku
- ROL, ROR – rotacja w lewo/prawo
- RCL, RCR – rotacja z bitem przeniesienia
- SHLD, SHRD – przesunięcie dwóch słów w lewo/prawo z
zapisem bardziej/mniej znaczącego słowa wyniku
Pobieranie adresu efektywnego: LEA
- LEA EAX [EBX*8]
- LEA EAX [EBX+EBX*8]
- stosowane często do mnożenia przez 3,4,5,8,9
Instrukcje
Mnożenie i dzielenie:
- jednoargumentowe – zawiera argument domyślny
- dwuargumentowe – rejestr, rejestr/pamięć
- trójargumentowe – rejestr, rejestr/pamięć, stała
- MUL, IMUL, DIV, IDIV – bez znaku i ze znakiem
Skoki:
- JMP – skok bezwarunkowy
- CALL – skok ze śladem powrotu, przekazanie sterowania do procedury
- Jcc– skok po spełnieniu warunku
- JMP EAX– skok ze wskazanym zmiennym adresem docelowym
- JMP [EBX+ECX*4]– skok ze wskazanym zmiennym adresem
docelowym
- RET – powrót z procedury
- RET n – powrót z procedury, po zdjęciu ze stosu n bajtów argumentów
DZIĘKUJEMY
ZA UWAGĘ!

Podobne dokumenty