Asembler x86/Zaawansowana architektura: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Doles (dyskusja | edycje)
Doles (dyskusja | edycje)
Nie podano opisu zmian
Linia 23:
Każdy nasz "logiczny segment" jest reprezentowany przez tzw '''deskryptor segmentu''', o długości 8 bajtów (64 bity). Deskryptor ten zaś jak sama nazwa wskazuje opisuje nasz segment. Wspomiany deskryptor znajduje się w tablicy deskryptorów. Mogłeś sobie postawić pytanie: "W której ? Przecież są dwie tablice: GDT i LDT" Odpowiedź: "To zależy od pola TI w selektorze segmentu". Poniżej znajduje się obrazek prezentujący jak wygląda deskryptor segmentu wraz z wytłumaczeniem danych pól.
 
 
[[Grafika:Adres_liniowy.jpg|480px]]
 
 
Linia 42 ⟶ 40:
Co musi zrobić system operacyjny aby uzyskać adres liniowy z adresu logicznego ? Dla przykładu mamy wcześniejszy adres logiczny 0xc00d:1001. Najpierw brana jest część 0xC00D. Ineks z selektora segmentu jest pomnożony przez 8 (ponieważ taką długość w bajtach ma deskryptor segmentu). Do tej liczby dodawana jest wartość Base z deskryptora segmentu. Odpowiedni Deskryptor segmentu system operacyjny bierze z GDT lub LDT a to zaś wybiera na podstawie wartości pola TI w selektorze. Po zsumowaniu na sam koniec dodawana jest wartość offsetu z naszego adresu logicznego czyli 0x1001.
Poniżej znajduje się rysunek pokazujący jak powstaje adres liniowy:
 
[[Grafika:Adres_liniowy.jpg|480px]]
 
 
===Translacja na adres fizyczny===