logo

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

LSL

Загрузить предел сегмента

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

*

 

 

 

 

Код

Команда

Описание

Проц.

Пример

0F 03 /r

LSL r16,r/m16

r16 = G(L)DT(r/m16).LIMIT

Intel286

lsl ax,bx

0F 03 /r

LSL r32,r/m32

r32 = G(L)DT(r/m32).LIMIT

Intel386

lsl eax,ebx

Операция:

IF SRC(Offset) > Предел таблицы дескрипторов THEN ZF = 0; FI;

Загрузить дескриптор сегмента;

IF (Загруженный дескриптор не определяет согласованный кодовый сегмент) AND ((CPL > DPL) OR (RPL > DPL)) OR (Загруженный дескриптор не является корректным для данной команды)

  THEN

     ZF = 0;

  ELSE

     ZF = 1;

     temp = SegmentLimit([SRC]);

     IF (G = 1)

        THEN

           temp = ShiftLeft(12, temp) OR 00000FFFH;

     FI;

     IF OperandSize = 32

        THEN

           DEST = temp;

        ELSE (*OperandSize = 16*)

           DEST = temp AND FFFFH;

     FI;

FI;

Описание:

Команда LSL сохраняет в операнде-назначении преобразованное значение предела сегмента из дескриптора, который задается селектором в операнде-источнике команды, если этот дескриптор видим при текущем уровне привилегий (измененном при помощи RPL селектора) и имеет допустимый тип (смотрите таблицу ниже). Иначе, флаг ZF очищается, а регистр-назначение остается неизменным.

Если дескриптор имеет предел, выраженный в байтах, то его значение напрямую загружается в регистр-назначение, если же предел выражен в страницах, то команда LSL переводит его к байтовому выражению перед загрузкой в регистр-назначение (производится сдвиг двадцатиразрядного предела из дескриптора влево на 12 бит, затем OR 00000FFFh).

32-битные формы команды LSL сохраняют 32-битный предел в 32-битном регистре-назначении. При размере операнда 16 бит предел вычисляется в 32-битной форме, но при записи в регистр-назначение старшие 16 бит отбрасываются.

Если задаваемый селектором из операнда-источника дескриптор не видим при текущем уровне привилегий или имеет недопустимый для данной команды тип, то флаг ZF сбрасывается. Все дескрипторы сегментов кода и данных допустимы для команды LSL. Для этой команды таже допустимы и некоторые специальные дескрипторы (см. таблицу 6.74.).

 

Таблица 6.74. Допустимость специальных дескрипторов для команды LSL

Тип (Type)

Имя

Допустим/ недопустим

0000

Зарезервировано

недопустим

0001

Свободный 16-битный TSS

допустим

0010

Локальная таблица дескрипторов (LDT)

допустим

0011

Занятый 16-битный TSS

допустим

0100

16-битный шлюз вызова

допустим

0101

Шлюз задачи

допустим

0110

16-битный шлюз прерывания

недопустим

0111

16-битный шлюз ловушки

недопустим

1000

Зарезервировано

недопустим

1001

Свободный 32-битный TSS

допустим

1010

Зарезервировано

недопустим

1011

Занятый 32-битный TSS

допустим

1100

32-битный шлюз вызова

допустим

1101

Зарезервировано

недопустим

1110

32-битный шлюз прерывания

недопустим

1111

32-битный шлюз ловушки

недопустим

Команда LSL может исполняться только в защищенном режиме, попытка ее использования в режиме реальной адресации или режиме V86 приводит к генерации особой ситуации #UD.

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

#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

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

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

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

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


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



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

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

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