BNDMOV

Muévete.

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 1A /rBNDMOV bnd1, bnd2/m64RMNo codificableValidoMueve el límite inferior y superior desde bnd2/m64 hasta el registro consolidado bnd1.
66 0F 1A /rBNDMOV bnd1, bnd2/m128RMValidoNo codificableMueve el límite inferior y superior desde bnd2/m128 hasta el registro consolidado bnd1.
66 0F 1B /rBNDMOV bnd1/m64, bnd2MRNo codificableValidoMover hacia abajo y hacia arriba de bnd2 a bnd1/m64.
66 0F 1B /rBNDMOV bnd1/m128, bnd2MRValidoNo codificableMueve el límite inferior y superior desde bnd2 hasta el registro consolidado bnd1/m128.

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

MR

  1. modrm.rm escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)

Coste medido

Cargando las mediciones de arch-data...

Descripción

BNDMOV mueve un par de valores de límite inferior y superior del operando de origen (el segundo operando) al destino (el primer operando). Cada operación es de 128 bits. Las excepciones son las mismas que la instrucción MOV. El formato de memoria para los límites de carga/store en modo 64-bit se muestra en la Figura 3-5.

                     Upper Bound (UB)             Lower Bound (LB)                     BNDMOV to memory in 64-bit mode
                     16                                             8                                           0 Byte offset
             Upper Bound (UB)                     Lower Bound (LB)                     BNDMOV to memory in 32-bit mode
             16                                                     8
                                                                                    4      0 Byte offset

Figura 3-5. Diseño de memoria de BNDMOV a / de memoria

Esta instrucción no cambia las banderas.

Operación

BNDMOV register to register
DEST.LB := SRC.LB;
DEST.UB := SRC.UB;


BNDMOV from memory
IF 64-bit mode THEN

          DEST.LB := LOAD_QWORD(SRC);
          DEST.UB := LOAD_QWORD(SRC+8);
    ELSE
          DEST.LB := LOAD_DWORD_ZERO_EXT(SRC);
          DEST.UB := LOAD_DWORD_ZERO_EXT(SRC+4);
FI;

BNDMOV to memory
IF 64-bit mode THEN

          DEST[63:0] := SRC.LB;
          DEST[127:64] := SRC.UB;
    ELSE
          DEST[31:0] := SRC.LB;
          DEST[63:32] := SRC.UB;
FI;

Intel C/C++ compilador intrínseco

BNDMOV void * _bnd_copy_ptr_bounds(const void *q, const void *r);

Banderas afectadas

None.

Excepciones

Modo protegido
#UDSi el prefijo LOCK se utiliza pero el destino no es un operado de memoria. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si el prefijo 67H no se utiliza y CS.D=0. Si el prefijo 67H es utilizado y CS.D
#SS(0)Si el operando de memoria dirección efectiva está fuera del límite del segmento SS.
#GP(0)Si el operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si el operando de destino apunta a un segmento no escrito Si el registro de segmento DS, ES, FS o GS contiene un NULL selector de segmento.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras CPL es 3. #PF(fault code) Si un fallo de pagina ocurre.
Modo real
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si se utiliza la dirección de 16 bits.
#GP(0)Si el operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SSSi el operando de memoria dirección efectiva está fuera del límite del segmento SS.
Modo virtual-8086
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si se utiliza la dirección de 16 bits.
#GP(0)Si el operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SS(0)Si el operando de memoria dirección efectiva está fuera del límite del segmento SS.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras CPL es 3. #PF(fault code) Si un fallo de pagina ocurre.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria. Si ModRM.r/m y REX codifica BND4-BND15 cuando Intel MPX está habilitado.
#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.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras CPL es 3. #PF(fault code) Si un fallo de pagina ocurre.

Fuentes