AESENC
Realizar una ronda de un flujo de cifrado AES
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 38 DC /r | AESENC xmm1, xmm2/m128 | A | Valido | Valido | Realice una ronda de un flujo de encriptación AES, utilizando uno de los datos de 128 bits (estado) de xmm1 con una clave redondo de 128 bits de xmm2/m128. |
VEX.128.66.0F38.WIG DC /r | VAESENC xmm1, xmm2, xmm3/m128 | B | Valido | Valido | Realizar una ronda de un flujo de encriptación AES, utilizando un AVX de 128 bits (estado) de xmm2 con una clave redondo de 128 bits de xmm3/m128; almacenar el resultado en xmm1. |
VEX.256.66.0F38.WIG DC /r | VAESENC ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Realizar una ronda de un flujo de encriptación AES, utilizando dos datos de 128 bits (estado) de ymm2 con dos claves redondos de 128 bits de ymm3/m256; almacenar el resultado en ymm1. |
EVEX.128.66.0F38.WIG DC /r | VAESENC xmm1, xmm2, xmm3/m128 | C | Valido | Valido | Realizar una ronda de un flujo de encriptación AES, utilizando uno (AVX512VL OR AVX10.1) datos de 128 bits (estado) de xmm2 con una clave redondo de 128 bits del xmm3/m128; almacenar el resultado en xmm1. |
EVEX.256.66.0F38.WIG DC /r | VAESENC ymm1, ymm2, ymm3/m256 | C | Valido | Valido | Realizar una ronda de un flujo de encriptación AES, utilizando dos (AVX512VL OR AVX10.1) datos de 128 bits (estado) de ymm2 con dos claves redondo de 128 bits del ymm3/m256; almacenar el resultado en ymm1. |
EVEX.512.66.0F38.WIG DC /r | VAESENC zmm1, zmm2, zmm3/m512 | C | Valido | Valido | Realizar una ronda de un flujo de encriptación AES, utilizando (AVX512F OR AVX10.1) cuatro datos de 128 bits (estado) de zmm2 con cuatro claves redondo de 128 bits del zmm3/m512; almacenar el resultado en zmm1. |
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
modrm.reglectura y escriturabyte 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
B
modrm.regescriturabyte ModRM, campo reg (bits 5-3)vex.vvvvlecturaprefijo VEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
C
modrm.regescriturabyte ModRM, campo reg (bits 5-3)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Tupla: Full Mem
Coste medido
Cargando las mediciones de arch-data...
Descripción
Esta instrucción realiza una sola ronda de un flujo de encriptación AES utilizando uno/dos/cuatro (dependiendo de la longitud vectorial) datos de 128 bits (estado) del primer operando de origen con uno/dos/cuatro (dependiendo de la longitud vectorial) redondo clave(s) del segundo operando de origen, y almacena el resultado en el operando de destino.
Utilice la instrucción AESENC para todos menos las últimas rondas de encriptación. Para la última ronda de cifrado, utilice la instrucción AESENC- CLAST.
VEX y EVEX versiones codificadas de la instrucción permiten la operación 3-operando (no destructiva). El legado versiones codificadas de la instrucción requiere que el primer operando de origen y el operando de destino sean los mismos y deben ser un registro XMM.
La forma codificada EVEX de esta instrucción no soporta la supresión de falla de memoria.
Operación
AESENC
STATE := SRC1;
RoundKey := SRC2;
STATE := ShiftRows( STATE );
STATE := SubBytes( STATE );
STATE := MixColumns( STATE );
DEST[127:0] := STATE XOR RoundKey;
DEST[MAXVL-1:128] (Unmodified)
VAESENC (128b and 256b VEX Encoded Versions)
(KL,VL) = (1,128), (2,256)
FOR I := 0 to KL-1:
STATE := SRC1.xmm[i]
RoundKey := SRC2.xmm[i]
STATE := ShiftRows( STATE )
STATE := SubBytes( STATE )
STATE := MixColumns( STATE )
DEST.xmm[i] := STATE XOR RoundKey
DEST[MAXVL-1:VL] := 0
VAESENC (EVEX Encoded Version)
(KL,VL) = (1,128), (2,256), (4,512)
FOR i := 0 to KL-1:
STATE := SRC1.xmm[i] // xmm[i] is the i'th xmm word in the SIMD register
RoundKey := SRC2.xmm[i]
STATE := ShiftRows( STATE )
STATE := SubBytes( STATE )
STATE := MixColumns( STATE )
DEST.xmm[i] := STATE XOR RoundKey
DEST[MAXVL-1:VL] := 0Intel C/C++ compilador intrínseco
(V)AESENC __m128i _mm_aesenc (__m128i, __m128i) VAESENC __m256i _mm256_aesenc_epi128(__m256i, __m256i);
VAESENC __m512i _mm512_aesenc_epi128(__m512i, __m512i);SIMD coma flotante Excepciones
None.
Otras excepciones
Ver Tabla 2-21, "Tipo 4 Condiciones de Excepción".
EVEX-encoded: Ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".