В x86, после того, как мы установили бит PE CR0, мы делаем JMP для обеспечения того, чтобы CS/EIP был изменен. Когда я смотрю на логический поток в x86 программистов инструкции, соответствующие этому далекому инструкции JMP (защищенный режим), я вижу что-то вроде этого:x86 Переключение в защищенный режим из реального режима CPL (Текущий уровень привилегий)
Set RPL field of CS register to CPL;
Я хочу, чтобы гарантировать, что уровень привилегий 0. Предположим, ЛПП также 0 в дескрипторе, а RPL в селекторе в дальнем JMP также равен 0. C бит равен 0 в дескрипторе, поэтому это случай несоответствующего кода. В руководстве говорится, что CPL - это последние два бита в CS. Это означает, что перед далеким JMP CS должен содержать значение, которое имеет последние два бита как 00. Таким образом, когда я вхожу в реальный режим изначально, должен ли я убедиться, что CS имеет некоторое значение, которое соответствует этому условию до того, как я выполнить дальний JMP? Если бы я перефразировал это, что такое CPL при переходе из реального режима в защищенный?
Хороший вопрос, BTW. Когда я начал с этого, я задавался вопросом точно так же в течение нескольких месяцев. – Downvoter
Спасибо, cad. Моя голова закручивается, однако, с такой большой вложенной информацией, встроенной в ваш ответ. Думаю, мне понадобилось бы несколько месяцев, чтобы ассимилировать их. Но мне нужно многое понять до этого, поскольку я скоро буду на подиуме учителя. – Kamalakshi