Rejestr procesora

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Ten artykuł dotyczy terminu w technice. Zobacz też: innego znaczenia tego słowa.

Rejestry procesora – 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 wyłącznie korzystając z wewnętrznych rejestrów, kopiując do nich dane z pamięci i po zakończeniu obliczeń odsyłając wynik do pamięci.

Rejestry procesora stanowią najwyższy szczebel w hierarchii pamięci, będąc najszybszym z rodzajów pamięci komputera, zarazem najdroższą w produkcji, a co za tym idzie – o najmniejszej pojemności. Realizowane zazwyczaj za pomocą przerzutników dwustanowych, z reguły jako tablica rejestrów (blok rejestrów, z ang. register file).

Liczba rejestrów zależy od zastosowania procesora i jest jednym z kryteriów podziału procesorów na klasy CISC i RISC. Proste mikroprocesory mają tylko jeden rejestr danych zwany akumulatorem, procesory stosowane w komputerach osobistych – kilkanaście, natomiast procesory w komputerach serwerowych mogą mieć ich kilkaset.

Podział ze względu na zastosowanie[edytuj]

Rejestry, ze względu na zastosowanie, można podzielić m.in. na:

  • 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[edytuj]

32-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ą:

  • EFLAGSrejestr 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 lub ST(0)... ST(7);
    • rejestr stanu koprocesora;
    • rejestr stanu stosu koprocesora;
    • rejestr sterujący koprocesora;
  • 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-bitowych xmm8 ... xmm15;
    • rejestr kontrolno-sterujący mxcsr.

Liczba rejestrów[edytuj]

Poniż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ż[edytuj]

Przypisy

  1. 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.
  2. Ta liczba odnosi się do rejestrów XMM jednostki SSE, procesory mają jednak dodatkowe 8 rejestrów x87.
  3. 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.
  4. 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.