В реальному режимi для опису атрибутiв сегмента дескриптор не вимагається, бо базова адреса сегмента (зменшена в 16 разів) зберiгається в сегментному регiстрi, гpаниця сегмента (64 кбайти -1) фiксована i завжди може бути зроблений доступ (запис i читання) до сегмента.
4.2.1. Структура дескриптора сегмента
На рис. 4.2 наведений формат дескриптора сегмента для МП,починаючи з 80386, що має наступнi поля: гpаниця сегмента, що дорiвнює розмiру сегмента, зменшеному на 1, i його базова адреса займають в дескрипторi по два поля: гpаниця - байти 0,1 i молодшi 4 розряди байта 6, базова адреса - байти 2-4 i 7 дескриптора сегмента.
Рис. 4.2. Формат дескриптора сегмента
Наявнiсть двох полів для гpаницi i базові адреси сегмента зв'язана iз забезпеченням сумiсностi програм, написаних для МП 80286, з наступними МП: молодшi шiсть байтiв дескриптора в цьому випадку повнiстю спiвпадають з дескриптором МП 80286.
Бiти старшої частини байта 6 дескриптора мають наступнi призначення:
G (Granularity) - бiт дрiбностi вказує, в яких одиницях задана гpаниця сегмента: при G = 0 - в байтах, при G = 1 - в сторiнках об’ємом по 4 кбайти, таким чином сегмент може мати розмiр до 1 Мбайта (220) при G = 0 i до 4 Гбайт (232) при G 1.
D/B (Default size/Big) - бiт розмiру за замовчуванням визначає для сегмента коду розряднiсть вiдносної адреси i операнда: при D = 0 - 16 розрядiв, при D = 1 - 32 розряди. Розрядність, що приймається за замовчуванням, може бути змiнена за допомогою префiксу розрядності даних (66h) або адреси (67h). Для сегмента стека цей бiт називається B i визначає наступне:
якщо сегмент стека визначений як сегмент даних, тобто ED = 0, то при B = 1 розмiри стека i регiстра ESP дорівнюють 32 (при B = 0 - 16);
якщо сегмент стека поширюється вниз (ED=1), то B визначає розмiр стека: при B=0 вiн рiвний 64 кбайти, при B = 1 - 4 Гбайти.
Бiт X може бути використаний системою або користувачем за своїм розсудом (цей бiт мiкропроцесором не обробляється).
Байт доступу дескриптора визначає права доступу до сегмента, що вибирається i, в залежностi вiд типу сегмента, має декiлька форматiв, представлених на рис. 5.2. Бiти i поля байта доступу мають наступне призначення:
P (Present) - бiт присутностi визначає наявнiсть вiдповiдного сегмента в пам'ятi (P = 1) або його вiдсутнiсть (P = 0).
Якщо в pегiстр сегмента занесен селектор дескриптора, що має Р = 0, то при зверненнi до цього сегмента виникає переривання 11 (для стека - переривання 12);
DPL (Descriptor Privilege Level) - рiвень привiлей дескриптора вказує на ступiнь захисту сегмента при доступi до нього;
S (System) - системний бiт визначає вид дескpиптоpа, що вибирається: S = 0 означає, що це дескриптор системного сегмента i в полi TYPE вказується його тип (рис. 4.3, а);
E (Execute) - бiт виконання визначає, чи можна сегмент виконати: E = 1 означає, що це сегмент коду (рис. 4.3, б), E = 0 - що це або сегмент даних, або стека (рис. 4.3, в);
А (Accessed) - бiт доступу встановлюється апаратно в '1' при доступi до сегмента, тобто при завантаженнi вiдповiдного селектора в сегментний регiстр;
а)
б)
в)
Рис. 4.3. Формат байта доступу:
а) дескриптора системного сегмента;
б) дескриптора сегмента коду;
в) дескриптора сегмента даних і стека
R (Read) - бiт дозволу зчитування використовується для сегмента коду i дозволяє при R = 1 зчитувати його змiст. При R = 0 спроба зчитування призводить до виникнення пеpеpивання 13 (те ж вiдбувається при спробi запису в сегмент коду незалежно вiд R);
C (Conforming) - бiт пiдпорядкування визначає додатковi правила звернення до сегмента коду;
W (Write) - бiт дозволу запису використовується для сегмента даних i дозволяє (при W = 1) або забороняє (при W = 0) змiну змiсту сегмента даних. При порушеннi викликається пеpеpивання 14. Дескриптор сегмента стека обов'язково повинен мати W = 1;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.