Защищенный режим процессоров Intel

         

с адресом gdt_gdt описывает саму


Так как дескриптор с адресом gdt_gdt описывает саму таблицу GDT (и формат этого дескриптора подходит для команды LGDT), его можно использовать для загрузки регистра GDTR:

lgdt [QWORD gdt_gdt] Если вы создаёте программу на языке Си, глобальная таблица дескрипторов GDT может быть определена с помощью типа descriptor следующим образом:

descriptor gdt[5]; В этом примере создаётся таблица GDT, содержащая пять дескрипторов. Тип descriptor определяется так:

typedef struct descriptor { word limit; word base_lo; unsigned char base_hi; unsigned char access; unsigned reserved; } descriptor; Инициализацию дескрипторов в таблице GDT можно выполнить, например, с помощью следующей функции:

void init_gdt_descriptor(descriptor *descr, // указатель // на инициализируемый // дескриптор unsigned long base, // базовый адрес сегмента word limit, // предел сегмента unsigned char acc_byte) // поле доступа { descr->base_lo = (word)base; descr->base_hi = (unsigned char)(base >> 16); descr->access = acc_byte; descr->limit = limit; descr->reserved = 0; } Приведём пример использования этой функции для записи в третий по счёту элемент GDT информации о сегменте данных с сегментным адресом _DS и пределом 0xffff:

init_gdt_descriptor(&gdt[2], MK_LIN_ADDR(_DS, 0), 0xffffL, TYPE_DATA_DESCR | SEG_PRESENT_BIT | SEG_WRITABLE); Преобразовать логический адрес реального режима (сегмент:смещение) в физический адрес можно с помощью следующей макрокоманды:

#define MK_LIN_ADDR(seg,off) (((unsigned long)(seg))<<4)+(word)(off) Для формирования поля доступа в нашем примере используются такие определения:

#define TYPE_CODE_DESCR 0x18 #define TYPE_DATA_DESCR 0x10 #define SEG_WRITABLE 0x02 #define SEG_READABLE 0x02 #define SEG_PRESENT_BIT 0x80 К сожалению, встроенный в Borland C 3.0 Inline-ассемблер не позволяет использовать команду LGDT в программе, составленной на языке Си. Аналогичное ограничение имеется и в Microsoft Quick C. Поэтому для загрузки этого и некоторых других регистров приходится использовать отдельные модули, составленные полностью на языке ассемблера.


Содержание  Назад  Вперед







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий