budowa wnętrza procesora x86 - agh university of science...
TRANSCRIPT
Budowa wnętrza procesora x86Marika Kuczyńska , Joanna Tokarz
Akademia Górnicz- Hutnicza im. Stanisława Staszica w KrakowieWydział Fizyki i Informatyki StosowanejFizyka 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 przeznaczeniaRejestr ogólnego przeznaczenia
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 przeznaczeniaRejestr ogólnego przeznaczenia
W skład bloku rejestru ogólnego przeznaczenia wchodzą:p
- rejestr arytmetyczny- rejestr wskaźnikowy- rejestr indeksowy
Rejestr ogólnego przeznaczenia(General-Purpose Register)
- 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
8 bits 16 bits 32 bits
- Rejestr poczwórnych słów (Quadword Registers ) RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8 - R15
Rejestr ogólnego przeznaczenia(General-Purpose Register)
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 stanu (S) - flagi systemowe (X)flagi systemowe (X) - flagi sterowania (C)flagi sterowania (C)
Znaczenia flag
CF (carry flag) - znacznik przeniesienia0 - wynik operacji arytmetycznej nie powoduje powstania przeniesienia z najbardziej znaczącego bitu1 - 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 nieparzysta1 - 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)
Znaczenia flag
ZF (zero flag) - znacznik zera0 - wynik operacji różny od zera1 - wynik operacji równy zeru
S
SF (sign flag) - znacznik znaku - równy najbardziej znaczącemubitowi wyniku
0 - wynik operacji dodatni1 - wynik operacji ujemny
F
OF (overflow flag) - znacznik nadmiaru 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)F
TF (trap flag) - znacznik pułapki umożliwiającej pracę krokową0 - praca krokowa wyłączona1 - praca krokowa włączona, mikroprocesor po wykonaniu każdego rozkazu
wykona skok do odpowiedniego podprogramu obsługi przerwania
Znaczenia flag (S)
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
Znaczenia flag
IOPL (I/O priviege field) – poziom uprzywilejowania we/wy
0 - odczyt/zapis jest zabroniony 1 – odczyt/zapis jest dozwolonyd
NT (Nested task flag) - flaga zadania zagnieżdżonego
0 - obecny proces nie wywodzi się z żadnego innego
1 - proces jest zadaniem zagnieżdżonymg
RF (resume flag) – flaga wznowienia0 – nie wystąpiło przerwanie zatrzymujące
wykonanie programu1 - wystąpiło przerwanie zatrzymujące
wykonanie programug
VM (Virtual-8086 mode flag) – flaga trybu wirtualnego 8086
0 - brak przejścia, pozostanie w obecnym trybie 1 - przejście w tryb emulacji procesora 8086
Znaczenia flag (X)
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
ID (identification flag) - identyfikacja 0 – nie można zmienić wartości 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 bityRIP – 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
MP (Monitor Coprocessor)1 – kontroluje instrukcje WAIT/FWAIT
EM (Emulate Flag) 0 – obecność jednostki x87 1 – nie ma żadnego koprocesora
TS (Task switched) Pozwala zachować zadania x87.1 – przełączanie zadań
ES (Extention type) Mówi nam jaki mamy koprocesor.0 – 80287
1 – 80387
NE (Numeric Error)1 – włącza wewnętrzne raportowanie błędów FPU
WP (Write Protection) 0 – ochrona wyłączona 1 – włącza ochronne zapisu
AM (Aligment Mask)0 – maska wyłączona 1 – włącza maskę wyrównania
NW (No Write-Through) 0 – zapis do pamięci poprzez cache 1 – bezpośredni zapis do pamięci
CD (Casche disable) 0 – pamięć cache włączona1 – pamięć cache wyłączona
PG (Paging Flag) 0 – wyłączone stronicowanie 1 – włączone stronicowanie
Rejestry kontrolne - CR4
VEM (Virtual 8086 Mode Extensions)
1 – włącza wirtualną flagę przerwańg
PVI (Protected Mode Virtual Interrupts)
1 - włącza sprzętowe wsparcie dla wirtualnej
flagi przerwań (VIF) w trybie chronionym;jhbj
TSD (Time Stamp Disable)
0 - rozkaz RDTSC może być wykonany
na każdym poziomie uprzywilejowania
1 - rozkaz RDTSC może być wykonany
tylko w poziomie uprzywilejowania 0
(czyli w trybie jądra)s
PGE (Page Global Enabled)
1 – włącza globalne stronicowanie
PCE (Performance-Monitoring Counter Enable)
0 - rozkaz może być wykonany tylko w
trybie jądra (poziom 0)
1 - rozkaz RDPMC może być wykonany w
każdym poziomie uprzywilejowani;jhbdj
OSFXSR (Operating system support for FXSAVE
and FXSTOR instructions)
1 –Wsparcie systemu operacyjnego dla
instrukcji FXSAVE i FXSTORg,,
OSXMMEXCEPT (Operating System Support for
Unmasked SIMD Floating-Point Exceptions)
1 - Wsparcie systemu operacyjnego dla
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Ę!