BOUND
Verifique el índice de rayos contra libras
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
62 /r | BOUND r16, m16&16 | RM | No valido | Valido | Comprueba si r16 (índice de rayos) está dentro de límites especificados por m16. |
62 /r | BOUND r32, m32&32 | RM | No valido | Valido | Comprueba si r32 (índice de rayos) está dentro de los límites especificados por m32. |
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.
RM
modrm.reglecturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Coste medido
Sin medir: no se ejecuta en procesadores de 64 bits.
Descripción
BOUND determina si el primer operando (índice de rayos) está dentro de los límites de un array especificado el segundo operando (puntos operando). El índice de matriz es un entero firmado situado en un registro. Los límites operando es una ubicación de memoria que contiene un par de números firmados (cuando el operando-size atributo es 32) o un par de números firmados (cuando el operando-size es 16). La primera palabra doble (o palabra) es la parte inferior de la matriz y la segunda palabra doble (o palabra) es la parte superior de la matriz. El índice de matriz debe ser mayor o igual al límite inferior y inferior o igual al límite superior más el tamaño de operando en bytes. Si el índice no está dentro de los límites, un rango BOUND superó la excepción (#BR) se señaliza. Cuando se genera esta excepción, el retorno salvado puntero de instruccion apunta a la instrucción BOUND.
Los límites limitan la estructura de datos (dos palabras o palabras dobles que contienen los límites inferiores y superiores de la matriz) se colocan generalmente justo antes de la matriz misma, haciendo que los límites se dirijan a través de un offset constante desde el principio de la matriz. Debido a que la dirección de la matriz ya estará presente en un registro, esta práctica evita ciclos de autobús adicionales para obtener la dirección efectiva de los límites de la matriz.
Esta instrucción se ejecuta como se describe en modo de compatibilidad y modo legado. No es válido en modo de 64 bits.
Operación
IF 64bit Mode
THEN
#UD;
ELSE
IF (ArrayIndex < LowerBound OR ArrayIndex > UpperBound) THEN
(* Below lower bound or above upper bound *)
IF <equation for PL enabled> THEN BNDSTATUS := 0
#BR;
FI;
FI;Banderas afectadas
None.
Excepciones
Modo protegido
#BR | Si la prueba de límites falla. |
#UD | Si el segundo operando no es una ubicación de memoria. Si el prefijo LOCK es usado. |
#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 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. |
Modo real
#BR | Si la prueba de límites falla. |
#UD | Si el segundo operando no es una ubicación de memoria. Si el prefijo LOCK es usado. |
#GP | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
Modo virtual-8086
#BR | Si la prueba de límites falla. |
#UD | Si el segundo operando no es una ubicación de memoria. Si el prefijo LOCK es usado. |
#GP(0) | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#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. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#UD | Si en modo 64-bit. |