MOVDIR64B

Mover 64 Bytes como tienda directa

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 38 F8 /rMOVDIR64B r16/r32/r64, m512 Op/En Tuple Operand 1 A N/A ModRM:reg (w)AValidoValidoMover 64-bytes como tienda directa con garantía 64- byte escritura atomicidad de la dirección fuente operando de memoria a la dirección de memoria de destino especificada como offset a segmento ES en el registro operando. Instrucción operando Enc oding1 Ope rand 2 operando 3 operando 4 Mod RM:r/m (r) N/A N/A N/A

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.

A

  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

Mueva 64-bytes como tienda directa con 64-byte escribir atomicidad de la dirección de memoria fuente a la dirección de memoria de destino. El operando de origen es un operando de memoria normal. El operando de destino es una ubicación de memoria especificado en un registro de proposito general. The register content is interpreted as an offset into ES segment without any segment override. En modo de 64 bits, el ancho operando registrado es de 64 bits (32 bits con prefijo 67H). Fuera del modo 64-bit, el ancho de registro es de 32-bits cuando CS.D=1 (16-bits con prefijo 67H), y 16-bits cuando CS.D=0 (32-bits con prefijo 67H). MOVDIR64B requiere que la dirección de destino sea alineada de 64 bytes. No se aplica ninguna restricción de alineación para operando de origen.

MOVDIR64B primero lee 64-bytes de la dirección de memoria fuente. A continuación, realiza una operación de tienda directa de 64 bytes a la dirección de destino. La operación de carga sigue el orden de lectura normal basado en el tipo de memoria de la dirección fuente. La tienda directa se implementa utilizando el protocolo de tipo de memoria (WC) que combina (WC) para escribir datos. Utilizando este protocolo, el procesador no escribe los datos en la jerarquía de caché, ni recoge la línea correspondiente de caché de la memoria en la jerarquía de caché. Si la dirección de destino está en caché, la línea es devuelta (si se modifica) e invalidada de la caché, antes de la tienda directa.

A diferencia de las tiendas con indicios no temporales que permiten el tipo de memoria UC/WP para el destino anular el indicio no temporal, las tiendas directas siempre siguen el protocolo de tipo de memoria WC independientemente del tipo de memoria de la dirección de destino (incluidos los tipos UC/WP). A diferencia de las tiendas de WC y las tiendas con indicios no temporales, las tiendas directas son elegibles para el desalojo inmediato del búfer de combinación de escritura, y por lo tanto no combinado con tiendas más jóvenes (incluyendo tiendas directas) a la misma dirección. El WC más antiguo y las tiendas no temporales que se celebran en el búfer de escritura se pueden combinar con tiendas directas más jóvenes a la misma dirección. Las tiendas directas se ordenan débilmente en relación con otras tiendas. El software que desee ordenar más fuerte debe utilizar una instrucción de esgrima (MFENCE o SFENCE) antes o después de una tienda directa para hacer cumplir el pedido deseado.

No hay garantía de atomicidad prevista para la operación de carga de 64 bytes desde la dirección de origen, y las implementaciones de procesadores pueden utilizar múltiples operaciones de carga para leer los 64 bytes. La tienda directa de 64 bytes emitida por MOVDIR64B garantiza una atomicidad de 64 bytes de escritura completa. Esto significa que los datos llegan al destino en una única transacción por escrito de 64 bytes.

La disponibilidad de la instrucción MOVDIR64B está indicada por la presencia de la bandera CPUID MOVDIR64B (bit 28 del registro ECX en hoja 07H, véase "CPUID--CPU Identificación" en el Manual Intel(R) 64 e IA-32 Architectures Software Developer, Volume 2A).

Operación

DEST := SRC;

Intel C/C++ compilador intrínseco

MOVDIR64B void _movdir64b(void *dst, const void* src);

Excepciones

Modo protegido
#GP(0)Para una dirección efectiva operando de memoria ilegal en los segmentos CS, DS, ES, FS o GS. Si la dirección en el destino (registrito) operando no está alineada a un límite de 64 bytes.
#SS(0)Para una dirección ilegal en el segmento SS. #PF (código predeterminado) Para un fallo de pagina.
#UDSi CPUID.07H.00H:ECX.MOVDIR64B[28] = 0. Si el prefijo LOCK es usado.
Modo real
#GPSi alguna parte del operando se encuentra fuera del espacio de dirección eficaz de 0 a FFFFH. Si la dirección en el destino (registrito) operando no está alineada a un límite de 64 bytes.
#UDSi CPUID.07H.00H:ECX.MOVDIR64B[28] = 0. Si el prefijo LOCK es usado.
Modo virtual-8086
Las mismas excepciones que en modo de dirección real.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#SS(0)Si la dirección de memoria referencia del segmento SS está en forma no canónica.
#GP(0)Si la dirección de memoria está en forma no canónica. Si la dirección en el destino (registro) operando no está alineada a un límite de 64 bytes. #PF (código predeterminado) Para un fallo de pagina.
#UDSi CPUID.07H.00H:ECX.MOVDIR64B[28] = 0. Si el prefijo LOCK es usado.

Fuentes