В каком режиме загружаются селекторы и почему? - вопрос №4150775

Здравствуйте, я не знаю, где задать этот вопрос. Но верю, что программисты С/C++ больше знакомы с темой операционных систем. Вопрос следующего плана: есть программа на ассемблере по переходу из реального в защищенный режим и обратно. Вопрос по переходу из реального в защ. режим. Код:

mov eax,cr0

or al,1

mov cr0,eax

; загружаем селектор в CS командой дальнего перехода, потому что к CS недопустимо прямое программное обращение

db 66h

db 0EAh

dd offset PM_entry

dw SEL_32bitCS

; переходимна PM_entry



; точка входа в 32-битный защищенный режим

PM_entry:

; делаем адресуемыми cегмент данных, стека, видеобуфера. CS мы адресовали ранее. Так как FlatDS используется в функции подсчета памяти, то адресуемым этот сегмент я делаю в ФУНКЦИИ, а не здесь

mov ax, SEL_32bitDS

mov ds, ax

mov ax, SEL_videobuffer

mov es, ax

mov ax, SEL_32bitSS

mov ss, ax


Собственно, был задан вопрос, в каком режиме загружаются селекторы и почему. Я отвечаю: В защищенном. Как в защищенном, так и в реальном режимах адресация производится через сегментную часть и смещение.Но в защищенном режиме в качестве сегментной части указывается селектор дескриптора, в отличие от реального, где в сегментной части указывается адрес начала сегмента.

И после перехода в защ. режим прежде всего я загружаю в используемые сегментные регистры селекторы соответствующих сегментов. Так как мы изменили содержимое сегм. регистров, то происходит загрузка дескрипторов в соответствующие теневые части этих сегментных регистров, то есть в каждом теневом регистре окажется базовый адрес соотв. сегмента.

Загрузка в теневые регистры выполняется с целью минимизировать кол-во обращений к ОЗУ Единственное, к регистру CS недопустимо прямое программное обращение, поэтому я использую дальний переход. На что мне сказали, что это неверно (конкретно что неверно — не знаю). Если кто знает, помогите разобраться в проблеме. Заранее огромное спасибо!!!
10.01.21
0 ответов
Ответов пока нет
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store