BNDCU, BNDCN

Check Upper Bound

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
F2 0F 1A /rBNDCU bnd, r/m32RMNo codificableValidoGenerar un #BR si la dirección en r/m32 es más alta que el límite superior en bnd.UB (bnb.UB en la forma de complemento de 1).
F2 0F 1A /rBNDCU bnd, r/m64RMValidoNo codificableGenerar un #BR si la dirección en r/m64 es más alta que el límite superior en bnd.UB (bnb.UB en la forma de complemento de 1).
F2 0F 1B /rBNDCN bnd, r/m32RMNo codificableValidoGenerar un #BR si la dirección en r/m32 es más alta que el límite superior en bnd.UB (bnb.UB no en la forma de complemento de 1).
F2 0F 1B /rBNDCN bnd, r/m64RMValidoNo codificableGenerar un #BR si la dirección en r/m64 es más alta que el límite superior en bnd.UB (bnb.UB no en la forma de complemento de 1).

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 escriturabyte 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

Cargando las mediciones de arch-data...

Descripción

Compare la dirección en el segundo operando con el límite superior en bnd. El segundo operando puede ser un registro o un operando de memoria. Si la dirección es más alta que el límite superior en bnd.UB, establecerá BNDSTATUS a 01H y señale una excepción #BR.

BNDCU realizar 1's complemento operación en el borde superior de bnd primero antes de proceder con la comparación de la dirección. BNDCN realiza la comparación de direcciones directamente utilizando el límite superior en bnd que ya se revierte fuera de la forma de complemento de 1.

Esta instrucción no causa ningún acceso a la memoria, y no lee ni escribe ninguna bandera.

Computación de dirección efectiva de m32/64 tiene un comportamiento idéntico a LEA

Operación

BNDCU BND, reg
IF reg > NOT(BND.UB) Then

    BNDSTATUS := 01H;
    #BR;
FI;

BNDCU BND, mem
TEMP := LEA(mem);
IF TEMP > NOT(BND.UB) Then

    BNDSTATUS := 01H;
    #BR;
FI;

BNDCN BND, reg
IF reg > BND.UB Then

    BNDSTATUS := 01H;
    #BR;
FI;


BNDCN BND, mem
TEMP := LEA(mem);
IF TEMP > BND.UB Then

    BNDSTATUS := 01H;
    #BR;
FI;

Intel C/C++ compilador intrínseco

BNDCU .void _bnd_chk_ptr_ubounds(const void *q);

Banderas afectadas

None

Excepciones

Modo protegido
#BRSi el cheque superior falla.
#UDSi el prefijo LOCK es utilizado. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si el prefijo 67H no se usa y CS.D=0. Si el prefijo 67H es usado y CS.D=1.
Modo real
#BRSi el cheque superior falla.
#UDSi el prefijo LOCK es utilizado. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si se utiliza la dirección de 16 bits.
Modo virtual-8086
#BRSi el cheque superior falla.
#UDSi el prefijo LOCK es utilizado. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si se utiliza la dirección de 16 bits.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#UDSi ModRM.r/m y REX codifica BND4-BND15 cuando Intel MPX está habilitado. Las mismas excepciones que en modo protegido.

Fuentes