VERR - Перевірити сегмент читання

Вплив команди на прапори та формати команди:

Встановити ZF=1, якщо сегмент, заданий у r/m16, доступний для читання

Встановити ZF=1, якщо сегмент, заданий у r/m16, доступний для запису

Команди VERR і VERW визначають, чи доступний заданий операндом-джерелом сегмент на поточному рівні привілеїв для читання (VERR) або для запису (VERW). Операндом команд може бути 16-бітовий регістр загального призначення або операнд у пам'яті, який містить значення селектора сегмента, що перевіряється. Якщо сегмент доступний, то встановлюється прапор ZF, якщо сегмент не доступний, то прапор ZF скидається.

Для встановлення прапора ZF командами VERR, VERW необхідно виконати такі умови:

  • індекс селектора повинен потрапляти у межі таблиці дескрипторів (GDT чи LDT); селектор має бути не нульовим;
  • селектор повинен вказувати на дескриптор сегмента коду або даних, але не дескриптор TSS, дескриптор LDT або дескриптор шлюзу;
  • для команди VERR сегмент має бути доступний для читання, а для команди VERW сегмент має бути доступним для запису сегментом даних;
  • якщо сегмент коду доступний для читання та узгоджений, то рівень привілеїв дескриптора (DPL) може бути будь-яким для команди VERR, інакше DPL має бути більшим або рівним (мати менше або стільки ж привілеїв) CPL (поточний рівень привілеїв) та RPL селектора.

Проведена перевірка є такою ж, як якщо сегмент був завантажений в регістр DS, ES, FS або GS і був зроблений вказаний доступ (читання або запис). Прапор ZF встановлюється за результатом перевірки. Жодні значення вхідного операнда-селектора не можуть призводити до генерації особливих ситуацій захисту, програмне забезпечення за допомогою команд VERR та VERW аналізує можливіпроблеми доступу до сегментів надалі.

IF SRC(Offset) > (GDTR(Limit) OR (LDTR(Limit))

Завантажити інформацію із дескриптора сегмента;

IF Descriptor.Type = 0 OR Descriptor.Type ≠ (Узгоджений кодовий сегмент) AND ((CPL > DPL) OR (RPL > DPL)) (* Системний дескриптор або неузгоджений кодовий сегмент з DPL меншим CPL або RPL *)

IF ((Instruction = VERR) AND ( Сегмент доступний для читання )) OR ((Instruction = VERW) AND ( Сегмент доступний для запису ))

Особливі ситуації захищеного режиму: