Обязательным условием межсегментных передач управления с увеличением уровня привилегий является использование шлюза вызова, заданного командой FAR CALL. Смещение, заданное командой, игнорируется.
Чтение шлюза вызова является первым этапом выполнения команды. На этом этапе производятся стандартные проверки действительности селектора. Селектор шлюза вызова может указывать на глобальную или локальную таблицы дескрипторов. После чтения дескриптора шлюза вызова проверяется соответствие его типа и условие его доступа:
При положительных результатах проверок выполняется второй этап перехода. Это чтение дескриптора целевого кодового сегмента, которое производится по селектору заданного в дескрипторе шлюза вызова. Перед чтением делаются стандартные проверки: на действительность селектора, на соответствие смещения в сегменте пределу сегментного кода и на доступность целевого кодового сегмента по уровням привилегий. Проверка доступности целевого кодового сегмента по уровням привилегий определяется условием:
При положительных результатах этой проверки производится третий этап перехода. При этом:
Если переход привел к изменению уровня привилегий, то производится еще один завершающий этап. Это смена стека. |