BOUND

Verifique el índice de rayos contra libras

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
62 /rBOUND r16, m16&16RMNo validoValidoComprueba si r16 (índice de rayos) está dentro de límites especificados por m16.
62 /rBOUND r32, m32&32RMNo validoValidoComprueba 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

  1. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte 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
#BRSi la prueba de límites falla.
#UDSi 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
#BRSi la prueba de límites falla.
#UDSi el segundo operando no es una ubicación de memoria. Si el prefijo LOCK es usado.
#GPSi un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SSSi un operando de memoria dirección efectiva está fuera del límite del segmento SS.
Modo virtual-8086
#BRSi la prueba de límites falla.
#UDSi 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
#UDSi en modo 64-bit.

Fuentes