Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Проблема при переводе процессора в защищенный режим (http://forum.oszone.net/showthread.php?t=65001)

LeonidPr 27-04-2006 21:17 432342

Проблема при переводе процессора в защищенный режим
 
Возникает следующая проблема. Когда я подготавливаю дескриптор в таблице GDT для сегмента стека, то указываю, что этот сегмент расширяется вниз, то есть устанавливаю бит ED (Expand Down). Но, при таком значении этого бита, процессор отказывается переходить в защищенный режим. Если этот бит сбросить в 0, то все нормально. Почему так происходит? В моей книжке в тексте примера этот бит установлен, но на дискете к книге в исходнике этот бит сброшен, т.е. сегмент стека является просто сегментом данных. Ничего по этому поводу в книге не говорится. Может, кто нибудь знает, в чем дело. Подскажите, пожалуйста.

DillerInc 28-04-2006 01:05 432421

LeonidPr
Что-то немного непонятно -- чего ты хочешь добиться,какая твоя цель?
Да,стек в принципе является сегментом данных,но у него есть одна характерная особенность -- он растёт в сторону младших адресов,и у меня подобное поведение ассоциируется как раз с расширением вверх.
А если к тому же учесть,что эта особенность заложена в алгоритм команд работы со стеком,то можно предположить,что именно это разногласие и обуславливает капризы процессора.
Что за книжка,какой пример??В общем,подробнее пожалуйста.

LeonidPr 28-04-2006 17:00 432491

Под расширением вниз я подразумеваю уменьшение esp командой push. в принципе, я обычный сегмент данных могу отвести под стек и установить sp=Limit-1. Но, не будет ли потом проблем? Именно для этого, ведь, в дескрипторе существует разряд ED. А, вот у Фроловых в "Библиотеке Системного Программиста" этот бит установлен. А книжка - В.Юров "Ассемблер". Книга мне понравилась, так как описывает и сам язык и его применение довольно подробно. Пример к главе 16. Он единственный в этой главе. В примере еще выводится сообщение на экран, но это не суть важно.

BlackEric 28-04-2006 20:26 432536

У Юрова есть опечатки. Так что нужно доверять дискете.

DillerInc 28-04-2006 21:56 432554

LeonidPr
Есть у меня этот Юров "ASSEMBLER, 2-ое издание", но у меня глава 16 называется "Создание Windows-приложений на ассемблере",и никаких примеров перехода из реального режима процессора в защищённый там понятно нет.Но я скачивал дополнительные файлы к книге,и там действительно есть этот пример.
Насколько я понял,ты говоришь о поле типа дескриптора,т.е. о битах 41, 42 и 43.
Вот отрывок из кода с дискеты:
Код:

;бит 2
code_n        equ        00000000b        ;обычный сегмент кода
code_p        equ        00000100b        ;подчиненный сегмент кода
data_        equ        00000000b        ;для сегмента данных
stack_        equ        00000000b        ;для сегмента стека <-- должно быть 00000100b

В случае с сегментами данных установленный 42-ой бит,или E (Expand Down),указывает на то,что это стек.
Можешь посмотреть тут небольшую таблицу.
Согласен с BlackEric'ом насчёт опечаток,но в данном случае бит должен быть установлен,иначе мы наверно останемся без сегмента стека.Возможно,что ошибка кроется где-то в другом месте.


DillerInc 02-05-2006 23:33 433617

LeonidPr
Про переход в защищённый режим можно почитать ещё тут .


Время: 12:41.

Время: 12:41.
© OSzone.net 2001-