AESENC

Realizar una ronda de un flujo de cifrado AES

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 38 DC /rAESENC xmm1, xmm2/m128AValidoValidoRealice 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 /rVAESENC xmm1, xmm2, xmm3/m128BValidoValidoRealizar 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 /rVAESENC ymm1, ymm2, ymm3/m256BValidoValidoRealizar 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 /rVAESENC xmm1, xmm2, xmm3/m128CValidoValidoRealizar 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 /rVAESENC ymm1, ymm2, ymm3/m256CValidoValidoRealizar 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 /rVAESENC zmm1, zmm2, zmm3/m512CValidoValidoRealizar 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

  1. modrm.reg lectura y 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

B

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

C

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. evex.vvvv lecturaprefijo EVEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte 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] := 0

Intel 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".

Fuentes