RDRAND
Lea el número de azar
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
NFx 0F C7 /6 | RDRAND r16 | M | Valido | Valido | Lea un número aleatorio de 16 bits y almacene en el registro de destino. |
NFx 0F C7 /6 | RDRAND r32 | M | Valido | Valido | Lea un número aleatorio de 32 bits y almacene en el registro de destino. |
NFx REX.W + 0F C7 /6 | RDRAND r64 | M | Valido | No valido | Lea un número aleatorio de 64 bits y almacene en el registro de destino. |
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.
M
modrm.rmescriturabyte 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...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
Carga un hardware generado valor aleatorio y almacenarlo en el registro de destino. El tamaño del valor aleatorio se determina por el tamaño del registro de destino y el modo operativo. La bandera de acarreo indica si hay un valor aleatorio disponible en el momento en que se ejecuta la instrucción. CF=1 indica que los datos en el destino son válidos. De lo contrario CF=0 y los datos en el operando de destino serán devueltos como ceros para el ancho especificado. Todas las otras banderas se ven obligadas a 0 en cualquier situación. El software debe verificar el estado de CF=1 para determinar si se ha devuelto un valor aleatorio válido, de lo contrario se espera que la ejecución de RDRAND (ver Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1, Sección 7.3.17, "Random Number Generator Instructions").
Esta instrucción está disponible en todos los niveles de privilegios.
En modo de 64 bits, el tamaño de operando predeterminado de la instrucción es de 32 bits. El uso de un prefijo REX en forma de REX.B permite el acceso a registros adicionales (R8-R15). Utilizar un prefijo REX en forma de REX.W promueve la operación a 64 bits operandos. Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.
Operación
IF HW_RND_GEN.ready = 1
THEN
CASE of
operand size is 64: DEST[63:0] := HW_RND_GEN.data;
operand size is 32: DEST[31:0] := HW_RND_GEN.data;
operand size is 16: DEST[15:0] := HW_RND_GEN.data;
ESAC
CF := 1;
ELSE
CASE of
operand size is 64: DEST[63:0] := 0;
operand size is 32: DEST[31:0] := 0;
operand size is 16: DEST[15:0] := 0;
ESAC
CF := 0;
FI
OF, SF, ZF, AF, PF := 0;Banderas afectadas
La bandera CF se establece según el resultado (ver la sección "Operación" arriba). Las banderas OF, SF, ZF, AF y PF se fijan en 0.
Intel C/C++ compilador intrínseco
RDRAND int _rdrand16_step( unsigned short * );
RDRAND int _rdrand32_step( unsigned int * );
RDRAND int _rdrand64_step( unsigned __int64 *);Excepciones
Modo protegido
#UD | Si se utiliza el prefijo LOCK. Si CPUID.01H:ECX.RDRAND[30] = 0. |
Modo real
| Las mismas excepciones que en modo protegido. |
Modo virtual-8086
| Las mismas excepciones que en modo protegido. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
| Las mismas excepciones que en modo protegido. |