You are on page 1of 4

REJESTRY

Procesor, a ściślej ALU, pracuje jedynie na danych zgromadzonych w rejestrach, więc żeby
procesor wykonał jakieś działanie, trzeba najpierw załadować rejestry, później odczytać
znajdujący się w nich wynik. W praktyce jest to szereg komórek pamięci, które znajdują się w
obudowie procesora a nie na zewnątrz, w osobnym układzie scalonym. Grupy tych komórek
mają ściśle określone nazwy i przeznaczenie. Wszystkie mają rozmiar 16 bitów. Oto ich
schematyczna postać:

bit: 15 7 0
AH AL Akumulator AX
BH BL Rejestr bazowy BX
CH CL Rejestr zliczający CX
DH DL Rejestr danych DX

SP Wskaźnik stosu
BP Wskaźnik bazy
SI Rejestr indeksowy źródła
DI Rejestr indeksowy przeznaczenia

CS Rejestr segmentowy programu


DS. Rejestr segmentowy danych
SS Rejestr segmentowy stosu
ES Rejestr segmentowy dodatkowy

IP Wskaźnik programu

FLAGS Rejestr znaczników (flag)

A oto ich przeznaczenie :


Rejestry AX,BX,CX,DX są rejestrami ogólnego przeznaczenia. Są wykorzystywane do
przechowywania danych, wykonywania operacji logicznych arytmetycznych itp.
AX wykorzystywany głównie do operacji arytmetyczno logicznych,
BX wykorzystywany przy adresowaniu pamięci
CX wykorzystywany jako licznik
DX wykorzystywany przy operacjach mnożenia i dzielenia, a także do wysyłania i
odbierania danych z portów.
Każdy z nich można traktować jako parę rejestrów ośmiobitowych (np. AL i AH). Oto

przykład
Rejestr AL zawiera wartość l0h
Rejestr AH zawiera wartość 2Bh
Z tego wynika że rejestr AX zawiera wartość 2B10h

Do każdego z tych 8-bitowych rejestrów istnieje niezależny dostęp.


W komputerach 32-bitowych rejestry EAX,EBX,ECX,EDX pełnią rolę rejestrów
ogólnego przeznaczenia. Podobnie jak powyżej, istnieje dostęp do bajtu (AH lub AL),
słowa (AX) lub podwójnego słowa (EAX).
Rejestry SP i BP (ESP i EBP) są rejestrami wskaźnikowymi, są używane do adresowania
pamięci.
Rejestry SI,DI (ESI, EDI) służą do adresowania danych w zasięgu segmentu,
SI indeksują pamięć oraz wskazują obszar z którego przesyłane są dane.
DI indeksują pamięć oraz wskazują obszar do którego przesyłane są dane.
Rejestr CS wskazuje segment programu, z którego pobierane są rozkazy do wykonania.
Rejestr DS wskazuje segment, w którym znajdują się dane zdeklarowane w programie.
Rejestr ES wskazuje dodatkowy segment danych.
Rejestr SS wskazuje segment, w którym jest zdefiniowany stos.
Rejestr IP (EIP) wskazuje aktualnie wykonywaną instrukcje programu.
Rejestr Flags jest słowem, którego kolejne bity są ustawiane w zależności od zaistnienia jakiegoś
zjawiska.

W komputerach 32-bitowych sprawy nieco się komplikują. Oto obraz rejestrów


procesorów typu 80386, i486 oraz Pentium:
bit: 31 15 7 0
AH AL Akumulator EAX (AH i AL dają AX)
BH BL Rejestr bazowy EBX (BH i BL dają BX)
CH CL Rejestr zliczający ECX (CH i CL dają CX)
DH DL Rejestr danych EDX (DH i DL dają DX)

SP Wskaźnik stosu ESP


BP Wskaźnik bazy EBP
SI Rejestr indeksowy źródła ESI
DI Rejestr indeksowy przeznaczenia EDI

