DOS-extender для компилятора Borland C++ 3.1
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: решебник по геометрии класс, дипломная работа методика
| Добавил(а) на сайт: Savinkov.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
// Зарезервированное поле, должно быть
// сброшено в 0 всегда (для процессоров 286) 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);
Макрос MK_LIN_ADDR определен в файле tos.h и служит для преобразования адреса реального режима формата сегмент:смещение в физический адрес:
#define MK_LIN_ADDR(seg,off) (((unsigned long)(seg))ss = ds; t->ip = (word)ip; // указатель команд t->sp = (word)sp; // смещение стека t->bp = (word)sp;
}
// ----------------------------------------------
// Функция инициализации дескриптора в таблице GDT
// -------------------------------------------------
void init_gdt_descriptor(descriptor *descr, unsigned long base, word limit, unsigned char type)
{
// Младшее слово базового адреса descr->base_lo = (word)base;
// Старший байт базового адреса descr->base_hi = (unsigned char)(base >> 16);
// Поле доступа дескриптора descr->type_dpl = type;
// Предел descr->limit = limit;
// Зарезервированное поле, должно быть
// сброшено в 0 всегда (для процессоров 286) descr->reserved = 0;
}
// --------------------------------------------
// Инициализация всех таблиц и вход
// в защищённый режим
// -----------------------------------------------
void Init_And_Protected_Mode_Entry(void)
{ union REGS r;
// Инициализируем таблицу GDT, элементы с 1 по 5
init_gdt_descriptor(&gdt[1], MK_LIN_ADDR(_CS, 0),
0xffffL, TYPE_CODE_DESCR | SEG_PRESENT_BIT |
SEG_READABLE);
init_gdt_descriptor(&gdt[2], MK_LIN_ADDR(_DS, 0),
0xffffL, TYPE_DATA_DESCR | SEG_PRESENT_BIT |
SEG_WRITABLE);
init_gdt_descriptor(&gdt[3],
MK_LIN_ADDR(_DS, &task_1_tss),
(unsigned long)TSS_SIZE-1, TYPE_TSS_DESCR | SEG_PRESENT_BIT);
init_gdt_descriptor(&gdt[4],
MK_LIN_ADDR(_DS, &task_2_tss),
(unsigned long)TSS_SIZE-1, TYPE_TSS_DESCR |
SEG_PRESENT_BIT);
init_gdt_descriptor(&gdt[5],
Рекомендуем скачать другие рефераты по теме: диплом купить, скачать конспект урока.
Категории:
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата