Podstawy
W procesorze Intel386 występuje osiem rejestrów ogólnego przeznaczenia: EAX, EBX, ECX, EDX, ESI, EDI, EBP i ESP. Są one przeznaczone do przechowywania:
- operandów dla operacji arytmetycznych i logicznych
- operandów do obliczeń adresowych
- wskaźników pamięci
Mimo, że rejestry te nazywają się 'rejestrami ogólnego przeznaczenia', to jednak konstrukcja procesora czasami wymaga zastosowania ściśle określonych rejestrów do odpowiednich zadań. Przykładem mogą być instrukcje działające na ciągach danych, które korzystają z rejestrów ECX, ESI i EDI, czy też przy zastosowaniu segmentacji pamięci niektóre z instrukcji przyjmują, że wskaźnik pamięci umieszczony w rejestrze EBX odnosi się do segmentu umieszczonego w rejestrze . Również używanie rejestru ESP jako ogólnego przeznaczenia, podczas korzystania ze stosu programowego, może być niebezpieczne. W skrócie można przyjąć, że rejestry, poza ich 'ogólnym' przeznaczeniem służą jako:
- EAX - akumulator dla operacji arytmetycznych i logicznych, miejsce przechowywania wyników
- EBX - wskaźnik danych w rejestrze segmentowym
- ECX - licznik pętli, licznik dla operacji działających na ciągach
- EDX - wskaźnik operacji wejścia/wyjścia; wynik/operand dla operacji mnożenia/dzielenia
- ESI - wskaźnik danych w rejestrze segmentowym ; wskaźnik źródła dla operacji łańcuchowych
- EDI - wskaźnik danych w rejestrze segmentowym ; wskaźnik przeznaczenia dla operacji łańcuchowych
- ESP - wskaźnik stosu w rejestrze segmentowym SS
- EBP - wskaźnik danych na stosie w rejestrze segmentowym SS
![]() |
Rys. Podział rejestrów ogólnego przeznaczenia |
Jak pokazano na rysunku, w rejestrach ogólnego przeznaczenia, szesnaście bitów młodszych odpowiada dokładnie rejestrom w procesorach 8086/Intel286 i może być dostępne poprzez nazwy AX, BX, CX, DX, BP, SP, SI i DI. Podobnie dwa dolne bajty rejestrów EAX, EBX, ECX i EDX może być dostępne bezpośrednio poprzez odwołanie się z wykorzystaniem nazw AH, BH, CH, DH dla starszego bajtu i AL, BL, CL i DL dla bajtu młodszego. Starsze bajty rejestrów (bity od 16 do 32) nie są dostępne bezpośrednio, i aby je wykorzystać, nie niszcząc wartości pozostałej części rejestru, należy użyć np. operacji logicznych (AND, OR).