Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Защищенный режим, совсем простые вопросы


Автор: lesha_od 8.1.2007, 20:36
Привет!
Завтра к/р по защищенному режиму, нужно несколько задач проработать. Не могу найти нигде, как решить.

1. Записать содержимое регистра GDTR, если размер GDT 25 байт, а базовый адрес 35A00h.
2. Записать дескриптор для сегмента стека в защищенном режиме, начинающегося по адресу 47000h и имеющего размер 127 б
3. Что будет записано в регистр ES в защищенном режиме, если дескриптор дополнительного сегнмента находится в GDT под номером 1? Почему?

Спасибо за помощь.
Буду благодарен за ссылки на статьи по этому делу, или книжки, где это объясняется... нигде не нашел пока.

Автор: MAKCim 8.1.2007, 20:49
Цитата

1. Записать содержимое регистра GDTR, если размер GDT 25 байт, а базовый адрес 35A00h.

Код

...
mov CX, 24
mov EBX, 35A00h
mov word ptr [ESP - 6], CX
mov dword ptr [ESP - 4], EBX
lgdt [ESP - 6]
...

странно, как может быть GDT быть 25 байт

Добавлено @ 21:00 
Цитата

2. Записать дескриптор для сегмента стека в защищенном режиме, начинающегося по адресу 47000h и имеющего размер 127 б

Код

...
    desc db 127, 0, 0, 70h, 4h, 11110110b, 01000000b, 0
...

Автор: lesha_od 8.1.2007, 21:02
MAKCim, 
спасибо,
может быть ошибочно переписал... он ведь должен быть кратен 8 ?

А без ассемблера, то есть вручную, это можно записать? Или это задание решается только через асм?

Автор: MAKCim 8.1.2007, 21:04
Цитата

3. Что будет записано в регистр ES в защищенном режиме, если дескриптор дополнительного сегнмента находится в GDT под номером 1? Почему?

может быть под номером 0?
если под 0, то запишется нулевой селектор, который показывает, что данный селектор не используется (если его использовать, получим #GP)

Автор: lesha_od 8.1.2007, 21:05
MAKCim, по поводу 2-го задания: то есть 1 параметр - размер, дальше по очереди 4-70-00 в обратном порядке, а дальше все время одни и те же числа? что они значат?

Автор: MAKCim 8.1.2007, 21:06
Цитата

А без ассемблера, то есть вручную, это можно записать? Или это задание решается только через асм? 

Что значит вручную?
ну берем переменную 6 байт
в младшее слово пишем размер GDT - 1, в старшее двойное слово - линейный базовый адрес
и загружаем это дело через lgdt

Автор: lesha_od 8.1.2007, 21:08
Цитата

может быть под номером 0?
если под 0, то запишется нулевой селектор, который показывает, что данный селектор не используется (если его использовать, получим #GP)

Вроде как "1".
Где об этом можно подробнее почитать? Я скачал гору разных книжек по Ассемблеру, и то ли не там смотрю, то ли там это слишком закручено описывается...

Автор: MAKCim 8.1.2007, 21:10
Цитата

MAKCim, по поводу 2-го задания: то есть 1 параметр - размер, дальше по очереди 4-70-00 в обратном порядке, а дальше все время одни и те же числа? что они значат?

ты бы про формат дескриптора прочитал для начала
0-1 байт - лимит сегмента
2-3 байт - младшее слово базы сегмента
4 байт - 2 байт базы сегмента
5 байт
наиболее важные биты:
    7 бит - бит присутствия
    6-5 бит - DPL
    4 бит - 1 (не системный)
6 байт - бит гранулярности и пр.
7 байт - старший байт базы сегмента

Добавлено @ 21:12 
Цитата

Где об этом можно подробнее почитать?

если знаешь английский
то вот http://www.intel.com/products/processor/manuals/

Автор: lesha_od 8.1.2007, 21:56
Спасибо. Буду разбираться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)