20.03.2019, 15:20 [+3 UTC]
в нашей команде: 3 475 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.72 (17.03.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
09.03.2019, 10:08

Форум:
18.03.2019, 16:49

Последний вопрос:
19.03.2019, 15:15
Всего: 149055

Последний ответ:
20.03.2019, 15:13
Всего: 258006

Последняя рассылка:
20.03.2019, 15:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
16.12.2009, 23:37 »
Николай // Programmator
Подробно и понятно, спасибо Вам огромное! [вопрос № 175365, ответ № 257820]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 744
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 473
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 144

Перейти к консультации №:
 

Консультация онлайн # 69096
Раздел: • Assembler
Автор вопроса: RIV
Отправлена: 30.12.2006, 01:56
Поступило ответов: 1

Здравствуйте уважаемые эксперты. Помогите написать небольшую программу переводящую процессор из реального режима в защищенный. Привожу код, программа загружается со второго сектора флоппи, непосредственно из биоса и загружает ее программа неходящааяся на первом секторе, и комп перегружается.
Вопросов несколько - при переходе в защищенный режим после команд
mov EAX,cr0;
or eax,1;
mov cr0,eax;
объясните как процессор переходит на следующую команду, ведь если он уже работает в защищенном режиме значит он обращается к памяти через gdt_null, так как cs = 0, что и вызывает ошибку. По моему тоже самое должно происходить при переходе в реальный режим, только без ошибки. Просто вычитал этот код в одной книге и стало интересно. Подскажите что вообще не правильно сделал и как правильно перевести проц в защищенный режим?

Приложение:

Состояние: Консультация закрыта

Ответ # 134238 от Ramok

Здравствуйте, RIV!

Очень резонный вопрос Ж:-)
Все дело в так называемых теневых регистрах(shadow register). Дело в том что при каждом обращении к памяти, процессор не вычисляет все значения через gdt или ldt как можно было бы подумать(представьте себе накладные расходы такого варианта). Вычисления происходят только при изменения значения сегментных регистров(cs, ds, ss....), а вычесленная информация заностится в теневые регистры.
В них хранится база, лимит и права доступа.

Так что когда вы меняете cr0, то вычисление адреса по прежнему происходит из теневых регистров пока вы не изменяете сегментный регистр.

Отсюда можно сделать два вывода:
1. Вычисление через адреса в реальном режиме все равно проиходит через эти теневые регистры, просто база, лимиты и права соответствуют тому, чему мы привыкли в реальном режиме.

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

Дополнительную информацию можно найти в поисковых системах интернет по запросу "теневые регистры защищенный режим"


Консультировал: Ramok
Дата отправки: 30.12.2006, 02:45

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14386 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.72 от 17.03.2019
Версия JS: 1.33 | Версия CSS: 3.35