Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процессор Intel в защищенном режиме #5
FAQ: - Чето ты с этими лимитами нездорового напорол в спецвыпуске... Какие то «реальные лимиты», «лимиты в натуре» и т.п. Нельзя ли обойтись без подобных медитаций, просто, как есть на самом деле? Вообще все это напоминает недавний бум с миллениумом: в 1999 году все СМИ как один гудели про то, что новое тысячелетие начнется в 2000 году. Потом посчитали и оказалось, что в 2000 начнется только ПОСЛЕДНИЙ ГОД УХОДЯЩЕГО ТЫСЯЧЕЛЕТИЯ, а новое начнется только в 2001... Вот и я туда же - начал выдумывать какие то " реальные лимиты", к-рые соотвествуют " концу последнего байта в сегменте" и т.п. медитации. Хотел как лучше, получилось как всегда...: (Вот КАК В ШЕСТИ СТРОЧКАХ ВСЕ ВЫГЛЯДИТ НА САМОМ ДЕЛЕ, без вольных импровизаций и медитаций: При G=0: Адрес последнего байта сегмента = Значение поля «База сегмента» + Значение поля «Лимит сегмента»Размер сегмента = Значение поля «Лимит сегмента» + 1При G=1: Адрес последнего байта сегмента = Значение поля «База сегмента» + Значение поля «Лимит сегмента» * 1000h + 0FFFh Размер сегмента = Значение поля «Лимит сегмента» * 1000h + 1000hВообще, ВОТ С ЭТОГО и стоило начинать, и на этом и закончить, ато расписал на 2 выпуска + спецвыпуск какой то мути, всех запутал и напугал новичков... Вообще на этой проблеме не стоит сосредотачиваться, нас ждут вещи поважнее. РЕЗУЛЬТАТЫ КОНКУРСА: Правильные ответы: 1. Descr_code db 34h, 12h, 00h, 00h, 00h, XXh, 0X000000b, 00h; сегмент с базой = 0 и размером = 1235h 2. Descr_data db 0C8h, 0Dh, 36h, 12h, 00h, XXh, 0X100000b, 00h; сегмент с базой = 1236h и размером = 0DC9h 3. Descr_stack db 0FFh, 00h, 00h, 20h, 00h, XXh, 1X000000b, 00h; сегмент с базой = 2000h и размером = 100000h 4. Descr_code2 db 0DEh, 0BCh, 01h, 20h, 10h, XXh, 0X001010b, 00h; сегмент с базой = 102001h и размером = 0ABCDFh 5. Descr_data2 db 00h, 00h, 00h, 00h, 00h, XXh, 0X000000b, 10h; сегмент с базой = 10000000h и размером = 1 6. Descr_stack2 db 01h, 00h, 10h, 00h, 00h, XXh, 0X000001b, 10h; сегмент с базой = 10000010h и размером = 10002h 7. Descr_LDT db 04h, 00h, 00h, 00h, 00h, XXh, 1X000000b, 20h; сегмент с базой = 20000000h и размером = 5000hДополнительные задания: Ошибка во втором дескрипторе: бит 21 во втором двойном слове дескриптора ДОЛЖЕН ВСЕГДА равняться нулю. Те, кто знакомы с компиляторами типа TASM без труда смогут загрузить GDTR так: mov eax, offset GDTmov dword ptr GDTR+2, eaxlgdt fword ptr GDTR(но вообще это забегая вперед)Краткое содержание предыдущих серий… Итак, сначала ты узнал, что программа состоит из сегментов и все они расположены в памяти. Каждый сегмент описывает специальная структура – дескриптор. Дескриптор хранится в специальной таблице. Найти в океане памяти таблицу можно по специальному регистру (GDTR, LDTR). Это как в той сказке: на острове – дуб, на дубе ларец, в ларце – яйцо, в яйце – игла и т.д. Ну и с битом гранулярности вроде разобрались (слава Богу!), теперь пора двигать дальше.
|