Rejestr procesora
Rejestry procesora (ang. processor registers) – komórki pamięci o niewielkich rozmiarach (najczęściej 4/8/16/32/64/128/256 bitów) umieszczone wewnątrz procesora i służące do przechowywania tymczasowych wyników obliczeń, adresów lokacji w pamięci operacyjnej itd. Większość procesorów przeprowadza działania (obliczenia) wyłącznie korzystając z wewnętrznych rejestrów, użycie do obliczeń danych zawartych w pamięci wymaga użycia rozkazu kopiowania ich do rejestrów. Podobnie wyniki obliczeń są umieszczane w rejestrach, w niektórych procesorach, tylko w jednym rejestrze zwanym akumulatorem, w innych istnieje możliwość umieszczenia wyniku w jednym z wielu rejestrów, przeniesienie wyniku do pamięci wymaga użycia dodatkowego rozkazu procesora.
Rejestry procesora stanowią najwyższy szczebel w hierarchii pamięci, będąc najszybszym rodzajem pamięci komputera. Realizowane zazwyczaj za pomocą przerzutników dwustanowych, z reguły jako tablica rejestrów (blok rejestrów, z ang. register file).
Liczba rejestrów i możliwości wykonywania na nich operacji zależy od przyjętej koncepcji budowy procesora określanej jako architektura procesora.
Podział ze względu na zastosowanie
edytujW architekturze procesora CISC, ze względu na zastosowanie, można wyróżnić rodzaje rejestrów:
- akumulator – rejestr, w którym jest jeden z argumentów działania i w którym umieszczany jest wynik działań,
- rejestry danych – do przechowywania danych całkowitoliczbowych, np. argumentów i wyników obliczeń,
- rejestry adresowe – do przechowywania adresów i uzyskiwania dostępu do pamięci, wśród nich wyróżnić można rejestry segmentowe,
- rejestry ogólnego zastosowania (ang. general purpose), będące połączeniem dwóch powyższych typów, czyli mogące przechowywać zarówno dane, jak i adresy,
- rejestry zmiennoprzecinkowe – do przechowywania i wykonywania obliczeń na liczbach zmiennoprzecinkowych, z reguły znajdujące się w oddzielnym bloku funkcjonalnym procesora, zwanym koprocesorem (FPU),
- rejestry stałych – przechowujące stałe, jedynie do odczytu,
- rejestry wektorowe – przechowujące dane do jednoczesnego przetwarzania wielu danych przez instrukcje typu SIMD,
- rejestry specjalne, określające stan wykonania, wśród nich wymienić można rejestr wskaźnika instrukcji, wskaźnik stosu, rejestr flag procesora,
- rejestry instrukcji – do przechowywania obecnie przetwarzanej instrukcji
Rejestry procesorów x86
edytuj32-bitowe rejestry ogólnego przeznaczenia to:
- EAX – Accumulator (akumulator – jego pamięć wykorzystuje arytmometr; używa się go do przechowywania wyników wielu operacji)
- EBX – Base Register (rejestr bazowy – służy do adresowania)
- ECX – Counter Register (rejestr licznikowy – służy jako licznik w pętli)
- EDX – Data Register (rejestr danych – umożliwia przekaz/odbiór danych z portów wejścia/wyjścia)
- ESP – Stack Pointer (przechowuje wskaźnik wierzchołka stosu)
- EBP – Base Pointer (rejestr bazowy – służy do adresowania)
- ESI – Source Index (rejestr źródłowy – trzyma źródło łańcucha danych)
- EDI – Destination Index (rejestr przeznaczenia – przetrzymuje informacje o miejscu docelowym łańcucha danych)
Możliwy jest też dostęp do ich 16-bitowych mniej znaczących części – AX
, BX
, CX
, DX
, SP
, BP
, SI
, DI
, a w przypadku czterech pierwszych także do młodszego (Low) i starszego bajta (High) – odpowiednio AL
, AH
, BL
, BH
, CL
, CH
, DL
, DH
.
W procesorach 64-bitowych do rejestrów o długości 64 bitów odwołuje się poprzez nazwę z przedrostkiem R zamiast E – np. RAX, RBX.
Są też dostępne rejestry segmentów, określające położenie segmentów pamięci w przestrzeni adresowej (gdy procesor pracuje w trybie rzeczywistym lub wirtualnym) lub deskryptory segmentów (w trybie chronionym):
- CS – Code Segment (segment kodu);
- DS – Data Segment (segment danych);
- ES – Extra Segment (dodatkowy segment danych);
- SS – Stack Segment (segment stosu);
- FS – dodatkowy rejestr segmentu;
- GS – dodatkowy rejestr segmentu.
Ponadto istnieją:
- EFLAGS – rejestr flag procesora, składający się z pojedynczych bitów określających stan procesora;
- EIP – wskaźnik adresowy na aktualnie wykonywaną instrukcję. Za jego pomocą procesor realizuje m.in. skoki, pętle, przejścia do podprogramów;
- rejestry koprocesora arytmetycznego:
- osiem rejestrów stosu koprocesora, oznaczanych w zależności od kompilatora jako
ST0
...ST7
,0
...7
lubST(0)
...ST(7)
; - rejestr stanu koprocesora;
- rejestr stanu stosu koprocesora;
- rejestr sterujący koprocesora;
- osiem rejestrów stosu koprocesora, oznaczanych w zależności od kompilatora jako
- rejestry kontrolne procesora
CRn
(n – numer rejestru); - rejestry debugera
DRn
(n – numer rejestru); - rejestry MMX (rozszerzenie) – 8 rejestrów 64-bitowych nazywanych
mm0
...mm7
(zamapowane na rejestry FPU); - rejestry SSE (rozszerzenie):
- 8 rejestrów 128-bitowych nazywanych
xmm0
...xmm7
; w trybie 64-bitowym dostępne jest 8 kolejnych rejestrów 128-bitowychxmm8
...xmm15
; - rejestr kontrolno-sterujący
mxcsr
.
- 8 rejestrów 128-bitowych nazywanych
Liczba rejestrów
edytujPoniższa tabela przedstawia liczbę ogólnych i zmiennoprzecinkowych rejestrów w niektórych architekturach procesorów.
Architektura procesora |
Liczba rejestrów | |
---|---|---|
ogólnego zastosowania | zmiennoprzecinkowych | |
x86 | 8 | 8[1] |
x86-64 | 16 | 16[2] |
IA-64 | 128 | 128 |
SPARC | 32 | 32[3] |
IBM POWER | 32 | 32 |
PA-RISC | 32 | 32 |
DEC Alpha | 32 | 32 |
6502 | 3 | 0 |
PIC | 1 | 0 |
ARM | 16 | 32[4] |
Zobacz też
edytujPrzypisy
edytuj- ↑ Ta liczba odnosi się do rejestrów x87, procesory z rozszerzeniem SSE mają 8 dodatkowych rejestrów XMM. Pierwsze procesory x86 były jednak pozbawione jednostki i rejestrów zmiennoprzecinkowej.
- ↑ Ta liczba odnosi się do rejestrów XMM jednostki SSE, procesory mają jednak dodatkowe 8 rejestrów x87.
- ↑ Ze względu na zastosowany w tej architekturze procesorów mechanizm przesuwanych okien rejestrów, jest to liczba rejestrów widocznych w przez oprogramowanie w danym momencie, a nie ogólna liczba rejestrów dostępnych w procesorze.
- ↑ Liczba ta odnosi się do 64-bitowych rejestrów jednostki NEON. Jednostka zmiennoprzecinkowa jest jednak opcjonalna w architekturze ARM. Ponadto istnieją jej inne implementacje i tryby pracy, w efekcie których liczba dostępnych rejestrów może być różna.