logo

Главная Система команд x86 Базовая система команд CPU SYSENTER

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

SYSENTER

Быстрый переход на системную точку входа

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

0

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

0F 34

SYSENTER

Быстрый переход на системную точку входа

Pentium II

sysenter

Описание:

Команда SYSENTER — это часть нового механизма быстрого системного вызова, введенного в процессорах, начиная с Pentium II. Команда оптимизирована для наиболее быстрого перехода на нулевой уровень привилегий.

Значения в следующих специальных регистрах модели процессора используются в процессе исполнения команды SYSENTER:

  • SYSENTER_CS_MSR (174h) — копируется в регистр CS;
  • SYSENTYER_EIP_MSR (175h) — копируется в регистр EIP;
  • SYSENTER_ESP_MSR (176h) — копируется в регистр ESP.

С использованием значений, взятых из указанных регистров, команда SYSENTER помещает новые селекторы кодового и стекового сегментов в регистры CS, SS и новые указатели команд и стека в EIP, ESP. Далее процессор переключается на нулевой уровнь привилегий и начинается выполнение системной процедуры — обработчика системного вызова. Никакие значения регистров процессора при поступлении данной команды не сохраняются, программа должна сама позаботиться об этом перед выдачей команды SYSENTER.

Селектор CS, генерируемый командой, задает сегмент плоско проецируемый на все линейное адресное пространство 4 Гб с разрешенными любыми вариантами доступа. Аналогичные параметры имеет и стековый сегмент, начальное значение для селектора которого берется равным (Селектор CS +8).

Возможность использования команды SYSENTER определяется с помощью команды CPUID. Однако имеется одна особенность, дело в том, что некоторые процессоры Pentium Pro, хотя и не поддерживают команды SYSENTER/SYSEXIT, но выдают единицу в соответствующем бите по команде CPUID. Поэтому для подтверждения поддержки данных команд, после выполнения CPUID пользовательская программа должна убедиться, что у проверяемого процессора Family = 6, Model > 3 и Stepping > 3.

Операция:

IF CR0.PE = 0 THEN #GP(0); FI;

IF SYSENTER_CS_MSR = 0 THEN #GP(0); FI;

EFLAGS.VM = 0; (* Отключение режима V86 *)

EFLAGS.IF = 0; (* Маскирование внешних прерываний *)

CS.SEL = SYSENTER_CS_MSR; (* Загрузить предлагаемый ОС селектор CS *)

(* Установить поля CS в фиксированные значения *)

CS.SEL.CPL = 0; (* CPL = 0 *)

CS.SEL.BASE = 0; (* Плоская линейная модель памяти *)

CS.SEL.LIMIT = FFFFh; (* Предел 4Гб *)

CS.SEL.G = 1;

CS.SEL.S = 1;

CS.SEL.TYPE_xCRA = 1011b; (* Исполняемый, читаемый, доступ *)

CS.SEL.D = 1; (* 32-битный сегмент *)

CS.SEL.DPL = 0;

CS.SEL.RPL = 0;

CS.SEL.P = 1;

SS.SEL = CS.SEL+8;

(* Установить поля SS в фиксированные значения *)

SS.SEL.BASE = 0; (* Плоская линейная модель памяти *)

SS.SEL.LIMIT = FFFFh; (* Предел 4Гб *)

SS.SEL.G = 1;

SS.SEL.S = 1;

SS.SEL.TYPE_xCRA = 0011b; (* Чтение/запись, доступ *)

SS.SEL.D = 1; (* 32-битный сегмент *)

SS.SEL.DPL = 0;

SS.SEL.RPL = 0;

SS.SEL.P = 1;

ESP = SYSENTER_ESP_MSR;

EIP = SYSENTER_EIP_MSR;

Особые ситуации защищенного режима:

#GP(0), если регистр SYSENTER_CS_MSR содержит 0.

Особые ситуации режима реальной адресации:

#GP при попытке использовать команду.

Особые ситуации режима V86:

#GP(0), если регистр SYSENTER_CS_MSR содержит 0.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники