VERR, VERW
Verifique un Segmento para la lectura o escritura
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
0F 00 /4 | VERR r/m16 | M | Valido | Valido | Establecer ZF=1 si el segmento especificado con r/m16 se puede leer. |
0F 00 /5 | VERW r/m16 | M | Valido | Valido | Establecer ZF=1 si el segmento especificado con r/m16 puede ser escrito. |
Codificacion de operandos
Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.
M
modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
ZFCero
Descripción
Verifica si el código o segmento de datos especificado con el operando de origen es legible (VERR) o writable (VERW) del nivel de privilegio actual (CPL). El operando de origen es un registro de 16 bits o una ubicación de memoria que contiene el selector de segmento para verificar el segmento. Si el segmento es accesible y legible (VERR) o writable (VERW), se establece la bandera ZF; de lo contrario, la bandera ZF se pone a cero. Los segmentos de código nunca son verificables. Este cheque no se puede realizar en segmentos del sistema.
Para establecer la bandera ZF, se deben cumplir las siguientes condiciones:
- El selector de segmento no es NULL. El selector debe denotar un descriptor dentro de los límites de la tabla descriptor (GDT o LDT). El selector debe denotar el descriptor de un código o segmento de datos (no el de un segmento o puerta del sistema). Para la instrucción VERR, el segmento debe ser legible. Para la instrucción VERW, el segmento debe ser un segmento de datos computarizado. * Si el segmento no es un segmento de código conforme, el DPL del segmento debe ser mayor o igual a (tener
menos o el mismo privilegio que) tanto el CPL como el el selector de segmento de RPL.
La validación realizada es la misma que se realiza cuando un selector de segmento se carga en el registro DS, ES, FS o GS, y el acceso indicado (leer o escribir) se realiza. El valor del selector de segmento no puede resultar en una excepción de protección, lo que permite al software anticipar posibles problemas de acceso a segmentos.
La operación de esta instrucción es la misma en modos no-64-bit y modo 64-bit. El tamaño de operando se fija en 16 bits.
Operación
IF SRC(Offset) > (GDTR(Limit) or (LDTR(Limit))
THEN ZF := 0; FI;
Read segment descriptor;
IF SegmentDescriptor(DescriptorType) = 0 (* System segment *)
or (SegmentDescriptor(Type) conforming code segment)
and (CPL > DPL) or (RPL > DPL)
THEN
ZF := 0;
ELSE
IF ((Instruction = VERR) and (Segment readable))
or ((Instruction = VERW) and (Segment writable))
THEN
ZF := 1;
ELSE
ZF := 0;
FI;
FI;Banderas afectadas
La bandera ZF se establece a 1 si el segmento es accesible y legible (VERR) o writable (VERW); de lo contrario, se establece a 0.
Excepciones
Modo protegido
| Las únicas excepciones generadas para estas instrucciones son las relacionadas con el abordaje ilegal del operando de origen. | |
#GP(0) | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS se utiliza para acceder a la memoria y contiene un NULL selector de segmento. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |
Modo real
#UD | Las instrucciones VERR y VERW no se reconocen en modo de direccion real. Si se utiliza el prefijo LOCK. |
Modo virtual-8086
#UD | Las instrucciones VERR y VERW no se reconocen en modo virtual-8086. Si se utiliza el prefijo LOCK. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#SS(0) | Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica. |
#GP(0) | Si la dirección de memoria está en forma no canónica. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |