Лекція №3.
Регістри GDTR, LDTR, IDTR, TR і CPUID.Системні інструкції.
Існує 4 регістри для управління пам’яттю: GDTR, LDTR, IDTR, TR, які вказують розміщення структур даних, що призначені для управління сегментами пам’яті. Для зчитування та завантаження цих регістрів існують спеціальні інструкції.
Регістр GDTR(Global Destcriptor Table Register) призначений для зберігання 32-бітової базової адреси і 16-бітового обмежувача(table limit) таблиці для GDT. Базова адреса вказує лінійну адресу байта 0 GDT; обмежувач таблиці вказує кількість байтів в таблиці.
Інструкції LGDT і SGDT, відповідно, зчитують і записують регістр GDTR. При увімкненні живлення або скиданні процесора, базова адреса встановлюється в значення по замовченню – 0 і обмежувач – FFFFH. Нова базова адреса повинна бути завантажена в GDTR як частина процесу ініціалізації процесора для операцій захищеного режиму(protected mode).
Регістр LDTR(Local Destcriptor Table Register) зберігає 16-бітний селектор сегмента, 32-бітну базову адресу, 16-бітний обмежувач сегменту і атрибути дескриптора для LDT. Базова адреса вказує лінійну адресу байта 0 сегменту LDT; обмежувач сегменту вказує кількість байтів в сегменті.
Інструкції LLDT і SLDT, відповідно, зчитують і запам’ятовують частину регістру LDTR – сегментний селектор. Сегмент, який містить LDT повинен мати описувач сегменту (segment descriptor) в GDT. Коли інструкція LLDT зчитує селектор сегменту в LDTR, базова адреса, обмежувач і атрибути дескриптора з LDT автоматично завантажуються в LDTR.
При переключенні задачі, LDTR автоматично завантажується сегментним селектором і дескриптором для LDT нової задачі. Вміст LDTR автоматично не запам’ятовується до того, як не запишеться нова LDT інформація в регістр.
При увімкненні живлення або скиданні процесора, базова адреса встановлюється в значення по замовченню – 0 і обмежувач – FFFFH.
Регістр IDTR(Interrupt Descriptor Table Register) зберігає 32-бітову базову адресу і 16-бітовий табличний обмежувач для IDT. Базова адреса вказує лінійну адресу байту 0 IDT; табличний обмежувач вказує кількість байтів в таблиці.
Інструкції LIDT і SIDT, відповідно, зчитують і запам’ятовують регістр IDTR. При увімкненні живлення або скиданні процесора, базова адреса встановлюється в значення по замовченню – 0 і обмежувач – FFFFH. Базова адреса і обмежувач можуть бути змінені під час процесу ініціалізації процесора.
Регістр задач – TR(Task Register) - зберігає 16-бітовий селектор, 32-бітову базову адресу і атрибути дескриптора для TSS біжучої задачі. Він посилається на дескриптор TSS в GDT. Базова адреса вказує лінійну адресу байту 0 TSS; обмежувач сегменту вказує кількість байтів в TSS.
Інструкції LTR і STR, відповідно, зчитують і зберігають сегментний селектор – частину TR. Коли інструкція LTR зчитує сегментний селектор в регістр задач, базова адреса, обмежувач, атрибути дескриптора з дескриптора TSS автоматично зчитуються з TR. При увімкненні живлення або скиданні процесора, базова адреса встановлюється в значення по замовченню – 0 і обмежувач – FFFFH.
Коли відбувається переключення задачі TR автоматично завантажується сегментним селектором і дескриптором для нової задачі. Вміст TR автоматично не запам’ятовується до того, як не запишеться нова TR інформація в регістр.
Керуючі регістри CR0, CR1, CR2, CR3 і CR4 визначають режим роботи процесора і характеристики біжучої задачі.
CR0 – містить системні управляючі прапорці, які керують режимом обчислень і станом процесора.
CR1 – зарезервовано.
CR2 – містить лінійну адресу місця, де відбувся page fault.
CR3 – містить фізичну адресу бази списку сторінок(page directory) і два прапорця (PCD і PWT). Цей регістр також відомий як базовий регістр списку сторінок(PDBR – page-directory base register).
CR4 – містить групу прапорців, що дозволяють декілька архітектурних розширень.
В захищеному режимі інструкція MOV дозволяє керуючим регістрам бути прочитаними(на будь-якому рівні привілеїв) або завантаженими(тільки на рівні привілеїв 0). Це обмеження говорить про те, що користувацьким програмам(запущеним на рівнях 1, 2, 3) не дозволяється записувати в управляючі регістри; але, вони можуть прочитати ці регістри.
Програми не повинні намагатись змінити будь-які з зарезервованих бітів. Вони повинні тільки читатись.
Короткий опис бітів вищезгаданих регістрів:
PG(PAGING) –коли не встановлений, - лінійна адреса трактується як фізична.
CD(Cache Disable) – коли прапорці CD і NW не встановлені, кешування пам’яті увімкнене.
NW(Not Write-through) – коли прапорці NW і CD не встановлені, зворотній запис(write-back) для Pentium або членів родини P6 або наскрізний запис(write-through) – для Intel486 доступні.
AM(Alignment Mask) – дозволяє автоматичну перевірку вирівнювання, якщо встановлений.
WP(Write Protect) – захищає процедури рівня супервізора від запису в read-only сторінки рівнів користувачів.
NE(Numeric Error) – якщо встановлений, дозволяє внутрішній(вбудований) механізм для повідомлення про помилки в FPU.
ET(Extension Type) – зарезервовано для родини P6 і Pentium.
TS(Task Switched) – дозволяє затримувати запис контексту FPU при переключенні задач до тих пір, доки FPU дійсно не буде використовуватись новою задачею.
EM(Emulation) – якщо встановлений, вказує, що процесорне не має внутрішнього або зовнішнього FPU.
MP(Monitor Coprocessor) – керує взаємодією інструкції WAIT(FWAIT) з прапорцем TS. Якщо встановлений, інструкція WAIT генерує виключення типу пристрій не доступний якщо TS встановлений. Якщо MP  не встановлений, інструкція WAIT ігнорує установку прапорця TS.
PE(Protection Enable) – якщо встановлений, дозволяє захищений режим; якщо не встановлений, дозволяє режим реальної адресації.
PCD(Page-level Cache Disable) – контролює кешування біжучого списку сторінок (page directory)
PWT(Page-level Writes Transparent) – керує зворотнім та наскрізним записом біжучого списку сторінок.
VME (Virtual-8086 Mode Extensions) - дозволяє переривання і обробку виключень у віртуальному 8086 режимі.
PVI (Protected-Mode Virtual Interrupts) – дозволяє апаратну підтримку для Virtual Interrupt Flag(VIF) в захищеному режимі.
TSD (Time Stamp Disable) – забороняє виконання інструкції RDTSC для процедур, що запущені з рівнем привілеїв 0.
PSE (Page Size Extensions) – дозволяє 4МБ сторінки.
PAE (Physical Address Extension) – дозволяє роботу механіхму заміщення сторінок для посилання 36-бітовою фізичеою адресою.
MCE (Machine-Check Enable) – дозволяє Machine-Check виключення.
PGE (Page Global Enable) – дозволяє механізм глобальних сторінок.
PCE (Performance-Monitoring Counter Enable) – дозволяє виконання інструкції RDPMC для програм або процедур, що запущені під будь-яким рівнем захисту.
Прапорці VME, PVI, TSD, DE, PSE, PAE, MCE, PGE і PCE в регістрі управління CR4 залежать від моделі. Всі ці прапорці(за виключенням PCE) мщжуть використовуватись інструкцією CPUID для визначення їх присутності для подальшого використання.
Наведу перелік системних інструкцій з описом: