Пока дальний прыжок не загрузит внутреннюю базу CS / лимит / материал из записи GDT, вы вообще не используете какую-либо запись GDT. Это не на самом деле даже защищенный режим.
В отличие от включения подкачки страниц (когда выборка команды для следующей инструкции рассматривает CS: EIP как виртуальную в следующей инструкции после записи CR0), содержимое сегмента не Это происходит до тех пор, пока после записи в регистр сегмента ЦП фактически не прочитает данные из GDT.
Базовый адрес CS не изменяется LGDT, и вы по-прежнему находитесь на максимальном уровне привилегий с операндом-размером = адресом -size = 16, поэтому выборка кода инструкции ljmp
просто происходит. (Предполагая, что выполнение этого фрагмента началось в реальном или нереальном режиме.) Нахождение в защищенном режиме влияет на значение обновления CS до 8
, но не влияет на выборку и запуск инструкции, которая делает это.
I не знаю формальных деталей того, считается ли он как CPL = 0 или это особый случай, или что произойдет, если ваш первый дальний прыжок был к воротам вызова. Если вы хотите большего, посмотрите https://wiki.osdev.org/GDT_Tutorial и / или руководства Intel или AMD, или, возможно, кто-то еще ответит на этот вопрос.