logo

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

Система команд 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

SYSEXIT

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

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

0F 34

SYSEXIT

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

Pentium II

sysexit

Описание:

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

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

  • SYSENTER_CS_MSR (174h) — суммируется с 16 и копируется в регистр CS;
  • EDX — копируется в регистр EIP;
  • ECX — копируется в регистр ESP.

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

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

Пара команд SYSENTER/SYSEXT не является парой команд вызова/возврата. Эти команды должны использоваться только в системных операциях для быстрого переключения на системные процедуры с уровнями привилегий 0 и 3.

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

Операция:

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

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

IF CPL <> 0 THEN #GP(0); FI;

(* Измененте CS:EIP и SS:ESP *)

CS.SEL = (SYSENTER_CS_MSR + 16);

CS.SEL.RPL = 3;

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

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 = 3;

CS.SEL.P = 1;

SS.SEL = (SYSENTER_CS_MSR + 24);

SS.SEL.RPL = 3;

(* Установить 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 = 3;

SS.SEL.CPL = 3;

SS.SEL.P = 1;

ESP = ECX;

EIP = EDX;

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

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

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

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

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

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


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




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

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

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