Rejestr segmentowy
Z Wikipedii
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.
[edytuj] 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(aby uzyskać przesunięcie w prawo w segmencie o 4 bity - 24, czyli brakujące 4 bity do 20 bitów adresu rzeczywistego wypełnia się zerami) i dodaje przesunięcie (OFFSET) ( odległość od początku segmentu).
zawartość_rejestru_segmentowego * 16 + offset = adres_fizyczny
[edytuj] 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. Uwaga: w tym trybie zawartość rejestru segmentowego nazywana jest selektorem