CS Rejestr segmentowy programu


DS Rejestr segmentowy danych
SS Rejestr segmentowy stosu
ES Rejestr segmentowy dodatkowy
FS
GS

IP Wskaźnik programu EIP

FLAGS Rejestr znaczników(flag) EFLAGS

MSW CR0
CR2 blok rejestrów sterujących
CR3 pracą procesora
DR0 DR0-DR7:
DR1 zbiór rejestrów uruchomieniowych,
DR2 służących sterowaniu pułapkami
DR3 sprzętowymi
DR4
DR5
DR6
DR7

TR6 Rejestry testujące pamięć


TR7 asocjacyjną

Bit:47 0
GDTR Rejestry systemowe
IDTR
LDTR
TR
15 0

Rejestry GDTR i LDTR służą do ustalania adresów globalnych i lokalnych tablic


deskryptorów
Rejestr TR służy do przechowywania segmentu stanu aktualnie wykonywanego zadania.
Rejestr IDTR służy do przechowywania adresu tablicy deskryptorów przerwań.

Bajt znaczników:
X X X X OF DF IF TF SF ZF X AF X PF X CF x - nie używane

nastąpiło przeniesienie
parzystość
przeniesienie pomocnicze
zero
znak
praca krokowa
zezwolenie na przerwanie
znacznik kierunku
nadmiar (przepełnienie)

A oto przykłady :
1. Gdy dodajemy do siebie dwie liczby, załóżmy binarne, to w momencie gdy wyniku nie da się
przedstawić na zadanej liczbie bitów, ustawiany jest znacznik CF:
1010 1110
+0111 0100
1 0010 0010 liczba przekracza 8 bitów = CF = 1
2. Gdy wykonane działanie, czy to arytmetyczne, czy też logiczne, da nam wynik o parzystej liczbie
bitów o wartości 1, ustawiany jest znacznik PF
0010 1100
+1101 1101
1101 1101 6 bitów ustawionych =PF =1
3. gdy w wyniku działania na liczbach w kodzie BCD nastąpi przeniesienie z bitu 3 na 4 lub
wystąpiła pożyczka z bitu 4 na 3 , ustawiany jest wskaźnik AF.

0010 1110
+ 0111 0100

1010 0010 nastąpiło przeniesienie=AF=1


4. gdy wynik dowolnego działania jest równy 0, ustawiany jest znacznik ZF.
5. gdy najbardziej znaczący bit w wyniku dowolnego działania jest ustawiony, ustawiany jest
także znacznik SF. Ma to znaczenie gdy operujemy na liczbach binarnych ze znakiem.
Znacznik ten jest zgodny z bitem znaku.
6. gdy podczas jakiegokolwiek działania nastąpiło przeniesienie lub pożyczka z bitu znaku, to
znacznik OF jest ustawiany. Ta flaga jest szczególnie istotna, gdy operujemy na liczbach ze
znakiem.
7. gdy znacznik IF jest ustawiony, przerwanie maskowalne nią będzie wykonywane. Gdy
IF=0 , procesor może wykonać skok do adresu obsługi przerwania.

W komputerach 32-bitowych rejestr Eflags jest nieco rozszerzony i wygląda następująco


(opisano jedynie nowe):
X X X
VM RF N IOPL OF DF IF TF SF ZF AF PF CF
MM T |
x - nie używane
znacznik poziomu ochrony wejścia/wyjścia
znacznik zadania zagnieżdżonego
znacznik wznowienia
znacznik trybu wirtualnego

Rejestr CR0 służy do sterowania procesora i wygląda następująco:

31 0
PG x x x x x ET TS K M PE
x.. M P x - nie używane
bit trybu wirtualnego
bit monitorowania kooprocesora
bit trybu emulacji kooprocesora
bit przełączania zadania
bit typu kooprocesora
bit stronicowania

You might also like