BNDMK

Hacer libras

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
F3 0F 1B /rBNDMK bnd, m32RMNo codificableValidoHacer límites inferiores y superiores de m32 y almacenarlos en bnd.
F3 0F 1B /rBNDMK bnd, m64RMValidoNo codificableHacer límites inferiores y superiores de m64 y almacenarlos en bnd.

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

Hace límites desde el segundo operando y almacena los bordes inferiores y superiores en el registro atado bnd. El segundo operando debe ser un operando de memoria. El contenido del registro base del operando de memoria se almacena en el bnd.LB inferior. El complemento 1 de la dirección efectiva de m32/m64 se almacena en el b.UB del límite superior. La computación de m32/m64 tiene un comportamiento idéntico a LEA.

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

Si la instrucción no especificaba el registro base, el límite inferior será cero. La forma reg-reg de esta instrucción retiene el comportamiento legado (NOP).

La instrucción causa una excepción de código de operación no válido (#UD) si se ejecuta en modo de 64 bits con dirección relativa RIP.

Operación

BND.LB := SRCMEM.base;
IF 64-bit mode Then

    BND.UB := NOT(LEA.64_bits(SRCMEM));
ELSE

    BND.UB := Zero_Extend.64_bits(NOT(LEA.32_bits(SRCMEM)));
FI;

Intel C/C++ compilador intrínseco

BNDMKvoid * _bnd_set_ptr_bounds(const void * q, size_t size);

Banderas afectadas

None.

Excepciones

Modo protegido
#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
#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
#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 el prefijo LOCK es utilizado. Si ModRM.r/m y REX codifica BND4-BND15 cuando Intel MPX está habilitado. Si se utiliza el tratamiento relacionado con RIP.
#SS(0)Si la 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. Las mismas excepciones que en modo protegido.

Fuentes