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Ę!