Rejestr segmentowy
Rejestr segmentowy – rejestr procesora stworzony do przechowywania adresu początkowego obszaru pamięci, w którym umieszczone są rozkazy, dane albo stos programu. W procesorach o architekturze x86 występuje 6 rejestrów segmentowych:
- CS – 16-bitowy rejestr segmentu kodu programu
- DS – 16-bitowy rejestr segmentu danych
- SS – 16-bitowy rejestr segmentu stosu
- ES, FS, GS – 16-bitowe rejestry pomocnicze dla danych
Rejestry segmentowe są realizacją idei segmentacji pamięci i lokalności danych.
Tryb rzeczywisty
W trybie rzeczywistym adresy mają 20 bitów, natomiast rejestry mają 16 bitów. Zatem by uzyskać fizyczny adres komórki pamięci, zawartość rejestru segmentowego mnoży się razy 16 (brakujące 4 bity do 20 bitów adresu rzeczywistego wypełnia się zerami) i dodaje przesunięcie (OFFSET), czyli odległość od początku segmentu.
zawartość_rejestru_segmentowego * 16 + offset = adres_fizyczny
Tryb chroniony
W trybie chronionym rejestry segmentowe zawierają selektory, które wskazują na pole w tablicy deskryptorów. Z wskazanego elementu tablicy deskryptorów procesor pobiera 32-bitowy adres bazowy (w przypadku 80286 deskryptor zawiera jedynie 24-bitowy adres bazowy), który sumowany jest z przesunięciem. Tak powstaje adres liniowy, który przy włączonym mechanizmie stronicowania zostaje poddany transformacji na adres fizyczny.