Лекція №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 для визначення їх присутності для подальшого використання. Наведу перелік системних інструкцій з описом: