Opublikowano: 08-04-2017



O rejestrach procesora możemy myśleć jak o pewnego rodzaju zmiennych - miejscach o różnych rozmiarach, w których można przechowywać dane.

Dokumentacja Intela (Intel® 64 and IA-32 architectures software developer's manual volume 1: Basic architecture - 3.4.1 General-Purpose Registers) opisuje, że rejestry ogólnego przeznaczenia przechowują następujące informacje:

  • argumenty dla operacji logicznych i arytmetycznych
  • argumenty dla operacji dokonywanych na adresach
  • wskaźniki na miejsca w pamięci

Kilka z nich mieliśmy okazję zobaczyć we wcześniejszych wpisach - rax, rbp, rsp. Czas poznać kolejne, dlatego poniżej zamieszczam tabelę (prosto z MSDN - x64 Architecture) prezentującą dostępne rejestry:

64-bit register Lower 32 bits Lower 16 bits Lower 8 bits
rax eax ax al
rbx ebx bx bl
rcx ecx cx cl
rdx edx dx dl
rsi esi si sil
rdi edi di dil
rbp ebp bp bpl
rsp esp sp spl
r8 r8d r8w r8b
r9 r9d r9w r9b
r10 r10d r10w r10b
r11 r11d r11w r11b
r12 r12d r12w r12b
r13 r13d r13w r13b
r14 r14d r14w r14b
r15 r15d r15w r15b

W tabeli widzimy rejestry mogące pomieścić dane 16-bitowe (ax, bx, cx, ...bp, sp), które zostały podzielone na rejestry ośmiu dolnych bitów (al, bl, cl, ..., bpl, spl) oraz ośmiu górnych (ah, bh, ch, ..., gph, bph) nieujętych w tabeli. Rejestrów górnych bitów nie używa się często, nie są one też obsługiwane przez wszystkie operacje.

Rejestry 16-bitowe zostały rozszerzone do 32 bitów i otrzymały nowe nazwy (eax, ebx, ecx, ..., ebp, esp). Łatwo rozpoznać, że rozpoczynają się one od litery e.

Wraz z wprowadzeniem procesorów 64-bitowych, rejestry 32-bitowe zostały rozszerzone do 64 bitów. Nadano im nowe nazwy (rax, rbx, rcx, ..., rbp, rsp) rozpoczynające się od litery r. Oprócz tego wprowadzono rejestry r8 - r15, r8d - r15d (double word), r8w - r15w (word), r8b - r15b (byte) i dostosowano ich podział tak, by odpowiadał tym już wcześniej istniejącym. Z tego powodu nazewnictwo rodziny rejestrów r8 - r15 jest inne. Drobna uwaga, Intel nazywa rejestry r8b - r15b jako r8l - r15l (Register Names in 64-bit Mode).

Mimo że są to rejestry ogólnego przeznaczenia, niektóre z nich (szczególnie rsp) mają szczególne znaczenie i nie powinny być używane w innych celach. Dokumentacja Intela (Intel® 64 and IA-32 architectures software developer's manual volume 1: Basic architecture - 3.4.1 General-Purpose Registers) wskazuje sposoby użycia poszczególnych rejestrów:

  • EAX — Accumulator for operands and results data
  • EBX — Pointer to data in the DS segment
  • ECX — Counter for string and loop operations
  • EDX — I/O pointer
  • ESI — Pointer to data in the segment pointed to by the DS register; source pointer for string operations
  • EDI — Pointer to data (or destination) in the segment pointed to by the ES register; destination pointer for string operations
  • ESP — Stack pointer (in the SS segment)
  • EBP — Pointer to data on the stack (in the SS segment)

Do zobaczenia w przyszłym tygodniu!



Comments powered by Disqus