BNDMOV
Muévete.
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 1A /r | BNDMOV bnd1, bnd2/m64 | RM | No codificable | Valido | Mueve el límite inferior y superior desde bnd2/m64 hasta el registro consolidado bnd1. |
66 0F 1A /r | BNDMOV bnd1, bnd2/m128 | RM | Valido | No codificable | Mueve el límite inferior y superior desde bnd2/m128 hasta el registro consolidado bnd1. |
66 0F 1B /r | BNDMOV bnd1/m64, bnd2 | MR | No codificable | Valido | Mover hacia abajo y hacia arriba de bnd2 a bnd1/m64. |
66 0F 1B /r | BNDMOV bnd1/m128, bnd2 | MR | Valido | No codificable | Mueve 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
modrm.regescriturabyte 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
MR
modrm.rmescriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pidemodrm.reglecturabyte 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 offsetFigura 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
#UD | Si 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
#UD | Si 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 | Si el operando de memoria dirección efectiva está fuera del límite del segmento SS. |
Modo virtual-8086
#UD | Si 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
#UD | Si 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. |