неділю, 29 травня 2011 р.

Уроки захищеного режиму x86. Урок 2

Другий урок захищеного режиму. 

Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 2

Створюємо GDT. Поміщаємо туди три дескриптори сегментів, які співпадають з відповідними сегментами реального режиму -- сегмент коду, сегмент даних та сегмент стеку. Будуються вони наступним чином: база - CS/DS/SS*10h, ліміт - 0xFFFFh, грануляція - байтова. Крім того, створюємо сегмент що відповідає буферу відеопам'яті -- база 0xB8000h. Всі сегменти - 16-бітні. Створивши таку GDT, переходимо в захищений режим, виводимо на екран повідомлення, "Hello from PMode!", виходимо з нього та завершуємо програму. Так як сервіси BIOS чи DOS нам недоступні, вивід на екран здійснюємо звертаючись безпосередньо до відеопам'яті. 

Описано (болдом виділено те, що безпосередньо відноситься до захищеного режиму):
  1. Формат селектора сегменту. 
  2. Формат дескрипторів, в коді програми - спосіб їх формування.
  3. Типи дескрипторів.
  4. Обчислення лінійної адреси.
  5. Тіньові частини сегментних регістрів.
  6.  Відеопам'ять текстового режиму. Вивід на екран без використання сервісів BIOS чи операційної системи (дуже коротко).
  7. Керування вирівнюванням структур в Open Watcom.
 Є як змішана C-asm так і чисто асемблерна реалізації.
Архів з файлами уроку: pm_02.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений IDT, введенню в обробку переривань і суміжним питанням.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.