В x86 после того, как мы установили PE-бит CR0, мы выполняем дальний JMP, чтобы гарантировать изменение CS / EIP. Когда я смотрю на логический поток в руководстве программиста x86, соответствующий этой далекой инструкции JMP (защищенный режим), я вижу что-то вроде этого:
Set RPL field of CS register to CPL;
Я хочу убедиться, что уровень привилегий равен 0. Предположим, DPL также равен 0 в дескрипторе, а RPL в селекторе в дальнем JMP также равен 0. Бит C равен 0 в дескрипторе, так что это случай сегмента несоответствующего кода. В руководстве сказано, что CPL - это два последних бита в CS. Это означает, что перед дальним JMP CS должен содержать значение, последние два бита которого равны 00. Итак, когда я изначально нахожусь в реальном режиме, должен ли я убедиться, что CS имеет некоторое значение, которое соответствует этому условию, прежде чем я выполнить дальний JMP? Если бы я перефразировал это, каков CPL, когда мы переключаемся из реального режима в защищенный?