Rejestr segmentowy

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

Rejestr segmentowyrejestr 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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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.

Zobacz też[edytuj | edytuj kod]