-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов ||C5 /r LDS r16,m16:16 6/12 Загрузка в DS:r16 указателя || памяти ||C5 /r LDS r32,m16:32 6/12 Загрузка в DS:r32 указателя || памяти ||0F B2 /r LSS r16,m16:16 6/12 Загрузка в SS:r16 указателя || памяти ||0F B2 /r LSS r32,m16:32 6/12 Загрузка в SS:r32 указателя || памяти ||C4 /r LES r16,m16:16 6/12 Загрузка в ES:r16 указателя || памяти ||C4 /r LES r32,m16:32 6/12 Загрузка в ES:r32 указателя || памяти ||0F B4 /r LFS r16,m16:16 6/12 Загрузка в FS:r16 указателя || памяти ||0F B4 /r LFS r32,m16:32 6/12 Загрузка в FS:r32 указателя || памяти ||0F B5 /r LGS r16,m16:16 6/12 Загрузка в GS:r16 указателя || памяти ||0F B5 /r LGS r32,m16:32 6/12 Загрузка в GS:r32 указателя || памяти |----------------------------------------------------------------- Работа команды CASE команда OF LSS: Sreg это SS; (* Загрузить регистр SS *) LDS: Sreg это DS; (* Загрузить регистр SD *) LES: Sreg это ES; (* Загрузить регистр ES *) LFS: Sreg это FS; (* Загрузить регистр FS *) LGS: Sreg это GS; (* Загрузить регистр GS *)ESAC;IF (OperandSize = 16)THEN r16 <- [Исполнительный адрес]; (* 16-разрядная пересылка *) Sreg <- [Исполнительный адрес + 2]; (* 16-разрядная пересыдка *) (* В защищенном режиме это загрузка дескриптора в сегментный регистр *)ELSE (* OperandSize = 32 *) r32 <- [Исполнительный адрес]; (* 32-разрядная пересылка *) Sreg <- [Исполнительный адрес + 4]; (* 16-разрядная пересыдка *) (* В защищенном режиме это загрузка дескриптора в сегментный регистр *)FI; ОписаниеКоманды LGS, LSS, LDS, LES и LFS читают из памяти полный указатель изаписывают его в выбранную пару сегментный регистр:регистр. Полныйуказатель загружает 16 битов в сегментный регистр SS, DS, ES, FS или GS.Другой регистр загружает 32 бита, если атрибут размера операнда равен 32бита, или 16 битов, если этот атрибут равен 16. Этот загружаемый 16- или32-разрядный регистр определяется заданным операндом r16 или r32.Когда одному из сегментных регистров сделано назначение, в сегментныйрегистр также загружается дескриптор. Данные для этого регистра берутся изэлемента дескрипторной таблицы, соответствующего выбранному селектору.В регистры DS, ES, FS или GS может быть загружен пустой селектор (значения0000 - 0003), не вызывая исключения защиты. (Любые последующие ссылки насегмент, соответствующий сегментный регистр которого загружен пустымселектором, для адресации памяти вызовут особую ситуацию #GP(0). Ссылка кпамяти для такого сегмента фактически не происходит). Ниже приводится листинг проверок и действий в защищенном режиме,выполняемых при загрузке сегментного регистра: IF загружается SS: IF селектор пустой THEN #GP(0); FI; Индекс селектора должен быть в границах его дескрипторной таблицы ELSE #GP(селектор); RPL селектора должен быть равен CPL ELSE #GP(селектор); Байт AR должен обозначать сегмент данных, доступный для записи ELSE #GP(селектор); DPL в байте AR должен быть равен CPL ELSE #GP(селектор); Сегмент должен быть помечен как Присутствующий ELSE #SS(селектор); Загрузка SS селектором; Загрузка SS дескриптором; IF DS, ES, FS или GS загружен не-пустым селектором: Индекс селектора должен быть в границах его дескрипторной таблицы ELSE #GP(селектор); Байт AR должен обозначать сегмент данных или кода, доступный для чтения ELSE #GP(селектор); IF сегмент данных или не-конформный кодовый сегмент THEN и RPL, и CPL должны быть меньше или равны DPL байта AR; ELSE #GP(селектор); Сегмент должен быть помечен как Присутствующий ELSE #NP(селектор); Загрузка сегментного регистра селектором и битами RPL; Загрузка сегментного регистра дескриптором;IF DS, ES, FS или GS загружен пустым селектором: Загрузка сегментного регистра селектором; Очистка бита Достоверности в дескрипторе; Изменяемые флагиОтсутствуют Исключения защищенного режима#GP(0) в случае недопустимого исполнительного адреса операнда памяти всегментах CS, DS, ES, FS или GS; #SS(0) в случае недопустимого адреса всегменте SS; второй операнд должен быть операндом памяти, а не регистром;#GP(0) при загрузке в SS пустого селектора; #PF(код сбоя) в случаестраничного сбоя; #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3. Исключения режима реальных адресовВторой операнд должен быть операндом памяти, а не регистром; Прерывание13, если какая-либо часть операнда лежит вне пространства исполнительныхадресов от 0 до 0FFFFH. Примечание: Эти команды допустимы в режиме реальных адресов, чтобыпозволить инициализацию при включении питания для защищенного режима. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев; #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3.