listados de instrucciones x86 - x86 instruction listings


El conjunto de instrucciones x86 se refiere al conjunto de instrucciones que admiten los microprocesadores compatibles con x86 . Las instrucciones suelen ser parte de un programa ejecutable , a menudo almacenado como un archivo de computadora y ejecutado en el procesador.

El conjunto de instrucciones x86 se ha ampliado varias veces, introduciendo registros y tipos de datos más amplios , así como nuevas funciones.

instrucciones enteras x86

A continuación se muestra el conjunto completo de instrucciones 8086/8088 de Intel (81 instrucciones en total). La mayoría, si no todas, de estas instrucciones están disponibles en modo de 32 bits; simplemente operan en registros de 32 bits ( eax , ebx , etc.) y valores en lugar de sus contrapartes de 16 bits ( ax , bx , etc.). Consulte también el lenguaje ensamblador x86 para obtener un tutorial rápido de esta familia de procesadores. El conjunto de instrucciones actualizado también se agrupa de acuerdo a la arquitectura ( i386 , i486 , i686 ) y más generalmente se refiere como (32-bit) x86 y (64-bit) x86-64 (también conocido como AMD64 ).

Instrucciones originales 8086/8088

Conjunto de instrucciones original 8086/8088
Instrucción Sentido Notas Código de operación
AAA ASCII ajusta AL después de la adición utilizado con decimal codificado en binario desempaquetado 0x37
AAD ASCII ajusta AX antes de la división La hoja de datos 8086/8088 documenta solo la versión base 10 de la instrucción AAD ( código de operación 0xD5 0x0A), pero cualquier otra base funcionará. La documentación posterior de Intel también tiene la forma genérica. NEC V20 y V30 (y posiblemente otras CPU de la serie V de NEC) siempre usan base 10 e ignoran el argumento, lo que provoca una serie de incompatibilidades 0xD5
AAM ASCII ajusta AX después de la multiplicación Solo se documenta la versión base 10 (el operando es 0xA), consulte las notas para AAD 0xD4
AAS ASCII ajusta AL después de la resta 0x3F
ADC Agregar con llevar destination = destination + source + carry_flag 0x10… 0x15, 0x80… 0x81 / 2, 0x82… 0x83 / 2 (desde 80186)
AGREGAR Agregar (1) r/m += r/imm;(2)r += m/imm; 0x00… 0x05, 0x80 / ​​0… 0x81 / 0, 0x82 / 0… 0x83 / 0 (desde 80186)
Y Y lógico (1) r/m &= r/imm;(2)r &= m/imm; 0x20… 0x25, 0x80… 0x81 / 4, 0x82… 0x83 / 4 (desde 80186)
LLAMA Procedimiento de llamada push eip; eip points to the instruction directly after the call 0x9A, 0xE8, 0xFF / 2, 0xFF / 3
CBW Convertir byte en palabra 0x98
CVX Bandera de transporte clara CF = 0; 0xF8
CLD Bandera de dirección clara DF = 0; 0xFC
CLI Bandera de interrupción clara IF = 0; 0xFA
CMC Bandera de transporte de complemento 0xF5
CMP Comparar operandos 0x38… 0x3D, 0x80… 0x81 / 7, 0x82… 0x83 / 7 (desde 80186)
CMPSB Comparar bytes en la memoria 0xA6
CMPSW Comparar palabras 0xA7
CWD Convertir palabra en palabra doble 0x99
DAA Ajuste decimal AL después de la adición (usado con decimal empaquetado codificado en binario ) 0x27
DAS Ajuste decimal AL después de la resta 0x2F
DIC Disminuir en 1 0x48… 0x4F, 0xFE / 1, 0xFF / 1
DIV División sin firmar (1) AX = DX:AX / r/m;resultante DX = remainder(2) AL = AX / r/m;resultanteAH = remainder 0xF7 / 6, 0xF6 / 6
ESC Usado con unidad de punto flotante 0xD8..0xDF
HLT Entrar en estado de detención 0xF4
IDIV División firmada (1) AX = DX:AX / r/m;resultante DX = remainder(2) AL = AX / r/m;resultanteAH = remainder 0xF7 / 7, 0xF6 / 7
IMUL Multiplicar firmado (1) DX:AX = AX * r/m;(2)AX = AL * r/m 0x69, 0x6B (ambos desde 80186), 0xF7 / 5, 0xF6 / 5, 0x0FAF (desde 80386)
EN Entrada del puerto (1) AL = port[imm];(2) AL = port[DX];(3) AX = port[imm];(4)AX = port[DX]; 0xE4, 0xE5, 0xEC, 0xED
C ª Incrementar en 1 0x40… 0x47, 0xFE / 0, 0xFF / 0
EN T Llamar para interrumpir 0xCC, 0xCD
DENTRO Llamar para interrumpir si se desborda 0xCE
IRET Regresar de la interrupción 0xCF
Jcc Saltar si condición ( JA, JAE, JB, JBE, JC, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO , JP, JPE, JPO, JS, JZ ) 0x70… 0x7F, 0x0F80… 0x0F8F (desde 80386)
JCXZ Saltar si CX es cero 0xE3
JMP Salto 0xE9… 0xEB, 0xFF / 4, 0xFF / 5
LAHF Cargar BANDERAS en el registro AH 0x9F
SUD Cargar puntero con DS 0xC5
PASTO Cargar dirección efectiva 0x8D
LES Cargar ES con puntero 0xC4
CERRAR CON LLAVE Confirmar señal BUS LOCK # (para multiprocesamiento) 0xF0
LODSB Cargar byte de cadena if (DF==0) AL = *SI++; else AL = *SI--; 0xAC
LODSW Cargar palabra de cadena if (DF==0) AX = *SI++; else AX = *SI--; 0xAD
BUCLE / BUCLEx Control de bucle ( LOOPE, LOOPNE, LOOPNZ, LOOPZ )if (x && --CX) goto lbl; 0xE0… 0xE2
MOV Moverse copia datos de una ubicación a otra, (1) r/m = r;(2)r = r/m; 0xA0 ... 0xA3
MOVSB Mover byte de una cadena a otra
if (DF==0) 
  *(byte*)DI++ = *(byte*)SI++; 
else 
  *(byte*)DI-- = *(byte*)SI--;
0xA4
MOVSW Mover palabra de una cadena a otra
if (DF==0) 
  *(word*)DI++ = *(word*)SI++; 
else 
  *(word*)DI-- = *(word*)SI--;
0xA5
MUL Multiplicar sin signo (1) DX:AX = AX * r/m;(2)AX = AL * r/m; 0xF7 / 4, 0xF6 / 4
NEG Negación del complemento a dos r/m *= -1; 0xF6 / 3… 0xF7 / 3
NOP No operacion código de operación equivalente a XCHG EAX, EAX 0x90
NO Negar el operando, NOT lógico r/m ^= -1; 0xF6 / 2… 0xF7 / 2
O OR lógico (1) (2)r/m |= r/imm;r |= m/imm; 0x08… 0x0D, 0x80… 0x81 / 1, 0x82… 0x83 / 1 (desde 80186)
FUERA Salida a puerto (1) port[imm] = AL;(2) port[DX] = AL;(3) port[imm] = AX;(4)port[DX] = AX; 0xE6, 0xE7, 0xEE, 0xEF
MÚSICA POP Extraer datos de la pila r/m = *SP++;POP CS (código de operación 0x0F) funciona solo en 8086/8088. Las CPU posteriores usan 0x0F como prefijo para instrucciones más nuevas. 0x07, 0x0F (solo 8086/8088), 0x17, 0x1F, 0x58… 0x5F, 0x8F / 0
POPF Pop FLAGS registrarse de la pila FLAGS = *SP++; 0x9D
EMPUJAR Empuje los datos a la pila *--SP = r/m; 0x06, 0x0E, 0x16, 0x1E, 0x50… 0x57, 0x68, 0x6A (ambos desde 80186), 0xFF / 6
PUSHF Empuje las BANDERAS en la pila *--SP = FLAGS; 0x9C
RCL Girar a la izquierda (con transporte) 0xC0… 0xC1 / 2 (desde 80186), 0xD0… 0xD3 / 2
RCR Girar a la derecha (con acarreo) 0xC0… 0xC1 / 3 (desde 80186), 0xD0… 0xD3 / 3
REPxx Repetir MOVS / STOS / CMPS / LODS / SCAS ( REP, REPE, REPNE, REPNZ, REPZ ) 0xF2, 0xF3
RETIRADO Regreso del procedimiento No es una instrucción real. El ensamblador los traducirá a un RETN o un RETF según el modelo de memoria del sistema de destino.
REGRESAR Regreso del procedimiento cercano 0xC2, 0xC3
RETF Regreso del procedimiento lejano 0xCA, 0xCB
ROL Girar a la izquierda 0xC0… 0xC1 / 0 (desde 80186), 0xD0… 0xD3 / 0
ROR Gira a la derecha 0xC0… 0xC1 / 1 (desde 80186), 0xD0… 0xD3 / 1
SAHF Almacenar AH en BANDERAS 0x9E
SAL Desplazar aritméticamente a la izquierda (desplazamiento con signo a la izquierda) (1) r/m <<= 1;(2)r/m <<= CL; 0xC0… 0xC1 / 4 (desde 80186), 0xD0… 0xD3 / 4
SAR Desplazar aritméticamente a la derecha (desplazamiento con signo a la derecha) (1) (signed) r/m >>= 1;(2)(signed) r/m >>= CL; 0xC0… 0xC1 / 7 (desde 80186), 0xD0… 0xD3 / 7
SBB Resta con pedir prestado La codificación alternativa de 1 byte de SBB AL, ALestá disponible a través de una instrucción SALC no documentada . 0x18… 0x1D, 0x80… 0x81 / 3, 0x82… 0x83 / 3 (desde 80186)
SCASB Comparar cadena de bytes 0xAE
SCASW Comparar cadena de palabras 0xAF
SHL Desplazar a la izquierda (desplazamiento a la izquierda sin firmar) 0xC0… 0xC1 / 4 (desde 80186), 0xD0… 0xD3 / 4
SHR Mayús a la derecha (desplazamiento a la derecha sin firmar) 0xC0… 0xC1 / 5 (desde 80186), 0xD0… 0xD3 / 5
STC Establecer bandera de transporte CF = 1; 0xF9
ETS Establecer bandera de dirección DF = 1; 0xFD
ITS Establecer bandera de interrupción IF = 1; 0xFB
STOSB Almacenar byte en cadena if (DF==0) *ES:DI++ = AL; else *ES:DI-- = AL; 0xAA
STOSW Almacenar palabra en cadena if (DF==0) *ES:DI++ = AX; else *ES:DI-- = AX; 0xAB
SUB Sustracción (1) r/m -= r/imm;(2)r -= m/imm; 0x28… 0x2D, ​​0x80… 0x81 / 5, 0x82… 0x83 / 5 (desde 80186)
PRUEBA Comparación lógica (Y) (1) r/m & r/imm;(2)r & m/imm; 0x84, 0x84, 0xA8, 0xA9, 0xF6 / 0, 0xF7 / 0
ESPERE Espere hasta que no esté ocupado Espera hasta que el pin BUSY # esté inactivo (se usa con la unidad de punto flotante ) 0x9B
XCHG Intercambiar datos r :=: r/m;Un spinlock normalmente usa xchg como una operación atómica . ( error de coma ). 0x86, 0x87, 0x91… 0x97
XLAT Traducción de búsqueda de tabla se comporta como MOV AL, [BX+AL] 0xD7
XOR Exclusivo o (1) r/m ^= r/imm;(2)r ^= m/imm; 0x30… 0x35, 0x80… 0x81 / 6, 0x82… 0x83 / 6 (desde 80186)

Agregado en procesadores específicos

Añadido con 80186 / 80188

Instrucción Sentido Notas
LIGADO Verifique el índice de la matriz contra los límites genera la interrupción de software 5 si falla la prueba
INGRESAR Entrar en el marco de la pila Modifica la pila para ingresar al procedimiento para lenguaje de alto nivel. Toma dos operandos: la cantidad de almacenamiento que se asignará en la pila y el nivel de anidamiento del procedimiento.
EN S Entrada de puerto a cadena equivalente a:
IN (E)AX, DX
MOV ES:[(E)DI], (E)AX
; adjust (E)DI according to operand size and DF
DEJAR Dejar el marco de la pila Libera el almacenamiento de pila local creado por la instrucción ENTER anterior.
SALIDAS Cadena de salida al puerto equivalente a:
MOV (E)AX, DS:[(E)SI]
OUT DX, (E)AX
; adjust (E)SI according to operand size and DF
POPA Saque todos los registros de propósito general de la pila equivalente a:
POP DI
POP SI
POP BP
POP AX ; no POP SP here, all it does is ADD SP, 2 (since AX will be overwritten later)
POP BX
POP DX
POP CX
POP AX
PUSHA Empuje todos los registros de propósito general en la pila equivalente a:
PUSH AX
PUSH CX
PUSH DX
PUSH BX
PUSH SP ; The value stored is the initial SP value
PUSH BP
PUSH SI
PUSH DI
PUSH inmediato Empuje un valor de byte / palabra inmediato en la pila ejemplo:
PUSH 12h
PUSH 1200h
IMUL inmediato Multiplicación con signo del valor inmediato de byte / palabra ejemplo:
IMUL BX,12h
IMUL DX,1200h
IMUL CX, DX, 12h
IMUL BX, SI, 1200h
IMUL DI, word ptr [BX+SI], 12h
IMUL SI, word ptr [BP-4], 1200h
SHL / SHR / SAL / SAR / ROL / ROR / RCL / RCR inmediato Rotar / desplazar bits con un valor inmediato superior a 1 ejemplo:
ROL AX,3
SHR BL,3

Agregado con 80286

Instrucción Sentido Notas
ARPL Ajustar el campo RPL del selector
CLTS Borrar bandera de tarea conmutada en el registro CR0
LAR Cargar byte de derechos de acceso
LGDT Cargar tabla de descriptores globales
LIDT Tabla de descriptores de interrupción de carga
LLDT Cargar la tabla de descriptores locales
LMSW Cargar palabra de estado de la máquina
CARGAR TODO Cargue todos los registros de la CPU, incluidos los internos como GDT Indocumentados, solo 80286 y 80386
LSL Límite de segmento de carga
LTR Cargar registro de tareas
SGDT Almacenar tabla de descriptores globales
SIDT Almacenar tabla de descriptores de interrupciones
SLDT Almacenar tabla de descriptores locales
SMSW Almacenar palabra de estado de la máquina
STR Registro de tareas de la tienda
VERR Verificar un segmento para leer
VERW Verificar un segmento para escribir

Agregado con 80386

Instrucción Sentido Notas
BSF Exploración de bits hacia adelante
BSR Exploración de bits inversa
BT Prueba de bits
BTC Prueba de bits y complemento
BTR Prueba de bits y reinicio
BTS Prueba y ajuste de bits
CDQ Convertir palabra doble en palabra cuádruple Sign-extiende EAX en EDX, formando el EDX de cuatro palabras: EAX. Dado que (I) DIV usa EDX: EAX como entrada, se debe llamar a CDQ después de configurar EAX si EDX no se inicializa manualmente (como en la división 64/32) antes de (I) DIV.
CMPSD Comparar cadena de doble palabra Compara ES: [(E) DI] con DS: [(E) SI] y aumenta o disminuye tanto (E) DI como (E) SI, dependiendo de DF; puede tener el prefijo REP
CWDE Convertir palabra en palabra doble A diferencia de CWD, CWDE sign-extiende AX a EAX en lugar de AX a DX: AX
IBTS Insertar cadena de bits descontinuado con el paso B1 de 80386
INSD Entrada de puerto a cadena de doble palabra
IRETx Interrumpir el retorno; El sufijo D significa retorno de 32 bits, el sufijo F significa que no genera código de epílogo (es decir, instrucción LEAVE) Utilice IRETD en lugar de IRET en situaciones de 32 bits
JECXZ Saltar si ECX es cero
LFS, LGS Cargar puntero lejano
LSS Segmento de pila de carga
LODSD Cargar cadena de doble palabra EAX = *ES:EDI±±;(± ± depende de DF, ES no se puede anular); puede tener el prefijo REP
BUCLE, BUCLE cc W Bucle, bucle condicional Igual que LOOP, LOOP cc para procesadores anteriores
LOOPD, LOOPccD Bucle mientras es igual if (cc && --ECX) goto lbl;, cc = Z (ero), E (cual), N en Z ero, N (en) E (cual)
MOV hacia / desde CR / DR / TR Mover hacia / desde registros especiales CR = registros de control, DR = registros de depuración, TR = registros de prueba (hasta 80486)
MOVSD Mover cadena de doble palabra *(dword*)ES:EDI±± = *(dword*)ESI±±;(± ± depende de DF); puede tener el prefijo REP
MOVSX Move with sign-extension (long)r = (signed char) r/m; y similar
MOVZX Mover con extensión cero (long)r = (unsigned char) r/m; y similar
OUTSD Salida al puerto desde una cadena de doble palabra port[DX] = *(long*)ESI±±; (± ± depende de DF)
POPAD Extraer todos los registros de palabra doble (32 bits) de la pila No hace estallar el registro ESP fuera de la pila
POPFD Pop datos en el registro EFLAGS
EMPUJAR Empuje todos los registros de palabra doble (32 bits) en la pila
PUSHFD Empuje el registro EFLAGS en la pila
SCASD Escanear datos de cadena de doble palabra Compara ES: [(E) DI] con EAX y aumenta o disminuye (E) DI, según DF; puede tener el prefijo REP
SETcc Establecer byte a uno en condición, cero en caso contrario ( SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC, SETNE, SETNG, SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO , SETP, SETPE, SETPO, SETS, SETZ )
SHLD Desplazar palabra doble a la izquierda
SHRD Desplazar palabra doble a la derecha r1 = r1>>CL ∣ r2<<(32-CL); En lugar de CL, se puede utilizar el inmediato 1
STOSD Almacenar cadena de doble palabra *ES:EDI±± = EAX;(± ± depende de DF, ES no se puede anular); puede tener el prefijo REP
XBTS Extraer cadena de bits descontinuado con el paso B1 de 80386

Agregado con 80486

Instrucción Sentido Notas
BSWAP Intercambio de bytes r = r<<24 | r<<8&0x00FF0000 | r>>8&0x0000FF00 | r>>24;Solo definido para registros de 32 bits. Usualmente se usa para cambiar entre representaciones de little endian y big endian. Cuando se usa con registros de 16 bits produce varios resultados diferentes en 486, 586 y Bochs / QEMU .
CMPXCHG COMPARACIÓN Y CAMBIO ATÓMICOS Consulte Comparar e intercambiar / en una versión posterior 80386 como código de operación no documentado disponible
INVD Invalidar cachés internos Vaciar cachés internos
INVLPG Invalidar entrada TLB Invalidar la entrada de TLB para la página que contiene los datos especificados
WBINVD Reescribir e invalidar caché Escribe todas las líneas de caché modificadas en la caché interna del procesador en la memoria principal e invalida las cachés internas.
XADD intercambiar y añadir Intercambia el primer operando con el segundo operando, luego carga la suma de los dos valores en el operando de destino.

Agregado con Pentium

Instrucción Sentido Notas
CPUID Identificación de CPU Devuelve datos sobre la identificación y las funciones del procesador, y devuelve datos a los registros EAX, EBX, ECX y EDX. Funciones de instrucción especificadas por el registro EAX. Esto también se agregó a los procesadores 80486 posteriores .
CMPXCHG8B CoMPare y eXCHanGe 8 bytes Compare EDX: EAX con m64. Si es igual, configure ZF y cargue ECX: EBX en m64. De lo contrario, borre ZF y cargue m64 en EDX: EAX.
RDMSR Lectura del registro específico del modelo Cargue MSR especificado por ECX en EDX: EAX
RDTSC Contador de sello de tiempo de lectura Devuelve el número de tics del procesador desde que el procesador está "EN LÍNEA" (desde la última vez que se encendió el sistema)
WRMSR Escribir en el registro específico del modelo Escriba el valor en EDX: EAX a MSR especificado por ECX
RSM Reanudar desde el modo de gestión del sistema Esto fue introducido por el i 386SL y posteriores y también está en el i 486SL y posteriores. Se reanuda desde el modo de gestión del sistema (SMM)

Agregado con Pentium MMX

Instrucción Sentido Notas
RDPMC Lea el PMC [Contador de supervisión del rendimiento] Especificado en el registro ECX en los registros EDX: EAX

También se agregaron registros MMX e instrucciones de soporte MMX . Se pueden utilizar tanto para operaciones con enteros como en coma flotante, ver más abajo.

Agregado con AMD K6

Instrucción Sentido Notas
SYSCALL funcionalmente equivalente a SYSENTER
SYSRET funcionalmente equivalente a SYSEXIT

AMD cambió el bit de detección de CPUID para esta función desde el K6-II en adelante.

Agregado con Pentium Pro

Instrucción Sentido Notas
CMOVcc Movimiento condicional (CMOVA, CMOVAE, CMOVB, CMOVBE, CMOVC, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB, CMOVNBE, CMOVNC, CMOVNE, CMOVNG, CMOVOVNGE, CMOVNL, CMOVNLE, CMOVOVNZ, CMOVNL, CMOVNLE, CMOVOVNZ , CMOVP, CMOVPE, CMOVPO, CMOVS, CMOVZ)
UD2 Instrucción indefinida Genera una excepción de código de operación no válida. Esta instrucción se proporciona para que las pruebas de software generen explícitamente un código de operación no válido. El código de operación de esta instrucción está reservado para este propósito.

Agregado con Pentium II

Instrucción Sentido Notas
SYSENTER LLAMADA AL SISTEMA ENTER A veces llamada instrucción de llamada rápida al sistema, esta instrucción estaba destinada a aumentar el rendimiento de las llamadas al sistema operativo. Tenga en cuenta que en el Pentium Pro, la instrucción CPUID informa incorrectamente que estas instrucciones están disponibles.
SYSEXIT LLAMADA AL SISTEMA EXIT

Agregado con SSE

Instrucción Código de operación Sentido Notas
NOP r / m16 0F 1F / 0 Instrucción de no operación de varios bytes.
NOP r / m32
PREFETCHT0 0F 18/1 Obtener datos previamente de la dirección Búsqueda previa en todos los niveles de caché
PREFETCHT1 0F 18/2 Obtener datos previamente de la dirección Búsqueda previa en todos los niveles de caché EXCEPTO L1
PREFETCHT2 0F 18/3 Obtener datos previamente de la dirección Búsqueda previa en todos los niveles de caché EXCEPTO L1 y L2
PREFETCHNTA 0F 18/0 Obtener datos previamente de la dirección Prefetch a la estructura de caché no temporal, minimizando la contaminación de la caché.
SFENCE 0F AE F8 Cerca de la tienda Sugerencia del procesador para asegurarse de que todas las operaciones de la tienda que tuvieron lugar antes de la llamada SFENCE sean visibles a nivel mundial

Agregado con SSE2

Instrucción Código de operación Sentido Notas
CLFLUSH m8 0F AE / 7 Vaciado de línea de caché Invalida la línea de caché que contiene la dirección lineal especificada con el operando de origen de todos los niveles de la jerarquía de caché del procesador.
LFENCE 0F AE E8 Valla de carga Serializa las operaciones de carga.
MFENCE 0F AE F0 Cerca de la memoria Realiza una operación de serialización en todas las instrucciones de carga y almacenamiento que se emitieron antes de la instrucción MFENCE.
MOVNTI m32, r32 0F C3 / r Mover palabra doble no temporal Mueva doble palabra de r32 a m32, minimizando la contaminación en la jerarquía de caché.
PAUSA F3 90 Sugerencia de bucle giratorio Proporciona una pista al procesador de que el siguiente código es un bucle giratorio, para la capacidad de almacenamiento en caché

Agregado con SSE3

Instrucción Sentido Notas
MONITOR EAX, ECX, EDX Configuración de la dirección del monitor Configura un rango de direcciones lineal para ser monitoreado por hardware y activa el monitor.
MWAIT EAX, ECX Monitor espera Sugerencia del procesador para detener la ejecución de la instrucción y entrar en un estado optimizado dependiente de la implementación hasta que ocurra una clase de eventos.

Agregado con SSE4.2

Instrucción Código de operación Sentido Notas
CRC32 r32, r / m8 F2 0F 38 F0 / r Acumular CRC32 Calcula el valor CRC utilizando el polinomio CRC-32C (Castagnoli) 0x11EDC6F41 (forma normal 0x1EDC6F41). Este es el polinomio utilizado en iSCSI. A diferencia del más popular utilizado en Ethernet, su paridad es par, por lo que puede detectar cualquier error con un número impar de bits modificados.
CRC32 r32, r / m8 F2 REX 0F 38 F0 / r
CRC32 r32, r / m16 F2 0F 38 F1 / r
CRC32 r32, r / m32 F2 0F 38 F1 / r
CRC32 r64, r / m8 F2 REX.W 0F 38 F0 / r
CRC32 r64, r / m64 F2 REX.W 0F 38 F1 / r
CRC32 r32, r / m8 F2 0F 38 F0 / r

Agregado con x86-64

Instrucción Sentido Notas
CDQE Firmar extender EAX en RAX
CQO Firmar extender RAX a RDX: RAX
CMPSQ CoMPare String Quadword
CMPXCHG16B CoMPare y eXCHanGe 16 Bytes
IRETQ Retorno de 64 bits desde interrupción
JRCXZ Saltar si RCX es cero
LODSQ CUADRO PALABRA DE CADENA DE CARGA
MOVSXD MOV con Sign Extender de 32 bits a 64 bits
POPFQ Registro POP RFLAGS
PUSHFQ PUSH RFLAGS Registrarse
RDTSCP Contador de marca de tiempo de ReaD e ID del procesador
SCASQ SCAn String Quadword
STOSQ STOre String Quadword
SWAPGS Intercambie la base GS con KernelGSBase MSR

Agregado con AMD-V

Instrucción Sentido Notas Código de operación
CLGI Bandera de interrupción global clara Borra el GIF 0x0F 0x01 0xDD
INVLPGA Invalidar la entrada de TLB en un ASID especificado Invalida la asignación de TLB para la página virtual especificada en RAX y el ASID especificado en ECX. 0x0F 0x01 0xDF
MOV (CRn) Mover hacia o desde registros de control Mueve contenido de 32 o 64 bits al registro de control y viceversa. 0x0F 0x22 o 0x0F 0x20
MOV (DRn) Mover hacia o desde registros de depuración Mueve contenido de 32 o 64 bits al registro de control y viceversa. 0x0F 0x21 o 0x0F 0x23
DESOLLARLO Inicio seguro y salto con atestación Inicio verificable de software confiable basado en una comparación segura de hash 0x0F 0x01 0xDE
STGI Establecer indicador de interrupción global Establece el GIF. 0x0F 0x01 0xDC
VMLOAD Estado de carga de VMCB Carga un subconjunto del estado del procesador del VMCB especificado por la dirección física en el registro RAX. 0x0F 0x01 0xDA
VMMCALL Llamar a VMM Utilizado exclusivamente para comunicarse con VMM 0x0F 0x01 0xD9
VMRUN Ejecutar máquina virtual Realiza un cambio al sistema operativo invitado. 0x0F 0x01 0xD8
VMSAVE Guardar estado en VMCB Guarda el estado de invitado adicional en VMCB. 0x0F 0x01 0xDB

Agregado con Intel VT-x

Instrucción Sentido Notas Código de operación
INVEPT Traducciones invalidadas derivadas de EPT Invalida entradas derivadas de EPT en TLB y cachés de estructura de paginación. 0x66 0x0F 0x38 0x80
INVVPID Traducciones invalidadas basadas en VPID Invalida entradas en TLB y cachés de estructura de paginación basadas en VPID. 0x66 0x0F 0x38 0x80
VMFUNC Invocar la función VM Invocar la función VM especificada en EAX. 0x0F 0x01 0xD4
VMPTRLD Cargar puntero a la estructura de control de la máquina virtual Carga el puntero VMCS actual de la memoria. 0x0F 0xC7 / 6
VMPTRST Almacenar puntero en la estructura de control de la máquina virtual Almacena el puntero VMCS actual en una dirección de memoria especificada. El operando de esta instrucción es siempre de 64 bits y siempre está en la memoria. 0x0F 0xC7 / 7
VMCLEAR Estructura clara de control de la máquina virtual Escribe los datos almacenados en caché en VMCS 0x66 0x0F 0xC7 / 6
VMREAD Leer campo de la estructura de control de la máquina virtual Lee un campo en VMCS 0x0F 0x78
VMWRITE Escribir campo en la estructura de control de la máquina virtual Modifica un campo en VMCS 0x0F 0x79
VMCALL Llamar a VM Monitor Llama a la función VM Monitor desde el sistema invitado 0x0F 0x01 0xC1
VMLAUNCH Lanzar máquina virtual Lanzar máquina virtual administrada por VMCS actual 0x0F 0x01 0xC2
VMRESUME Reanudar máquina virtual Reanudar la máquina virtual administrada por VMCS actual 0x0F 0x01 0xC3
VMXOFF Dejar la operación VMX Detiene el entorno de virtualización compatible con hardware 0x0F 0x01 0xC4
VMXON Ingrese la operación VMX Entra en un entorno de virtualización compatible con hardware 0xF3 0x0F 0xC7 / 6

Agregado con ABM

LZCNT , POPCNT (POPulation CouNT): manipulación avanzada de bits

Agregado con BMI1

ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT

Agregado con BMI2

BZHI, MULX, PDEP, PEXT, RORX, SARX, SHRX, SHLX

Agregado con TBM

AMD introdujo TBM junto con BMI1 en su línea de procesadores Piledriver ; Los procesadores posteriores AMD Jaguar y basados ​​en Zen no son compatibles con TBM. Ningún procesador Intel (a partir de 2020) admite TBM.

Instrucción Descripción Expresión C equivalente
BEXTR Extracto de campo de bits (con inmediato) (src >> inicio) & ((1 << len) - 1)
BLCFILL Llenar desde el bit claro más bajo x y (x + 1)
BLCI Aislar el bit claro más bajo x | ~ (x + 1)
BLCIC Aislar el bit claro más bajo y complementar ~ x y (x + 1)
BLCMSK Máscara del bit claro más bajo x ^ (x + 1)
BLCS Establecer el bit de borrado más bajo x | (x + 1)
BLSFILL Llenar desde el bit más bajo x | (x - 1)
BLSIC Aísle el bit y el complemento más bajos ~ x | (x - 1)
T1MSKC Máscara inversa de los finales ~ x | (x + 1)
TZMSK Máscara de ceros finales ~ x y (x - 1)

Agregado con el conjunto de instrucciones CLMUL

Instrucción Código de operación Descripción
PCLMULQDQ xmmreg, xmmrm, imm 66 0f 3a 44 / r ib Realice una multiplicación sin acarreo de dos polinomios de 64 bits sobre el campo finito GF (2 k ).
PCLMULLQLQDQ xmmreg, xmmrm 66 0f 3a 44 / r 00 Multiplica las mitades bajas de los dos registros.
PCLMULHQLQDQ xmmreg, xmmrm 66 0f 3a 44 / r 01 Multiplique la mitad superior del registro de destino por la mitad inferior del registro de origen.
PCLMULLQHQDQ xmmreg, xmmrm 66 0f 3a 44 / r 10 Multiplique la mitad inferior del registro de destino por la mitad superior del registro de origen.
PCLMULHQHQDQ xmmreg, xmmrm 66 0f 3a 44 / r 11 Multiplica las mitades altas de los dos registros.

Agregado con Intel ADX

Instrucción Descripción
ADCX Agrega dos enteros sin signo más acarreo, leyendo el acarreo de la bandera de acarreo y, si es necesario, configurándolo allí. No afecta a otras banderas que no sean el carry.
ADOX Agrega dos enteros sin signo más el acarreo, leyendo el acarreo del indicador de desbordamiento y, si es necesario, configurándolo allí. No afecta a otras banderas que no sean el desbordamiento.

instrucciones de coma flotante x87

Instrucciones originales 8087

Instrucción Sentido Notas
F2XM1 más preciso que para x cercano a cero
FABS Valor absoluto
FADD Agregar
FADDP Agregar y hacer estallar
FBLD Cargar BCD
FBSTP Almacenar BCD y pop
FCHS Cambiar signo
FCLEX Excepciones claras
FCOM Comparar
FCOMP Comparar y hacer estallar
FCOMPP Comparar y hacer estallar dos veces
FDECSTP Disminuir el puntero de pila de coma flotante
FDISI Deshabilitar interrupciones 8087 solamente, de lo contrario FNOP
FDIV Dividir Error de Pentium FDIV
FDIVP Dividir y hacer estallar
FDIVR Dividir invertido
FDIVRP Divide invertido y pop
FENI Habilitar interrupciones 8087 solamente, de lo contrario FNOP
GRATIS Registro gratuito
FIADD Sumar entero
FICOM Comparar enteros
FICOMP Comparar enteros y hacer estallar
FIDIV División de enteros
FIDIVR División de enteros invertida
FILD Cargar entero
FIMUL Multiplicar enteros
FINCSTP Incrementar el puntero de pila de coma flotante
FINIT Inicializar el procesador de punto flotante
PUÑO Almacenar entero
FISTP Almacenar enteros y pop
FISUB Restar entero
FISUBR Restar entero invertido
FLD Carga de punto flotante
FLD1 Cargue 1.0 en la pila
FLDCW Cargar palabra de control
FLDENV Estado del entorno de carga
FLDENVW Estado de entorno de carga, 16 bits
FLDL2E Cargue el registro 2 (e) en la pila
FLDL2T Cargue el registro 2 (10) en la pila
FLDLG2 Cargue el registro 10 (2) en la pila
FLDLN2 Cargue ln (2) en la pila
FLDPI Cargar π en la pila
FLDZ Cargue 0.0 en la pila
FMUL Multiplicar
FMULP Multiplica y explota
FNCLEX Excepciones claras, sin esperas
FNDISI Desactiva las interrupciones, no esperes 8087 solamente, de lo contrario FNOP
FNENI Habilite las interrupciones, no espere 8087 solamente, de lo contrario FNOP
FNINIT Inicialice el procesador de punto flotante, no espere
FNOP No operacion
FNSAVE Guarde el estado de la FPU, sin esperar, 8 bits
FNSAVEW Guarde el estado de la FPU, sin esperar, 16 bits
FNSTCW Almacene la palabra de control, no espere
FNSTENV Almacene el entorno de FPU, no espere
FNSTENVW Almacenar entorno FPU, sin espera, 16 bits
FNSTSW Almacenar palabra de estado, no espere
FPATAN Arctangente parcial
FPREM Resto parcial
FPTAN Tangente parcial
FRNDINT Redondear a entero
FRSTOR Restaurar estado guardado
FRSTORW Restaurar estado guardado Quizás no esté realmente disponible en 8087
FSAVE Guardar estado de FPU
FSAVEW Guardar estado de FPU, 16 bits
FSCALE Escala por factor de 2
FSQRT Raíz cuadrada
FST Tienda de punto flotante
FSTCW Almacenar palabra de control
FSTENV Almacenar entorno FPU
FSTENVW Almacenar entorno FPU, 16 bits
FSTP Tienda y pop
FSTSW Palabra de estado de la tienda
FSUB Sustraer
FSUBP Restar y hacer estallar
FSUBR Resta inversa
FSUBRP Resta inversa y pop
FTST Prueba para cero
FWAIT Espere mientras se ejecuta FPU
FXAM Examinar indicadores de condición
FXCH Registros de cambio
FXTRACT Extraer exponente y significando
FYL2X y  · log 2  x si y  = log b  2 , entonces se calcula el logaritmo en base- b
FYL2XP1 y  · log 2  ( x +1) más preciso que log 2  z si x está cerca de cero

Agregado en procesadores específicos

Agregado con 80287

Instrucción Sentido Notas
FSETPM Establecer modo protegido 80287 solamente, de lo contrario FNOP

Agregado con 80387

Instrucción Sentido Notas
FCOS Coseno
FLDENVD Estado del entorno de carga, 32 bits
FSAVED Guardar estado de FPU, 32 bits
FPREM1 Resto parcial Calcula el resto de IEEE
FRSTORD Restaurar estado guardado, 32 bits
FSIN Seno
FSINCOS Seno y coseno
FSTENVD Almacenar entorno FPU, 32 bits
FUCOM Comparación desordenada
FUCOMP Comparar y hacer estallar desordenado
FUCOMPP Comparación desordenada y pop dos veces

Agregado con Pentium Pro

  • Variantes de FCMOV : FCMOVB, FCMOVBE, FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU
  • Variantes de FCOMI : FCOMI, FCOMIP, FUCOMI, FUCOMIP

Agregado con SSE

FXRSTOR, FXSAVE

Estos también son compatibles con los Pentium II posteriores que no tienen soporte SSE

Agregado con SSE3

FISTTP (conversión de x87 a enteros con truncamiento independientemente de la palabra de estado)

Instrucciones SIMD

Instrucciones MMX

Las instrucciones MMX operan en los registros mm, que tienen 64 bits de ancho. Se comparten con los registros de la FPU.

Instrucciones originales de MMX

Agregado con Pentium MMX

Instrucción Código de operación Sentido Notas
EMMS 0F 77 Estado de tecnología MMX vacío Marca todos los registros x87 FPU para uso de FPU
MOVD mm, r / m32 0F 6E / r Mover palabra doble
MOVD r / m32, milímetro 0F 7E / r Mover palabra doble
MOVQ mm / m64, mm 0F 7F / r Mover palabra cuádruple
MOVQ mm, mm / m64 0F 6F / r Mover palabra cuádruple
MOVQ mm, r / m64 REX.W + 0F 6E / r Mover palabra cuádruple
MOVQ r / m64, milímetro REX.W + 0F 7E / r Mover palabra cuádruple
PAQUETES SDW mm1, mm2 / m64 0F 6B / r Empaquetar palabras dobles en palabras (firmadas con saturación)
EMBALAJES SWB mm1, mm2 / m64 0F 63 / r Empaquetar palabras en bytes (firmado con saturación)
PAQUETEUSWB mm, mm / m64 0F 67 / r Empaquetar palabras en bytes (sin firmar con saturación)
PADDB mm, mm / m64 0F FC / r Agregar enteros de bytes empaquetados
PADDW mm, mm / m64 0F FD / r Agregar números enteros de palabras empaquetadas
PADDD mm, mm / m64 0F FE / r Agregar enteros de doble palabra empaquetados
PADDQ mm, mm / m64 0F D4 / r Agregar enteros de cuatro palabras empaquetados
PADDSB mm, mm / m64 0F EC / r Agregue enteros de bytes firmados empaquetados y sature
ALMOHADILLAS W mm, mm / m64 0F ED / r Agregue números enteros de palabras con signos empaquetados y sature
PADDUSB mm, mm / m64 0F DC / r Agregue enteros de bytes sin firmar empaquetados y sature
PADDUSW mm, mm / m64 0F DD / r Agregue números enteros de palabras sin firmar empaquetados y sature
PAND mm, mm / m64 0F DB / r Y bit a bit
PANDN mm, mm / m64 0F DF / r Bitwise Y NO
POR mm, mm / m64 0F EB / r O bit a bit
PXOR mm, mm / m64 0F EF / r XOR bit a bit
PCMPEQB mm, mm / m64 0F 74 / r Comparar bytes empaquetados para la igualdad
PCMPEQW mm, mm / m64 0F 75 / r Comparar palabras empaquetadas para la igualdad
PCMPEQD mm, mm / m64 0F 76 / r Comparar palabras dobles empaquetadas para la igualdad
PCMPGTB mm, mm / m64 0F 64 / r Comparar enteros de bytes con signo empaquetados para valores mayores que
PCMPGTW mm, mm / m64 0F 65 / r Comparar enteros de palabras con signo empaquetadas para valores mayores que
PCMPGTD mm, mm / m64 0F 66 / r Comparar enteros empaquetados con signo de dos palabras para valores mayores que
PMADDWD mm, mm / m64 0F F5 / r Multiplique las palabras empaquetadas, agregue resultados de palabras dobles adyacentes
PMULHW mm, mm / m64 0F E5 / r Multiplica los números enteros de palabras firmadas empaquetadas, almacena 16 bits de resultados
PMULLW mm, mm / m64 0F D5 / r Multiplica los números enteros de palabras con signo empaquetados, almacena 16 bits de resultados bajos
PSLLW mm1, imm8 0F 71/6 ib Cambiar las palabras a la izquierda, cambiar a ceros
PSLLW mm, mm / m64 0F F1 / r Cambiar las palabras a la izquierda, cambiar a ceros
PSLLD mm, imm8 0F 72/6 ib Desplazar las palabras dobles a la izquierda, cambiar a ceros
PSLLD mm, mm / m64 0F F2 / r Desplazar las palabras dobles a la izquierda, cambiar a ceros
PSLLQ mm, imm8 0F 73/6 ib Desplazar palabra cuádruple a la izquierda, cambiar a ceros
PSLLQ mm, mm / m64 0F F3 / r Desplazar palabra cuádruple a la izquierda, cambiar a ceros
PSRAD mm, imm8 0F 72/4 ib Desplazar palabras dobles a la derecha, desplazar bits de signo
PSRAD mm, mm / m64 0F E2 / r Desplazar palabras dobles a la derecha, desplazar bits de signo
PSRAW mm, imm8 0F 71/4 ib Cambie las palabras correctas, cambie los bits del signo
PSRAW mm, mm / m64 0F E1 / r Cambie las palabras correctas, cambie los bits del signo
PSRLW mm, imm8 0F 71/2 ib Cambiar las palabras a la derecha, cambiar a ceros
PSRLW mm, mm / m64 0F D1 / r Cambiar las palabras a la derecha, cambiar a ceros
PSRLD mm, imm8 0F 72/2 ib Cambio de palabras dobles a la derecha, cambio de ceros
PSRLD mm, mm / m64 0F D2 / r Cambio de palabras dobles a la derecha, cambio de ceros
PSRLQ mm, imm8 0F 73/2 ib Desplazar palabra cuádruple a la derecha, cambiar a ceros
PSRLQ mm, mm / m64 0F D3 / r Desplazar palabra cuádruple a la derecha, cambiar a ceros
PSUBB mm, mm / m64 0F F8 / r Restar enteros de bytes empaquetados
PSUBW mm, mm / m64 0F F9 / r Restar números enteros de palabras empaquetadas
PSUBD mm, mm / m64 0F FA / r Restar enteros empaquetados de dos palabras
PSUBSB mm, mm / m64 0F E8 / r Restar bytes empaquetados firmados con saturación
PSUBSW mm, mm / m64 0F E9 / r Restar palabras empaquetadas con signos con saturación
PSUBUSB mm, mm / m64 0F D8 / r Restar bytes empaquetados sin firmar con saturación
PSUBUSW mm, mm / m64 0F D9 / r Restar palabras empaquetadas sin firmar con saturación
PUNPCKHBW mm, mm / m64 0F 68 / r Desempaquetar e intercalar bytes de orden superior
PUNPCKHWD mm, mm / m64 0F 69 / r Desempaquetar e intercalar palabras de alto orden
PUNPCKHDQ mm, mm / m64 0F 6A / r Desempaquetar e intercalar palabras dobles de orden superior
PUNPCKLBW mm, mm / m32 0F 60 / r Desempaquetar e intercalar bytes de orden inferior
PUNPCKLWD mm, mm / m32 0F 61 / r Desempaquetar e intercalar palabras de bajo orden
PUNPCKLDQ mm, mm / m32 0F 62 / r Desempaquetar e intercalar palabras dobles de orden inferior

Instrucciones MMX agregadas en procesadores específicos

Instrucciones EMMI

Agregado con 6x86MX de Cyrix , obsoleto ahora

PAVEB, PADDSIW, PMAGW, PDISTIB, PSUBSIW, PMVZB, PMULHRW, PMVNZB, PMVLZB, PMVGEZB, PMULHRIW, PMACHRIW

Instrucciones MMX agregadas con MMX + y SSE

La siguiente instrucción MMX se agregó con SSE. También están disponibles en Athlon con el nombre MMX +.

Instrucción Código de operación Sentido
MASKMOVQ mm1, mm2 0F F7 / r Movimiento enmascarado de Quadword
MOVNTQ m64, milímetro 0F E7 / r Mover palabra cuádruple usando una pista no temporal
PSHUFW mm1, mm2 / m64, imm8 0F 70 / r ib Mezclar palabras empaquetadas
PINSRW mm, r32 / m16, imm8 0F C4 / r Insertar palabra
PEXTRW reg, mm, imm8 0F C5 / r Extraer palabra
PMOVMSKB reg, mm 0F D7 / r Mover máscara de bytes
PMINUB mm1, mm2 / m64 0F DA / r Mínimo de enteros de bytes sin firmar empaquetados
PMAXUB mm1, mm2 / m64 0F DE / r Máximo de enteros de bytes sin firmar empaquetados
PAVGB mm1, mm2 / m64 0F E0 / r Enteros empaquetados promedio
PAVGW mm1, mm2 / m64 0F E3 / r Enteros empaquetados promedio
PMULHUW mm1, mm2 / m64 0F E4 / r Multiplicar enteros sin firmar empaquetados y almacenar un resultado alto
PMINSW mm1, mm2 / m64 0F EA / r Mínimo de enteros de palabras firmadas empaquetadas
PMAXSW mm1, mm2 / m64 0F EE / r Máximo de enteros de palabras firmadas empaquetadas
PSADBW mm1, mm2 / m64 0F F6 / r Calcular la suma de diferencias absolutas
Instrucciones MMX agregadas con SSE2

Las siguientes instrucciones MMX se agregaron con SSE2:

Instrucción Código de operación Sentido
PSUBQ mm1, mm2 / m64 0F FB / r Restar entero de cuatro palabras
PMULUDQ mm1, mm2 / m64 0F F4 / r Multiplicar números enteros de dos palabras sin signo
Instrucciones MMX agregadas con SSSE3
Instrucción Código de operación Sentido
PSIGNB mm1, mm2 / m64 0F 38 08 / r Negar / cero / preservar enteros de bytes empaquetados dependiendo del signo correspondiente
PSIGNW mm1, mm2 / m64 0F 38 09 / r Negar / cero / preservar enteros de palabras empaquetadas según el signo correspondiente
PSIGND mm1, mm2 / m64 0F 38 0A / r Negar / cero / preservar enteros empaquetados de dos palabras dependiendo del signo correspondiente
PSHUFB mm1, mm2 / m64 0F 38 00 / r Bytes aleatorios
PMULHRSW mm1, mm2 / m64 0F 38 0B / r Multiplica palabras firmadas de 16 bits, escala y redondea palabras dobles firmadas, empaqueta 16 bits altos
PMADDUBSW mm1, mm2 / m64 0F 38 04 / r Multiplique bytes firmados y no firmados, agregue un par horizontal de palabras firmadas, empaque palabras firmadas saturadas
PHSUBW mm1, mm2 / m64 0F 38 05 / r Restar y empaquetar enteros de 16 bits con signo horizontalmente
PHSUBSW mm1, mm2 / m64 0F 38 07 / r Restar y empaquetar un entero de 16 bits con signo horizontalmente con saturación
PHSUBD mm1, mm2 / m64 0F 38 06 / r Restar y empaquetar enteros de 32 bits con signo horizontalmente
PHADDSW mm1, mm2 / m64 0F 38 03 / r Suma y empaqueta enteros de 16 bits con signo horizontalmente, empaqueta enteros saturados en mm1.
PHADDW mm1, mm2 / m64 0F 38 01 / r Sumar y empaquetar enteros de 16 bits horizontalmente
PHADDD mm1, mm2 / m64 0F 38 02 / r Sumar y empaquetar enteros de 32 bits horizontalmente
PALIGNR mm1, mm2 / m64, imm8 0F 3A 0F / r ib Concatenar los operandos de origen y destino, extraer el resultado alineado por bytes desplazado hacia la derecha
PABSB mm1, mm2 / m64 0F 38 1C / r Calcule el valor absoluto de bytes y almacene el resultado sin firmar
PABSW mm1, mm2 / m64 0F 38 1D / r Calcule el valor absoluto de enteros de 16 bits y almacene el resultado sin firmar
PABSD mm1, mm2 / m64 0F 38 1E / r Calcule el valor absoluto de enteros de 32 bits y almacene el resultado sin firmar

3D¡Ahora! instrucciones

Agregado con K6-2

FEMMS, PAVGUSB, PF2ID, PFACC, PFADD, PFCMPEQ, PFCMPGE, PFCMPGT, PFMAX, PFMIN, PFMUL, PFRCP, PFRCPIT1, PFRCPIT2, PFRSQIT1, PFRSQRT, PFSUB, PFSWDUBR, PREFU

3DNow! + Instrucciones

Añadido con Athlon y K6-2 +

PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD

Agregado con Geode GX

PFRSQRTV, PFRCPV

Instrucciones SSE

Agregado con Pentium III

Las instrucciones SSE operan en registros xmm, que tienen un ancho de 128 bits.

SSE consta de las siguientes instrucciones de punto flotante SSE SIMD:

Instrucción Código de operación Sentido
ANDPS * xmm1, xmm2 / m128 0F 54 / r AND lógico bit a bit de valores de coma flotante de precisión simple empaquetados
ANDNPS * xmm1, xmm2 / m128 0F 55 / r Lógico bit a bit Y NO de valores de coma flotante de precisión simple empaquetados
ORPS * xmm1, xmm2 / m128 0F 56 / r OR lógico bit a bit de valores de coma flotante de precisión simple
XORPS * xmm1, xmm2 / m128 0F 57 / r XOR lógico bit a bit para valores de coma flotante de precisión simple
MOVUPS xmm1, xmm2 / m128 0F 10 / r Mover valores de coma flotante de precisión simple empaquetados no alineados
MOVSS xmm1, xmm2 / m32 F3 0F 10 / r Mover valores escalares de coma flotante de precisión simple
MOVUPS xmm2 / m128, xmm1 0F 11 / r Mover valores de coma flotante de precisión simple empaquetados no alineados
MOVSS xmm2 / m32, xmm1 F3 0F 11 / r Mover valores escalares de coma flotante de precisión simple
MOVLPS xmm, m64 0F 12 / r Mover valores de punto flotante de precisión simple empaquetados bajos
MOVHLPS xmm1, xmm2 0F 12 / r Mover valores de punto flotante de precisión simple empaquetados de mayor a menor
MOVLPS m64, xmm 0F 13 / r Mover valores de punto flotante de precisión simple empaquetados bajos
UNPCKLPS xmm1, xmm2 / m128 0F 14 / r Desempaquetar e intercalar valores de punto flotante de precisión simple empaquetados bajos
UNPCKHPS xmm1, xmm2 / m128 0F 15 / r Desempaquetar e intercalar valores de coma flotante de precisión simple empaquetados altos
MOVHPS xmm, m64 0F 16 / r Mover valores de punto flotante de precisión simple empaquetados altos
MOVLHPS xmm1, xmm2 0F 16 / r Mover valores de punto flotante de precisión simple empaquetados de bajo a alto
MOVHPS m64, xmm 0F 17 / r Mover valores de punto flotante de precisión simple empaquetados altos
MOVAPS xmm1, xmm2 / m128 0F 28 / r Mover valores de coma flotante de precisión simple empaquetados alineados
MOVAPS xmm2 / m128, xmm1 0F 29 / r Mover valores de coma flotante de precisión simple empaquetados alineados
MOVNTPS m128, xmm1 0F 2B / r Mover Alineados Cuatro Empaquetados Single-FP No Temporales
MOVMSKPS reg, xmm 0F 50 / r Extraer máscara de signo de 4 bits de punto flotante de precisión única empaquetada. Los bits superiores del registro están llenos de ceros.
CVTPI2PS x mm, mm / m64 0F 2A / r Convierta enteros Dword empaquetados en valores FP empaquetados de precisión simple
CVTSI2SS xmm, r / m32 F3 0F 2A / r Convertir entero Dword en valor FP escalar de precisión simple
CVTSI2SS xmm, r / m64 F3 REX.W 0F 2A / r Convertir entero Qword en valor FP escalar de precisión simple
MOVNTPS m128, xmm 0F 2B / r Almacenar valores de punto flotante de precisión simple empaquetados utilizando una sugerencia no temporal
CVTTPS2PI mm, xmm / m64 0F 2C / r Convierta con valores FP de precisión simple empaquetados con truncamiento en enteros Dword empaquetados
CVTTSS2SI r32, xmm / m32 F3 0F 2C / r Convertir con valor FP de precisión simple escalar de truncamiento a entero Dword
CVTTSS2SI r64, xmm1 / m32 F3 REX.W 0F 2C / r Convierta con truncamiento escalar valor FP de precisión simple a Qword entero
CVTPS2PI mm, xmm / m64 0F 2D / r Convierta valores FP empaquetados de precisión simple en enteros Dword empaquetados
CVTSS2SI r32, xmm / m32 F3 0F 2D / r Convierta el valor FP escalar de precisión simple en un entero Dword
CVTSS2SI r64, xmm1 / m32 F3 REX.W 0F 2D / r Convierta el valor FP escalar de precisión simple en un entero Qword
UCOMISS xmm1, xmm2 / m32 0F 2E / r Comparación desordenada de valores escalares de punto flotante de precisión simple y establecer EFLAGS
COMISS xmm1, xmm2 / m32 0F 2F / r Compare valores de coma flotante de precisión simple ordenados escalares y establezca EFLAGS
SQRTPS xmm1, xmm2 / m128 0F 51 / r Calcular raíces cuadradas de valores empaquetados de punto flotante de precisión simple
SQRTSS xmm1, xmm2 / m32 F3 0F 51 / r Calcular la raíz cuadrada del valor escalar de coma flotante de precisión simple
RSQRTPS xmm1, xmm2 / m128 0F 52 / r Calcular el recíproco de la raíz cuadrada del valor empaquetado de punto flotante de precisión simple
RSQRTSS xmm1, xmm2 / m32 F3 0F 52 / r Calcular el recíproco de la raíz cuadrada del valor escalar de punto flotante de precisión simple
RCPPS xmm1, xmm2 / m128 0F 53 / r Calcule el valor recíproco de los valores de coma flotante de precisión simple empaquetados
RCPSS xmm1, xmm2 / m32 F3 0F 53 / r Calcular el recíproco de valores escalares de coma flotante de precisión simple
ADDPS xmm1, xmm2 / m128 0F 58 / r Agregar valores de coma flotante de precisión simple empaquetados
AÑADIR xmm1, xmm2 / m32 F3 0F 58 / r Agregar valores escalares de punto flotante de precisión simple
MULPS xmm1, xmm2 / m128 0F 59 / r Valores de coma flotante de precisión simple empaquetados multiplicados
MULSOS xmm1, xmm2 / m32 F3 0F 59 / r Multiplicar valores escalares de coma flotante de precisión simple
SUBPS xmm1, xmm2 / m128 0F 5C / r Restar valores de coma flotante de precisión simple empaquetados
SUBSS xmm1, xmm2 / m32 F3 0F 5C / r Restar valores escalares de coma flotante de precisión simple
MINPS xmm1, xmm2 / m128 0F 5D / r Devolver valores mínimos de coma flotante de precisión simple empaquetados
MINSS xmm1, xmm2 / m32 F3 0F 5D / r Devolver valores mínimos escalares de punto flotante de precisión simple
DIVPS xmm1, xmm2 / m128 0F 5E / r Dividir valores de coma flotante de precisión simple empaquetados
DIVSS xmm1, xmm2 / m32 F3 0F 5E / r Dividir valores escalares de coma flotante de precisión simple
MAXPS xmm1, xmm2 / m128 0F 5F / r Devolver valores máximos de coma flotante de precisión simple empaquetados
MAXSS xmm1, xmm2 / m32 F3 0F 5F / r Devolver valores máximos de coma flotante de precisión simple escalar
LDMXCSR m32 0F AE / 2 Cargar estado de registro MXCSR
STMXCSR m32 0F AE / 3 Almacenar estado de registro MXCSR
CMPPS xmm1, xmm2 / m128, imm8 0F C2 / r ib Comparar valores de coma flotante de precisión simple empaquetados
CMPSS xmm1, xmm2 / m32, imm8 F3 0F C2 / r ib Comparar valores escalares de coma flotante de precisión simple
SHUFPS xmm1, xmm2 / m128, imm8 0F C6 / r ib Valores de coma flotante de precisión simple empaquetados aleatoriamente
  • Las operaciones de bit a bit de coma flotante ANDPS, ANDNPS, ORPS y XORPS producen el mismo resultado que el entero SSE2 (PAND, PANDN, POR, PXOR) y los dobles (ANDPD, ANDNPD, ORPD, XORPD), pero pueden introducir una latencia adicional para el dominio. cambia cuando se aplican valores del tipo incorrecto.

Instrucciones SSE2

Agregado con Pentium 4

Instrucciones de punto flotante SSE2 SIMD

Instrucciones de movimiento de datos SSE2
Instrucción Código de operación Sentido
MOVAPD xmm1, xmm2 / m128 66 0F 28 / r Mover valores de coma flotante de precisión doble empaquetados alineados
MOVAPD xmm2 / m128, xmm1 66 0F 29 / r Mover valores de coma flotante de precisión doble empaquetados alineados
MOVNTPD m128, xmm1 66 0F 2B / r Almacene valores de coma flotante de doble precisión empaquetados mediante una sugerencia no temporal
MOVHPD xmm1, m64 66 0F 16 / r Mover el valor de coma flotante de precisión doble de alto contenido
MOVHPD m64, xmm1 66 0F 17 / r Mover el valor de coma flotante de precisión doble de alto contenido
MOVLPD xmm1, m64 66 0F 12 / r Mover el valor de punto flotante de precisión doble empaquetado bajo
MOVLPD m64, xmm1 66 0F 13 / r Mover el valor de punto flotante de precisión doble empaquetado bajo
MOVUPD xmm1, xmm2 / m128 66 0F 10 / r Mover valores de coma flotante de doble precisión empaquetados no alineados
MOVUPD xmm2 / m128, xmm1 66 0F 11 / r Mover valores de coma flotante de doble precisión empaquetados no alineados
MOVMSKPD reg, xmm 66 0F 50 / r Máscara de signo de punto flotante de doble precisión empaquetada con extracto
MOVSD * xmm1, xmm2 / m64 F2 0F 10 / r Mover o fusionar valor escalar de coma flotante de doble precisión
MOVSD xmm1 / m64, xmm2 F2 0F 11 / r Mover o fusionar valor escalar de coma flotante de doble precisión
Instrucciones aritméticas empaquetadas SSE2
Instrucción Código de operación Sentido
ADDPD xmm1, xmm2 / m128 66 0F 58 / r Agregar valores de coma flotante de doble precisión empaquetados
AÑADIR xmm1, xmm2 / m64 F2 0F 58 / r Agregue un valor bajo de coma flotante de doble precisión
DIVPD xmm1, xmm2 / m128 66 0F 5E / r Dividir valores de coma flotante de precisión doble empaquetados
DIVSD xmm1, xmm2 / m64 F2 0F 5E / r Dividir el valor escalar de coma flotante de precisión doble
MAXPD xmm1, xmm2 / m128 66 0F 5F / r Máximo de valores de coma flotante de precisión doble empaquetados
MAXSD xmm1, xmm2 / m64 F2 0F 5F / r Devuelve el valor máximo de coma flotante de precisión doble escalar
MINPD xmm1, xmm2 / m128 66 0F 5D / r Valores mínimos de coma flotante de precisión doble empaquetados
MINSD xmm1, xmm2 / m64 F2 0F 5D / r Devolver el valor de coma flotante de precisión doble escalar mínimo
MULPD xmm1, xmm2 / m128 66 0F 59 / r Multiplicar valores de coma flotante de precisión doble empaquetados
MULSD xmm1, xmm2 / m64 F2 0F 59 / r Multiplicar el valor escalar de coma flotante de precisión doble
SQRTPD xmm1, xmm2 / m128 66 0F 51 / r Raíz cuadrada de valores de coma flotante de doble precisión
SQRTSD xmm1, xmm2 / m64 F2 0F 51 / r Calcular la raíz cuadrada del valor escalar de coma flotante de precisión doble
SUBPD xmm1, xmm2 / m128 66 0F 5C / r Restar valores de coma flotante de doble precisión empaquetados
SUBSD xmm1, xmm2 / m64 F2 0F 5C / r Restar valor escalar de coma flotante de precisión doble
Instrucciones lógicas SSE2
Instrucción Código de operación Sentido
ANDPD xmm1, xmm2 / m128 66 0F 54 / r AND lógico bit a bit de valores de coma flotante de doble precisión empaquetados
ANDNPD xmm1, xmm2 / m128 66 0F 55 / r Lógico bit a bit Y NO de valores de coma flotante de doble precisión empaquetados
ORPD xmm1, xmm2 / m128 66 0F 56 / r OR lógico bit a bit de valores de coma flotante de precisión doble empaquetados
XORPD xmm1, xmm2 / m128 66 0F 57 / r XOR lógico bit a bit de valores de coma flotante de doble precisión empaquetados
SSE2 comparar instrucciones
Instrucción Código de operación Sentido
CMPPD xmm1, xmm2 / m128, imm8 66 0F C2 / r ib Comparar valores de coma flotante de precisión doble empaquetados
CMPSD * xmm1, xmm2 / m64, imm8 F2 0F C2 / r ib Comparar valores bajos de coma flotante de doble precisión
COMISD xmm1, xmm2 / m64 66 0F 2F / r Compare valores de coma flotante de precisión doble ordenados escalares y establezca EFLAGS
UCOMISD xmm1, xmm2 / m64 66 0F 2E / r Comparación desordenada de valores escalares de coma flotante de precisión doble y establecer EFLAGS
Instrucciones para barajar y desempaquetar SSE2
Instrucción Código de operación Sentido
SHUFPD xmm1, xmm2 / m128, imm8 66 0F C6 / r ib Reproducción aleatoria empaquetada de pares de valores de coma flotante de doble precisión
UNPCKHPD xmm1, xmm2 / m128 66 0F 15 / r Desempaquetar e intercalar valores de coma flotante de doble precisión empaquetados de alta precisión
UNPCKLPD xmm1, xmm2 / m128 66 0F 14 / r Desempaquetar e intercalar valores de coma flotante de doble precisión empaquetados bajos
Instrucciones de conversión SSE2
Instrucción Código de operación Sentido
CVTDQ2PD xmm1, xmm2 / m64 F3 0F E6 / r Convertir enteros empaquetados de dos palabras en valores empaquetados de coma flotante de doble precisión
CVTDQ2PS xmm1, xmm2 / m128 0F 5B / r Convertir enteros empaquetados de dos palabras en valores empaquetados de coma flotante de precisión simple
CVTPD2DQ xmm1, xmm2 / m128 F2 0F E6 / r Convertir valores empaquetados de coma flotante de doble precisión en enteros empaquetados de dos palabras
CVTPD2PI mm, xmm / m128 66 0F 2D / r Convierta los valores FP empaquetados de doble precisión en enteros Dword empaquetados
CVTPD2PS xmm1, xmm2 / m128 66 0F 5A / r Convierta valores de coma flotante de precisión doble empaquetados en valores de coma flotante de precisión simple empaquetados
CVTPI2PD x mm, mm / m64 66 0F 2A / r Convertir enteros Dword empaquetados en valores FP empaquetados de doble precisión
CVTPS2DQ xmm1, xmm2 / m128 66 0F 5B / r Convertir valores de coma flotante de precisión simple empaquetados en valores enteros de palabra doble con signo empaquetados
CVTPS2PD xmm1, xmm2 / m64 0F 5A / r Convertir valores empaquetados de punto flotante de precisión simple en valores empaquetados de punto flotante de precisión doble
CVTSD2SI r32, xmm1 / m64 F2 0F 2D / r Convierta el valor escalar de coma flotante de precisión doble en un entero de dos palabras
CVTSD2SI r64, xmm1 / m64 F2 REX.W 0F 2D / r Convierta el valor escalar de punto flotante de precisión doble en un entero de cuatro palabras con extensión de signo
CVTSD2SS xmm1, xmm2 / m64 F2 0F 5A / r Convertir el valor escalar de coma flotante de precisión doble en un valor escalar de coma flotante de precisión simple
CVTSI2SD xmm1, r32 / m32 F2 0F 2A / r Convertir un entero de dos palabras en un valor escalar de coma flotante de doble precisión
CVTSI2SD xmm1, r / m64 F2 REX.W 0F 2A / r Convertir entero de cuatro palabras en valor escalar de coma flotante de doble precisión
CVTSS2SD xmm1, xmm2 / m32 F3 0F 5A / r Convertir el valor escalar de coma flotante de precisión simple en un valor escalar de coma flotante de precisión doble
CVTTPD2DQ xmm1, xmm2 / m128 66 0F E6 / r Convierta con valores de coma flotante de doble precisión empaquetados con truncamiento en enteros empaquetados de dos palabras
CVTTPD2PI mm, xmm / m128 66 0F 2C / r Convierta con valores FP de doble precisión empaquetados con truncamiento en enteros Dword empaquetados
CVTTPS2DQ xmm1, xmm2 / m128 F3 0F 5B / r Convierta con valores de coma flotante de precisión simple empaquetados con truncamiento en valores enteros de palabra doble con signo empaquetados
CVTTSD2SI r32, xmm1 / m64 F2 0F 2C / r Convierta con truncamiento escalar valor de punto flotante de precisión doble en entero Dword con signo
CVTTSD2SI r64, xmm1 / m64 F2 REX.W 0F 2C / r Convertir con valor de coma flotante de doble precisión escalar de truncamiento a un entero Qword con signo

Instrucciones SSE2 SIMD para números enteros

Instrucciones similares a SSE2 MMX extendidas a registros SSE

SSE2 permite la ejecución de instrucciones MMX en registros SSE, procesando el doble de la cantidad de datos a la vez.

Instrucción Código de operación Sentido
MOVD xmm, r / m32 66 0F 6E / r Mover palabra doble
MOVD r / m32, xmm 66 0F 7E / r Mover palabra doble
MOVQ xmm1, xmm2 / m64 F3 0F 7E / r Mover palabra cuádruple
MOVQ xmm2 / m64, xmm1 66 0F D6 / r Mover palabra cuádruple
MOVQ r / m64, xmm 66 REX.W 0F 7E / r Mover palabra cuádruple
MOVQ xmm, r / m64 66 REX.W 0F 6E / r Mover palabra cuádruple
PMOVMSKB reg, xmm 66 0F D7 / r Mover una máscara de bytes, poniendo a cero los bits superiores del registro
PEXTRW reg, xmm, imm8 66 0F C5 / r ib Extraiga la palabra especificada y muévala a reg, configurando los bits 15-0 y poniendo a cero el resto
PINSRW xmm, r32 / m16, imm8 66 0F C4 / r ib Mover palabra baja en la posición de palabra especificada
PAQUETES SDW xmm1, xmm2 / m128 66 0F 6B / r Convierte 4 enteros de palabra doble con signo empaquetados en 8 enteros de palabra con signo empaquetados con saturación
PAQUETESSWB xmm1, xmm2 / m128 66 0F 63 / r Convierte 8 enteros de palabras con signo empaquetados en 16 enteros de bytes con signo empaquetados con saturación
PAQUETEUSWB xmm1, xmm2 / m128 66 0F 67 / r Convierte 8 enteros de palabras con signo en 16 enteros de bytes sin signo con saturación
PADDB xmm1, xmm2 / m128 66 0F FC / r Agregar enteros de bytes empaquetados
ALMOHADILLA xmm1, xmm2 / m128 66 0F FD / r Agregar números enteros de palabras empaquetadas
PADDD xmm1, xmm2 / m128 66 0F FE / r Agregar enteros empaquetados de dos palabras
PADDQ xmm1, xmm2 / m128 66 0F D4 / r Suma enteros de cuatro palabras empaquetados.
PADDSB xmm1, xmm2 / m128 66 0F EC / r Agregar enteros de bytes firmados empaquetados con saturación
ALMOHADILLAS W xmm1, xmm2 / m128 66 0F ED / r Agregue números enteros de palabras con signos empaquetados con saturación
PADDUSB xmm1, xmm2 / m128 66 0F DC / r Agregue enteros de bytes sin firmar empaquetados con saturación
PADDUSW xmm1, xmm2 / m128 66 0F DD / r Agregue números enteros de palabras sin firmar empaquetados con saturación
PAND xmm1, xmm2 / m128 66 0F DB / r Y bit a bit
PANDN xmm1, xmm2 / m128 66 0F DF / r Bitwise Y NO
POR xmm1, xmm2 / m128 66 0F EB / r O bit a bit
PXOR xmm1, xmm2 / m128 66 0F EF / r XOR bit a bit
PCMPEQB xmm1, xmm2 / m128 66 0F 74 / r Compare los bytes empaquetados para determinar la igualdad.
PCMPEQW xmm1, xmm2 / m128 66 0F 75 / r Compare las palabras empaquetadas para la igualdad.
PCMPEQD xmm1, xmm2 / m128 66 0F 76 / r Compare las palabras dobles empaquetadas para la igualdad.
PCMPGTB xmm1, xmm2 / m128 66 0F 64 / r Comparar enteros de bytes con signo empaquetados para valores mayores que
PCMPGTW xmm1, xmm2 / m128 66 0F 65 / r Comparar enteros de palabras con signo empaquetadas para valores mayores que
PCMPGTD xmm1, xmm2 / m128 66 0F 66 / r Comparar enteros empaquetados con signo de dos palabras para valores mayores que
PMULLW xmm1, xmm2 / m128 66 0F D5 / r Multiplica números enteros de palabras con signos empaquetados con saturación
PMULHW xmm1, xmm2 / m128 66 0F E5 / r Multiplique los enteros de palabras con signo empaquetadas, almacene los 16 bits más altos de los resultados
PMULHUW xmm1, xmm2 / m128 66 0F E4 / r Multiplique los números enteros de palabras sin firmar empaquetados, almacene los 16 bits más altos de los resultados
PMULUDQ xmm1, xmm2 / m128 66 0F F4 / r Multiplicar enteros de dos palabras sin signo empaquetados
PSLLW xmm1, xmm2 / m128 66 0F F1 / r Cambiar palabras a la izquierda mientras cambia en 0
PSLLW xmm1, imm8 66 0F 71/6 ib Cambiar palabras a la izquierda mientras cambia en 0
PSLLD xmm1, xmm2 / m128 66 0F F2 / r Desplazar las palabras dobles a la izquierda mientras cambia de 0 s
PSLLD xmm1, imm8 66 0F 72/6 ib Desplazar las palabras dobles a la izquierda mientras cambia de 0 s
PSLLQ xmm1, xmm2 / m128 66 0F F3 / r Desplazar cuatro palabras a la izquierda mientras cambia en 0s
PSLLQ xmm1, imm8 66 0F 73/6 ib Desplazar cuatro palabras a la izquierda mientras cambia en 0s
PSRAD xmm1, xmm2 / m128 66 0F E2 / r Desplazar palabra doble a la derecha mientras se desplazan bits de signo
PSRAD xmm1, imm8 66 0F 72/4 ib Desplazar las palabras dobles a la derecha mientras se desplazan los bits de signo
PSRAW xmm1, xmm2 / m128 66 0F E1 / r Desplazar palabras a la derecha mientras se desplazan en bits de signo
PSRAW xmm1, imm8 66 0F 71/4 ib Desplazar palabras a la derecha mientras se desplazan en bits de signo
PSRLW xmm1, xmm2 / m128 66 0F D1 / r Cambiar palabras a la derecha mientras cambia en 0
PSRLW xmm1, imm8 66 0F 71/2 ib Cambiar palabras a la derecha mientras cambia en 0
PSRLD xmm1, xmm2 / m128 66 0F D2 / r Desplazar las palabras dobles a la derecha mientras se desplaza en ceros
PSRLD xmm1, imm8 66 0F 72/2 ib Desplazar las palabras dobles a la derecha mientras se desplaza en ceros
PSRLQ xmm1, xmm2 / m128 66 0F D3 / r Desplazar cuatro palabras a la derecha mientras cambia en 0
PSRLQ xmm1, imm8 66 0F 73/2 ib Desplazar cuatro palabras a la derecha mientras cambia en 0
PSUBB xmm1, xmm2 / m128 66 0F F8 / r Restar enteros de bytes empaquetados
PSUBW xmm1, xmm2 / m128 66 0F F9 / r Restar números enteros de palabras empaquetadas
PSUBD xmm1, xmm2 / m128 66 0F FA / r Restar enteros empaquetados de dos palabras
PSUBQ xmm1, xmm2 / m128 66 0F FB / r Resta números enteros empaquetados de cuatro palabras.
PSUBSB xmm1, xmm2 / m128 66 0F E8 / r Restar enteros de bytes con signo empaquetados con saturación
PSUBSW xmm1, xmm2 / m128 66 0F E9 / r Restar números enteros de palabras con signo empaquetadas con saturación
PMADDWD xmm1, xmm2 / m128 66 0F F5 / r Multiplique los números enteros de palabras empaquetadas, agregue resultados de palabras dobles adyacentes
PSUBUSB xmm1, xmm2 / m128 66 0F D8 / r Restar enteros empaquetados de bytes sin signo con saturación
PSUBUSW xmm1, xmm2 / m128 66 0F D9 / r Restar números enteros de palabras sin firmar empaquetados con saturación
PUNPCKHBW xmm1, xmm2 / m128 66 0F 68 / r Desempaquetar e intercalar bytes de orden superior
PUNPCKHWD xmm1, xmm2 / m128 66 0F 69 / r Desempaquetar e intercalar palabras de alto orden
PUNPCKHDQ xmm1, xmm2 / m128 66 0F 6A / r Desempaquetar e intercalar palabras dobles de orden superior
PUNPCKLBW xmm1, xmm2 / m128 66 0F 60 / r Intercalar bytes de orden inferior
PUNPCKLWD xmm1, xmm2 / m128 66 0F 61 / r Intercalar palabras de orden inferior
PUNPCKLDQ xmm1, xmm2 / m128 66 0F 62 / r Intercalar palabras dobles de orden inferior
PAVGB xmm1, xmm2 / m128 66 0F E0, / r Enteros de bytes sin signo empaquetados promedio con redondeo
PAVGW xmm1, xmm2 / m128 66 0F E3 / r Enteros de palabra sin signo empaquetados promedio con redondeo
PMINUB xmm1, xmm2 / m128 66 0F DA / r Comparar enteros de bytes sin signo empaquetados y almacenar valores mínimos empaquetados
PMINSW xmm1, xmm2 / m128 66 0F EA / r Comparar enteros de palabras con signo empaquetadas y almacenar valores mínimos empaquetados
PMAXSW xmm1, xmm2 / m128 66 0F EE / r Comparar enteros de palabras con signo empaquetadas y almacenar valores empaquetados máximos
PMAXUB xmm1, xmm2 / m128 66 0F DE / r Comparar enteros de bytes sin firmar empaquetados y almacenar valores máximos empaquetados
PSADBW xmm1, xmm2 / m128 66 0F F6 / r Calcula las diferencias absolutas de los enteros de bytes sin signo empaquetados; las 8 diferencias bajas y las 8 diferencias altas se suman luego por separado para producir dos resultados enteros de palabras sin signo
Instrucciones de enteros SSE2 solo para registros SSE

Las siguientes instrucciones se pueden utilizar solo en registros SSE, ya que por su naturaleza no funcionan en registros MMX

Instrucción Código de operación Sentido
MASKMOVDQU xmm1, xmm2 66 0F F7 / r Almacenamiento no temporal de bytes seleccionados de un registro XMM en la memoria
MOVDQ2Q mm, x mm F2 0F D6 / r Mueva la palabra cuádruple baja del registro XMM al MMX.
MOVDQA xmm1, xmm2 / m128 66 0F 6F / r Mover palabra cuádruple doble alineada
MOVDQA xmm2 / m128, xmm1 66 0F 7F / r Mover palabra cuádruple doble alineada
MOVDQU xmm1, xmm2 / m128 F3 0F 6F / r Mover palabra cuádruple doble no alineada
MOVDQU xmm2 / m128, xmm1 F3 0F 7F / r Mover palabra cuádruple doble no alineada
MOVQ2DQ x mm, mm F3 0F D6 / r Mueva la palabra cuádruple del registro MMX a la palabra cuádruple baja del registro XMM
MOVNTDQ m128, xmm1 66 0F E7 / r Almacenar enteros empaquetados usando una sugerencia no temporal
PSHUFHW xmm1, xmm2 / m128, imm8 F3 0F 70 / r ib Mezclar palabras altas llenas de palabras.
PSHUFLW xmm1, xmm2 / m128, imm8 F2 0F 70 / r ib Mezclar palabras bajas empaquetadas.
PSHUFD xmm1, xmm2 / m128, imm8 66 0F 70 / r ib Mezclar palabras dobles empaquetadas.
PSLLDQ xmm1, imm8 66 0F 73/7 ib Desplazamiento empaquetado a la izquierda lógica doble cuádruple.
PSRLDQ xmm1, imm8 66 0F 73/3 ib Desplazamiento empaquetado a la derecha dobles cuádruples lógicas.
PUNPCKHQDQ xmm1, xmm2 / m128 66 0F 6D / r Desempaquetar e intercalar palabras cuádruples de alto orden,
PUNPCKLQDQ xmm1, xmm2 / m128 66 0F 6C / r Intercalar cuatro palabras bajas,

Instrucciones SSE3

Agregado con Pentium 4 compatible con SSE3

Instrucciones de punto flotante SSE3 SIMD

Instrucción Código de operación Sentido Notas
AÑADIR SUBPS xmm1, xmm2 / m128 F2 0F D0 / r Sumar / restar valores de punto flotante de precisión simple para aritmética compleja
AÑADIR SUBPD xmm1, xmm2 / m128 66 0F D0 / r Sumar / restar valores de punto flotante de doble precisión
MOVDDUP xmm1, xmm2 / m64 F2 0F 12 / r Mover valor de punto flotante de doble precisión y duplicar
MOVSLDUP xmm1, xmm2 / m128 F3 0F 12 / r Mover y duplicar valores de punto flotante de precisión simple de índice uniforme
MOVSHDUP xmm1, xmm2 / m128 F3 0F 16 / r Mover y duplicar valores de punto flotante de precisión simple de índice impar
HADDPS xmm1, xmm2 / m128 F2 0F 7C / r Agregar horizontalmente valores de punto flotante de precisión simple empaquetados para gráficos
HADDPD xmm1, xmm2 / m128 66 0F 7C / r Valores de coma flotante de doble precisión empaquetados de adición horizontal
HSUBPS xmm1, xmm2 / m128 F2 0F 7D / r Resta horizontal de valores de punto flotante de precisión simple empaquetados
HSUBPD xmm1, xmm2 / m128 66 0F 7D / r Resta horizontal de valores de coma flotante de precisión doble empaquetados

Instrucciones de números enteros SSE3 SIMD

Instrucción Código de operación Sentido Notas
LDDQU xmm1, mem F2 0F F0 / r Cargar datos no alineados y devolver palabra cuádruple doble Instruccionalmente equivalente a MOVDQU. Para codificación de video

Instrucciones SSSE3

Agregado con la serie Xeon 5100 y el Core 2 inicial

Las siguientes instrucciones similares a MMX extendidas a los registros SSE se agregaron con SSSE3

Instrucción Código de operación Sentido
PSIGNB xmm1, xmm2 / m128 66 0F 38 08 / r Negar / cero / preservar enteros de bytes empaquetados dependiendo del signo correspondiente
PSIGNW xmm1, xmm2 / m128 66 0F 38 09 / r Negar / cero / preservar enteros de palabras empaquetadas según el signo correspondiente
PSIGND xmm1, xmm2 / m128 66 0F 38 0A / r Negar / cero / preservar enteros de doble palabra empaquetados según corresponda
PSHUFB xmm1, xmm2 / m128 66 0F 38 00 / r Bytes aleatorios
PMULHRSW xmm1, xmm2 / m128 66 0F 38 0B / r Multiplica palabras firmadas de 16 bits, escala y redondea palabras dobles firmadas, empaqueta 16 bits altos
PMADDUBSW xmm1, xmm2 / m128 66 0F 38 04 / r Multiplique bytes firmados y no firmados, agregue un par horizontal de palabras firmadas, empaque palabras firmadas saturadas
PHSUBW xmm1, xmm2 / m128 66 0F 38 05 / r Restar y empaquetar enteros de 16 bits con signo horizontalmente
PHSUBSW xmm1, xmm2 / m128 66 0F 38 07 / r Restar y empaquetar un entero de 16 bits con signo horizontalmente con saturación
PHSUBD xmm1, xmm2 / m128 66 0F 38 06 / r Restar y empaquetar enteros de 32 bits con signo horizontalmente
PHADDSW xmm1, xmm2 / m128 66 0F 38 03 / r Agregue y empaquete enteros de 16 bits con signo horizontalmente con saturación
PHADDW xmm1, xmm2 / m128 66 0F 38 01 / r Sumar y empaquetar enteros de 16 bits horizontalmente
PHADDD xmm1, xmm2 / m128 66 0F 38 02 / r Sumar y empaquetar enteros de 32 bits horizontalmente
PALIGNR xmm1, xmm2 / m128, imm8 66 0F 3A 0F / r ib Concatenar los operandos de origen y destino, extraer el resultado alineado por bytes desplazado hacia la derecha
PABSB xmm1, xmm2 / m128 66 0F 38 1C / r Calcule el valor absoluto de bytes y almacene el resultado sin firmar
PABSW xmm1, xmm2 / m128 66 0F 38 1D / r Calcule el valor absoluto de enteros de 16 bits y almacene el resultado sin firmar
PABSD xmm1, xmm2 / m128 66 0F 38 1E / r Calcule el valor absoluto de enteros de 32 bits y almacene el resultado sin firmar

Instrucciones SSE4

SSE4.1

Agregado con Core 2 fabricado en 45nm

Instrucciones de punto flotante SSE4.1 SIMD
Instrucción Código de operación Sentido
DPPS xmm1, xmm2 / m128, imm8 66 0F 3A 40 / r ib Multiplique selectivamente los valores de punto flotante SP empaquetados, agregue y almacene selectivamente
DPPD xmm1, xmm2 / m128, imm8 66 0F 3A 41 / r ib Multiplique selectivamente los valores de punto flotante DP empaquetados, agregue y almacene selectivamente
BLENDPS xmm1, xmm2 / m128, imm8 66 0F 3A 0C / r ib Seleccionar valores de punto flotante de precisión simple empaquetados de la máscara especificada
BLENDVPS xmm1, xmm2 / m128, <XMM0> 66 0F 38 14 / r Seleccionar valores de punto flotante de precisión simple empaquetados de la máscara especificada
BLENDPD xmm1, xmm2 / m128, imm8 66 0F 3A 0D / r ib Seleccionar valores de DP-FP empaquetados de la máscara especificada
BLENDVPD xmm1, xmm2 / m128, <XMM0> 66 0F 38 15 / r Seleccionar valores de DP FP empaquetados de la máscara especificada
REDONDAS xmm1, xmm2 / m128, imm8 66 0F 3A 08 / r ib Valores de coma flotante de precisión simple empaquetados redondos
REDONDAS xmm1, xmm2 / m32, imm8 66 0F 3A 0A / r ib Redondea el valor de punto flotante de precisión simple empaquetado bajo
REDONDA D xmm1, xmm2 / m128, imm8 66 0F 3A 09 / r ib Valores de coma flotante de doble precisión empaquetados redondos
REDONDASD xmm1, xmm2 / m64, imm8 66 0F 3A 0B / r ib Redondea el valor de punto flotante de precisión doble empaquetado bajo
INSERTPS xmm1, xmm2 / m32, imm8 66 0F 3A 21 / r ib Insertar un valor de punto flotante de precisión simple seleccionado en el elemento de destino especificado y poner a cero los elementos de destino
EXTRACTOS reg / m32, xmm1, imm8 66 0F 3A 17 / r ib Extraiga un valor de punto flotante de precisión simple en el desplazamiento especificado y almacene el resultado (cero extendido, si corresponde)
SSE4.1 Instrucciones de números enteros SIMD
Instrucción Código de operación Sentido
MPSADBW xmm1, xmm2 / m128, imm8 66 0F 3A 42 / r ib Suma la diferencia absoluta de números enteros de 8 bits de grupos adyacentes de números enteros de 4 bytes con desplazamiento inicial
PHMINPOSUW xmm1, xmm2 / m128 66 0F 38 41 / r Encuentra la palabra mínima sin firmar
PMULLD xmm1, xmm2 / m128 66 0F 38 40 / r Multiplique los enteros con signo de dword empaquetados y almacene los 32 bits bajos
PMULDQ xmm1, xmm2 / m128 66 0F 38 28 / r Multiplicar enteros de dos palabras con signo empaquetados y almacenar el resultado de cuatro palabras
PBLENDVB xmm1, xmm2 / m128, <XMM0> 66 0F 38 10 / r Seleccionar valores de bytes de la máscara especificada
PBLENDW xmm1, xmm2 / m128, imm8 66 0F 3A 0E / r ib Seleccionar palabras de la máscara especificada
PMINSB xmm1, xmm2 / m128 66 0F 38 38 / r Comparar enteros de bytes firmados empaquetados
PMINUW xmm1, xmm2 / m128 66 0F 38 3A / r Comparar enteros de palabras sin firmar empaquetados
PMINSD xmm1, xmm2 / m128 66 0F 38 39 / r Comparar enteros empaquetados de dword con signo
PMINUD xmm1, xmm2 / m128 66 0F 38 3B / r Comparar enteros de dword sin firmar empaquetados
PMAXSB xmm1, xmm2 / m128 66 0F 38 3C / r Comparar enteros de bytes firmados empaquetados
PMAXUW xmm1, xmm2 / m128 66 0F 38 3E / r Comparar enteros de palabras sin firmar empaquetados
PMAXSD xmm1, xmm2 / m128 66 0F 38 3D / r Comparar enteros empaquetados de dword con signo
PMAXUD xmm1, xmm2 / m128 66 0F 38 3F / r Comparar enteros de dword sin firmar empaquetados
PINSRB xmm1, r32 / m8, imm8 66 0F 3A 20 / r ib Insertar un valor entero de bytes en el elemento de destino especificado
PINSRD xmm1, r / m32, imm8 66 0F 3A 22 / r ib Insertar un valor entero de dword en el elemento de destino especificado
PINSRQ xmm1, r / m64, imm8 66 REX.W 0F 3A 22 / r ib Insertar un valor entero de qword en el elemento de destino especificado
PEXTRB reg / m8, xmm2, imm8 66 0F 3A 14 / r ib Extraiga un valor entero de bytes en el desplazamiento del byte de origen, los bits superiores se ponen a cero.
PEXTRW reg / m16, xmm, imm8 66 0F 3A 15 / r ib Extraiga la palabra y cópiela a los 16 bits más bajos, con extensión cero
PEXTRD r / m32, xmm2, imm8 66 0F 3A 16 / r ib Extraiga un valor entero de dword en el desplazamiento de dword de origen
PEXTRQ r / m64, xmm2, imm8 66 REX.W 0F 3A 16 / r ib Extraiga un valor entero de qword en el desplazamiento de qword de origen
PMOVSXBW xmm1, xmm2 / m64 66 0f 38 20 / r El signo extiende 8 enteros empaquetados de 8 bits a 8 enteros empaquetados de 16 bits
PMOVZXBW xmm1, xmm2 / m64 66 0f 38 30 / r Cero extienda 8 enteros empaquetados de 8 bits a 8 enteros empaquetados de 16 bits
PMOVSXBD xmm1, xmm2 / m32 66 0f 38 21 / r El signo extiende 4 enteros empaquetados de 8 bits a 4 enteros empaquetados de 32 bits
PMOVZXBD xmm1, xmm2 / m32 66 0f 38 31 / r Cero extienda 4 enteros empaquetados de 8 bits a 4 enteros empaquetados de 32 bits
PMOVSXBQ xmm1, xmm2 / m16 66 0f 38 22 / r El signo extiende 2 enteros empaquetados de 8 bits a 2 enteros empaquetados de 64 bits
PMOVZXBQ xmm1, xmm2 / m16 66 0f 38 32 / r Cero extienda 2 enteros empaquetados de 8 bits a 2 enteros empaquetados de 64 bits
PMOVSXWD xmm1, xmm2 / m64 66 0f 38 23 / r El signo extiende 4 enteros empaquetados de 16 bits a 4 enteros empaquetados de 32 bits
PMOVZXWD xmm1, xmm2 / m64 66 0f 38 33 / r Cero extienda 4 enteros empaquetados de 16 bits a 4 enteros empaquetados de 32 bits
PMOVSXWQ xmm1, xmm2 / m32 66 0f 38 24 / r El signo extiende 2 enteros empaquetados de 16 bits a 2 enteros empaquetados de 64 bits
PMOVZXWQ xmm1, xmm2 / m32 66 0f 38 34 / r Cero extienda 2 enteros empaquetados de 16 bits a 2 enteros empaquetados de 64 bits
PMOVSXDQ xmm1, xmm2 / m64 66 0f 38 25 / r El signo extiende 2 enteros empaquetados de 32 bits a 2 enteros empaquetados de 64 bits
PMOVZXDQ xmm1, xmm2 / m64 66 0f 38 35 / r Cero extienda 2 enteros empaquetados de 32 bits a 2 enteros empaquetados de 64 bits
PTEST xmm1, xmm2 / m128 66 0F 38 17 / r Establecer ZF si el resultado Y es todo 0, establecer CF si el resultado Y NO es todo 0
PCMPEQQ xmm1, xmm2 / m128 66 0F 38 29 / r Compare las qwords empaquetadas para la igualdad
PAQUETEUSDW xmm1, xmm2 / m128 66 0F 38 2B / r Convierta 2 × 4 enteros empaquetados de palabras dobles con signo en 8 enteros empaquetados de palabras sin signo con saturación
MOVNTDQA xmm1, m128 66 0F 38 2A / r Mueva doble palabra cuádruple usando una sugerencia no temporal si el tipo de memoria WC

SSE4a

Agregado con procesadores Phenom

  • EXTRQ / INSERTQ
  • MOVNTSD / MOVNTSS

SSE4.2

Agregado con procesadores Nehalem

Instrucción Código de operación Sentido
PCMPESTRI xmm1, xmm2 / m128, imm8 66 0F 3A 61 / r imm8 Comparación empaquetada de datos de cadena con longitudes explícitas, generando un índice
PCMPESTRM xmm1, xmm2 / m128, imm8 66 0F 3A 60 / r imm8 Comparación empaquetada de datos de cadena con longitudes explícitas, generando una máscara
PCMPISTRI xmm1, xmm2 / m128, imm8 66 0F 3A 63 / r imm8 Comparación empaquetada de datos de cadena con longitudes implícitas, generando un índice
PCMPISTRM xmm1, xmm2 / m128, imm8 66 0F 3A 62 / r imm8 Comparación empaquetada de datos de cadena con longitudes implícitas, generando una máscara
PCMPGTQ xmm1, xmm2 / m128 66 0F 38 37 / r Compare las qwords empaquetadas firmadas para mayor que.

Instrucciones derivadas de SSE5

SSE5 fue una extensión SSE propuesta por AMD. El paquete no incluía el conjunto completo de instrucciones SSE4 de Intel, lo que lo convierte en un competidor de SSE4 en lugar de un sucesor. AMD decidió no implementar SSE5 como se propuso originalmente, sin embargo, se introdujeron extensiones SSE derivadas.

XOP

Introducido con el núcleo del procesador bulldozer, eliminado nuevamente de Zen (microarquitectura) en adelante.

Una revisión de la mayor parte del conjunto de instrucciones SSE5

F16C

Conversión de punto flotante de media precisión.

Instrucción Sentido
VCVTPH2PS xmmreg, xmmrm64 Convierta cuatro valores de punto flotante de precisión media en la memoria o la mitad inferior de un registro XMM en cuatro valores de punto flotante de precisión simple en un registro XMM
VCVTPH2PS ymmreg, xmmrm128 Convierta ocho valores de coma flotante de precisión media en la memoria o un registro XMM (la mitad inferior de un registro YMM) en ocho valores de coma flotante de precisión simple en un registro YMM
VCVTPS2PH xmmrm64, xmmreg, imm8 Convierta cuatro valores de punto flotante de precisión simple en un registro XMM en valores de punto flotante de precisión media en la memoria o la mitad inferior de un registro XMM
VCVTPS2PH xmmrm128, ymmreg, imm8 Convierta ocho valores de punto flotante de precisión simple en un registro YMM en valores de punto flotante de precisión media en la memoria o un registro XMM

FMA3

Compatible con procesadores AMD a partir de la arquitectura Piledriver e Intel a partir de procesadores Haswell y procesadores Broadwell desde 2014.

Multiplica-suma fusionada (vector de punto flotante multiplica-acumula) con tres operandos.

Instrucción Sentido
VFMADD132PD Multiplicación fusionada de valores de coma flotante de doble precisión empaquetados
VFMADD213PD Multiplicación fusionada de valores de coma flotante de doble precisión empaquetados
VFMADD231PD Multiplicación fusionada de valores de coma flotante de doble precisión empaquetados
VFMADD132PS Multiplicación fusionada de valores de coma flotante de precisión simple empaquetados
VFMADD213PS Multiplicación fusionada de valores de coma flotante de precisión simple empaquetados
VFMADD231PS Multiplicación fusionada de valores de coma flotante de precisión simple empaquetados
VFMADD132SD Multiplicación fusionada de valores escalares de coma flotante de precisión doble
VFMADD213SD Multiplicación fusionada de valores escalares de coma flotante de precisión doble
VFMADD231SD Multiplicación fusionada de valores escalares de coma flotante de precisión doble
VFMADD132SS Multiplicación fusionada de valores escalares de coma flotante de precisión simple
VFMADD213SS Multiplicación fusionada de valores escalares de coma flotante de precisión simple
VFMADD231SS Multiplicación fusionada de valores escalares de coma flotante de precisión simple
VFMADDSUB132PD Suma / resta de multiplicación-alternante fusionada de valores de coma flotante de doble precisión empaquetados
VFMADDSUB213PD Suma / resta de multiplicación-alternante fusionada de valores de coma flotante de doble precisión empaquetados
VFMADDSUB231PD Suma / resta de multiplicación-alternante fusionada de valores de coma flotante de doble precisión empaquetados
VFMADDSUB132PS Suma / resta de multiplicación alternante fusionada de valores de coma flotante de precisión simple empaquetados
VFMADDSUB213PS Suma / resta de multiplicación alternante fusionada de valores de coma flotante de precisión simple empaquetados
VFMADDSUB231PS Suma / resta de multiplicación alternante fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUB132PD Multiplica-resta fusionada de valores de coma flotante de doble precisión empaquetados
VFMSUB213PD Multiplica-resta fusionada de valores de coma flotante de doble precisión empaquetados
VFMSUB231PD Multiplica-resta fusionada de valores de coma flotante de doble precisión empaquetados
VFMSUB132PS Multiplicación-resta fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUB213PS Multiplicación-resta fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUB231PS Multiplicación-resta fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUB132SD Multiplica-resta fusionada de valores escalares de coma flotante de precisión doble
VFMSUB213SD Multiplica-resta fusionada de valores escalares de coma flotante de precisión doble
VFMSUB231SD Multiplica-resta fusionada de valores escalares de coma flotante de precisión doble
VFMSUB132SS Multiplicación-resta fusionada de valores escalares de coma flotante de precisión simple
VFMSUB213SS Multiplicación-resta fusionada de valores escalares de coma flotante de precisión simple
VFMSUB231SS Multiplicación-resta fusionada de valores escalares de coma flotante de precisión simple
VFMSUBADD132PD Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión doble empaquetados
VFMSUBADD213PD Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión doble empaquetados
VFMSUBADD231PD Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión doble empaquetados
VFMSUBADD132PS Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUBADD213PS Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUBADD231PS Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión simple empaquetados
VFNMADD132PD Suma de multiplicación negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMADD213PD Suma de multiplicación negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMADD231PD Suma de multiplicación negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMADD132PS Suma múltiple negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMADD213PS Suma múltiple negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMADD231PS Suma múltiple negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMADD132SD Multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMADD213SD Multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMADD231SD Multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMADD132SS Multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple
VFNMADD213SS Multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple
VFNMADD231SS Multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple
VFNMSUB132PD Resta multiplicada negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMSUB213PD Resta multiplicada negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMSUB231PD Resta multiplicada negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMSUB132PS Resta multiplicada negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMSUB213PS Resta multiplicada negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMSUB231PS Resta multiplicada negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMSUB132SD Sustracción-multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMSUB213SD Sustracción-multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMSUB231SD Sustracción-multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMSUB132SS Resta de multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple
VFNMSUB213SS Resta de multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple
VFNMSUB231SS Resta de multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple

FMA4

Compatible con procesadores AMD a partir de la arquitectura Bulldozer. No es compatible con ningún chip Intel a partir de 2017.

Multiplica-suma fusionada con cuatro operandos. FMA4 se realizó en hardware antes que FMA3.

Instrucción Código de operación Sentido Notas
VFMADDPD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 69 / r / is4 Multiplicación fusionada de valores de coma flotante de doble precisión empaquetados
VFMADDPS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 68 / r / is4 Multiplicación fusionada de valores de coma flotante de precisión simple empaquetados
VFMADDSD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 6B / r / is4 Multiplicación fusionada de valores escalares de coma flotante de precisión doble
VFMADDSS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 6A / r / is4 Multiplicación fusionada de valores escalares de coma flotante de precisión simple
VFMADDSUBPD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 5D / r / is4 Suma / resta de multiplicación alternante fusionada de valores de coma flotante de precisión doble empaquetados
VFMADDSUBPS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 5C / r / is4 Suma / resta de multiplicación alternante fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUBADDPD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 5F / r / is4 Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión doble empaquetados
VFMSUBADDPS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 5E / r / is4 Resta / suma alternada multiplicada fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUBPD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 6D / r / is4 Multiplica-resta fusionada de valores de coma flotante de doble precisión empaquetados
VFMSUBPS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 6C / r / is4 Multiplicación-resta fusionada de valores de coma flotante de precisión simple empaquetados
VFMSUBSD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 6F / r / is4 Multiplicación-resta fusionada de valores escalares de coma flotante de precisión doble
VFMSUBSS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 6E / r / is4 Multiplicación-resta fusionada de valores escalares de coma flotante de precisión simple
VFNMADDPD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 79 / r / is4 Multiplicación negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMADDPS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 78 / r / is4 Suma múltiple negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMADDSD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 7B / r / is4 Multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMADDSS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 7A / r / is4 Multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple
VFNMSUBPD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 7D / r / is4 Resta multiplicada negativa fusionada de valores de coma flotante de precisión doble empaquetados
VFNMSUBPS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 7C / r / is4 Resta multiplicada negativa fusionada de valores de coma flotante de precisión simple empaquetados
VFNMSUBSD xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 7F / r / is4 Sustracción-multiplicación negativa fusionada de valores escalares de coma flotante de precisión doble
VFNMSUBSS xmm0, xmm1, xmm2, xmm3 C4E3 WvvvvL01 7E / r / is4 Resta de multiplicación negativa fusionada de valores escalares de coma flotante de precisión simple

AVX

AVX fue apoyado por primera vez por Intel con Sandy Bridge y por AMD con Bulldozer .

Operaciones vectoriales en registros de 256 bits.

Instrucción Descripción
VBROADCASTSS Copie un operando de memoria de 32 bits, 64 bits o 128 bits a todos los elementos de un registro vectorial XMM o YMM.
VBROADCASTSD
VBROADCASTF128
VINSERTF128 Reemplaza la mitad inferior o la mitad superior de un registro YMM de 256 bits con el valor de un operando fuente de 128 bits. La otra mitad del destino no se modifica.
VEXTRACTF128 Extrae la mitad inferior o la mitad superior de un registro YMM de 256 bits y copia el valor en un operando de destino de 128 bits.
VMASKMOVPS Lee condicionalmente cualquier número de elementos de un operando de memoria vectorial SIMD en un registro de destino, dejando los elementos vectoriales restantes sin leer y estableciendo los elementos correspondientes en el registro de destino en cero. Alternativamente, escribe condicionalmente cualquier número de elementos de un operando de registro de vector SIMD en un operando de memoria de vector, dejando los elementos restantes del operando de memoria sin cambios. En la arquitectura del procesador AMD Jaguar, esta instrucción con un operando de fuente de memoria toma más de 300 ciclos de reloj cuando la máscara es cero, en cuyo caso la instrucción no debería hacer nada. Esto parece ser un defecto de diseño.
VMASKMOVPD
VPERMILPS Permutar en el carril. Mezcle los elementos vectoriales de 32 bits o 64 bits de un operando de entrada. Se trata de instrucciones de 256 bits en el carril, lo que significa que operan en los 256 bits con dos reorganizaciones separadas de 128 bits, por lo que no pueden reorganizarse en los carriles de 128 bits.
VPERMILPD
VPERM2F128 Mezcle los cuatro elementos vectoriales de 128 bits de dos operandos de origen de 256 bits en un operando de destino de 256 bits, con una constante inmediata como selector.
VZEROALL Establezca todos los registros YMM en cero y etiquételos como no utilizados. Se utiliza al cambiar entre el uso de 128 bits y el uso de 256 bits.
VZEROUPPER Establezca la mitad superior de todos los registros YMM en cero. Se utiliza al cambiar entre el uso de 128 bits y el uso de 256 bits.

AVX2

Introducido en la microarquitectura Haswell de Intel y la Excavadora de AMD .

Expansión de la mayoría de las instrucciones SSE y AVX de enteros vectoriales a 256 bits

Instrucción Descripción
VBROADCASTSS Copie un operando de registro de 32 bits o 64 bits a todos los elementos de un registro vectorial XMM o YMM. Estas son versiones de registro de las mismas instrucciones en AVX1. Sin embargo, no existe una versión de 128 bits, pero el mismo efecto se puede lograr simplemente usando VINSERTF128.
VBROADCASTSD
VPBROADCASTB Copie un registro entero de 8, 16, 32 o 64 bits o un operando de memoria a todos los elementos de un registro vectorial XMM o YMM.
VPBROADCASTW
VPBROADCASTD
VPBROADCASTQ
VBROADCASTI128 Copie un operando de memoria de 128 bits a todos los elementos de un registro vectorial YMM.
VINSERTI128 Reemplaza la mitad inferior o la mitad superior de un registro YMM de 256 bits con el valor de un operando fuente de 128 bits. La otra mitad del destino no se modifica.
VEXTRACTI128 Extrae la mitad inferior o la mitad superior de un registro YMM de 256 bits y copia el valor en un operando de destino de 128 bits.
VGATHERDPD Recopila valores de punto flotante de precisión simple o doble utilizando índices y escala de 32 o 64 bits.
VGATHERQPD
VGATHERDPS
VGATHERQPS
VPGATHERDD Recopila valores enteros de 32 o 64 bits utilizando índices y escala de 32 o 64 bits.
VPGATHERDQ
VPGATHERQD
VPGATHERQQ
VPMASKMOVD Lee condicionalmente cualquier número de elementos de un operando de memoria vectorial SIMD en un registro de destino, dejando los elementos vectoriales restantes sin leer y estableciendo los elementos correspondientes en el registro de destino en cero. Alternativamente, escribe condicionalmente cualquier número de elementos de un operando de registro de vector SIMD en un operando de memoria de vector, dejando los elementos restantes del operando de memoria sin cambios.
VPMASKMOVQ
VPERMPS Mezcle los ocho elementos vectoriales de 32 bits de un operando de origen de 256 bits en un operando de destino de 256 bits, con un operando de registro o de memoria como selector.
VPERMD
VPERMPD Mezcle los cuatro elementos vectoriales de 64 bits de un operando de origen de 256 bits en un operando de destino de 256 bits, con un operando de registro o de memoria como selector.
VPERMQ
VPERM2I128 Mezcle (dos de) los cuatro elementos vectoriales de 128 bits de dos operandos de origen de 256 bits en un operando de destino de 256 bits, con una constante inmediata como selector.
VPBLENDD Versión inmediata de doble palabra de las instrucciones PBLEND de SSE4 .
VPSLLVD Desplazamiento lógico a la izquierda. Permite cambios variables donde cada elemento se desplaza de acuerdo con la entrada empaquetada.
VPSLLVQ
VPSRLVD Desplazamiento lógico a la derecha. Permite cambios variables donde cada elemento se desplaza de acuerdo con la entrada empaquetada.
VPSRLVQ
VPSRAVD Desplazar aritméticamente a la derecha. Permite cambios variables donde cada elemento se desplaza de acuerdo con la entrada empaquetada.

AVX-512

Introducido en Intel Xeon Phi x200

Operaciones vectoriales en registros de 512 bits.

Fundación AVX-512

Instrucción Descripción
VBLENDMPD Mezclar vectores float64 usando el control opmask
VBLENDMPS Mezclar vectores float32 usando el control opmask
VPBLENDMD Mezclar vectores int32 usando el control opmask
VPBLENDMQ Mezclar vectores int64 usando el control opmask
VPCMPD Comparar palabras dobles firmadas / no firmadas en una máscara
VPCMPUD
VPCMPQ Comparar palabras cuádruples firmadas / no firmadas en una máscara
VPCMPUQ
VPTESTMD AND lógico y máscara configurada para enteros de 32 o 64 bits.
VPTESTMQ
VPTESTNMD NAND lógica y máscara configurada para enteros de 32 o 64 bits.
VPTESTNMQ
VCOMPRESSPD Almacene valores de punto flotante de precisión doble / simple empaquetados dispersos en una memoria densa
VCOMPRESSPS
VPCOMPRESSD Almacene valores enteros de palabra doble / cuádruple empaquetados dispersos en una memoria densa / registro
VPCOMPRESSQ
VEXPANDPD Cargue valores de punto flotante de precisión doble / simple empaquetados dispersos desde una memoria densa
VEXPANDPS
VPEXPANDD Cargue valores enteros de palabra doble / cuádruple empaquetados dispersos desde una memoria densa / registro
VPEXPANDQ
VPERMI2PD Permutación completa de punto flotante simple / doble que sobrescribe el índice.
VPERMI2PS
VPERMI2D Permutación completa de palabras dobles / cuádruples sobrescribiendo el índice.
VPERMI2Q
VPERMT2PS Permutación completa de coma flotante simple / doble que sobrescribe la primera fuente.
VPERMT2PD
VPERMT2D Permutación completa de doble palabra / cuádruple sobreescritura de la primera fuente.
VPERMT2Q
VSHUFF32x4 Mezcle cuatro líneas empaquetadas de 128 bits.
VSHUFF64x2
VSHUFFI32x4
VSHUFFI64x2
VPTERNLOGD Lógica ternaria bit a bit
VPTERNLOGQ
VPMOVQD Conversión descendente de cuatro palabras o palabras dobles en palabras dobles, palabras o bytes; insaturados, saturados o saturados sin firmar. El reverso de las instrucciones de extensión de signo / cero de SSE4.1 .
VPMOVSQD
VPMOVUSQD
VPMOVQW
VPMOVSQW
VPMOVUSQW
VPMOVQB
VPMOVSQB
VPMOVUSQB
VPMOVDW
VPMOVSDW
VPMOVUSDW
VPMOVDB
VPMOVSDB
VPMOVUSDB
VCVTPS2UDQ Convierta con o sin truncamiento, empaquetados de punto flotante de precisión simple o doble en enteros empaquetados de dos palabras sin signo.
VCVTPD2UDQ
VCVTTPS2UDQ
VCVTTPD2UDQ
VCVTSS2USI Convierta con o sin trunción, escalar de punto flotante de precisión simple o doble en un entero de dos palabras sin signo.
VCVTSD2USI
VCVTTSS2USI
VCVTTSD2USI
VCVTUDQ2PS Convierta enteros empaquetados de dos palabras sin signo en coma flotante de precisión simple o doble empaquetados.
VCVTUDQ2PD
VCVTUSI2PS Convierta enteros escalares de dos palabras sin signo en punto flotante de precisión simple o doble.
VCVTUSI2PD
VCVTUSI2SD Convierta enteros escalares sin signo en punto flotante de precisión simple o doble.
VCVTUSI2SS
VCVTQQ2PD Convierta enteros de cuatro palabras empaquetados en coma flotante de precisión simple o doble empaquetados.
VCVTQQ2PS
VGETEXPPD Convertir exponentes de valores de fp empaquetados en valores de fp
VGETEXPPS
VGETEXPSD Convierta el exponente del valor fp escalar en valor fp
VGETEXPSS
VGETMANTPD Extraiga el vector de mantisas normalizadas del vector float32 / float64
VGETMANTPS
VGETMANTSD Extraiga float32 / float64 de mantisa normalizada del escalar float32 / float64
VGETMANTSS
VFIXUPIMMPD Arreglar valores especiales float32 / float64 empaquetados
VFIXUPIMMPS
VFIXUPIMMSD Arregle el valor especial escalar float32 / float64
VFIXUPIMMSS
VRCP14PD Calcule los recíprocos aproximados de los valores de float32 / float64 empaquetados
VRCP14PS
VRCP14SD Calcule los recíprocos aproximados del valor escalar float32 / float64
VRCP14SS
VRNDSCALEPS Redondee los valores float32 / float64 empaquetados para incluir un número determinado de bits de fracción
VRNDSCALEPD
VRNDSCALESS Redondee el valor escalar float32 / float64 para incluir un número determinado de bits de fracción
VRNDSCALESD
VRSQRT14PD Calcule recíprocos aproximados de raíces cuadradas de valores empaquetados float32 / float64
VRSQRT14PS
VRSQRT14SD Calcule el recíproco aproximado de la raíz cuadrada del valor escalar float32 / float64
VRSQRT14SS
VSCALEFPS Escale los valores empaquetados float32 / float64 con valores float32 / float64
VSCALEFPD
VSCALEFSS Escale el valor escalar float32 / float64 con el valor float32 / float64
VSCALEFSD
VALIGND Alinear vectores de palabra doble o palabra cuádruple
VALIGNQ
VPABSQ Palabra cuádruple de valor absoluto empaquetado
VPMAXSQ Máximo de cuatro palabras empaquetadas firmadas / sin firmar
VPMAXUQ
VPMINSQ Mínimo de cuatro palabras empaquetadas firmadas / sin firmar
VPMINUQ
VPROLD Bit gira a la izquierda o a la derecha
VPROLVD
VPROLQ
VPROLVQ
VPRORD
VPRORVD
VPRORQ
VPRORVQ
VPSCATTERDD Dispersión empaquetada de doble palabra / cuádruple con índices de palabra doble y cuádruple firmados
VPSCATTERDQ
VPSCATTERQD
VPSCATTERQQ
VSCATTERDPS Float32 / float64 empaquetados en dispersión con índices de palabra doble y cuádruple firmados
VSCATTERDPD
VSCATTERQPS
VSCATTERQPD

Instrucciones criptográficas

Instrucciones de Intel AES

6 nuevas instrucciones.

Instrucción Descripción
AESENC Realice una ronda de un flujo de cifrado AES
AESENCLAST Realice la última ronda de un flujo de cifrado AES
AESDEC Realice una ronda de un flujo de descifrado AES
AESDECLAST Realice la última ronda de un flujo de descifrado AES
AESKEYGENASSIST Ayudar en la generación de claves redondas AES
AESIMC Asistir en columnas de mezcla inversa AES

RDRAND y RDSEED

Instrucción Descripción
RDRAND Leer número aleatorio
RDSEED Leer semilla aleatoria

Instrucciones de Intel SHA

7 nuevas instrucciones.

Instrucción Descripción
SHA1RNDS4 Realice cuatro rondas de operación SHA1
SHA1NEXTE Calcular la variable de estado SHA1 E después de cuatro rondas
SHA1MSG1 Realizar un cálculo intermedio para las siguientes cuatro palabras clave de mensaje SHA1
SHA1MSG2 Realice un cálculo final para los siguientes cuatro mensajes Dwords de SHA1
SHA256RNDS2 Realice dos rondas de operación SHA256
SHA256MSG1 Realice un cálculo intermedio para las siguientes cuatro palabras clave de mensaje SHA256
SHA256MSG2 Realice un cálculo final para las siguientes cuatro palabras clave de mensaje SHA256

Instrucciones indocumentadas

Instrucciones x86 sin documentar

Las CPU x86 contienen instrucciones indocumentadas que se implementan en los chips pero que no figuran en algunos documentos oficiales. Se pueden encontrar en varias fuentes de Internet, como la Lista de interrupciones de Ralf Brown y en sandpile.org

Mnemotécnico Código de operación Descripción Estado
AAM imm8 D4 imm8 ASCII-Ajustar después de multiplicar. Convierte un resultado de multiplicación binaria en BCD. Disponible a partir de 8086, documentado desde Pentium (la documentación anterior no enumera argumentos)
AAD imm8 D5 imm8 Ajuste ASCII antes de la división. Convierta un valor BCD en binario para una siguiente instrucción de división. Contraparte de división de AAM Disponible a partir de 8086, documentado desde Pentium (la documentación anterior no enumera argumentos)
SALC D6 Establezca AL en función del valor de la bandera de transporte (una alternativa de 1 byte de SBB AL, AL) Disponible a partir de 8086, pero solo documentado desde Pentium Pro.
ICEBP F1 Excepción de un solo paso de un solo byte / Invocar ICE Disponible a partir de 80386, documentado (como INT1) desde Pentium Pro
Mnemónico desconocido 0F 04 Se desconoce el propósito exacto, hace que la CPU se cuelgue ( HCF ). La única salida es reiniciar la CPU.

En algunas implementaciones, se emula a través de BIOS como una secuencia de detención .

En una publicación en el foro de Vintage Computing Federation , esta instrucción se explica como GUARDAR TODO. Interactúa con el modo ICE.

Solo disponible en 80286
CARGAR TODO 0F 05 Carga todos los registros de la dirección de memoria 0x000800H Solo disponible en 80286
LOADALLD 0F 07 Carga todos los registros de la dirección de memoria ES: EDI Solo disponible en 80386
Mnemónico desconocido 0F 0E En AMD K6 y posteriores se asignan a la operación FEMMS (borrado rápido del estado MMX) pero en Intel se identifica como datos uarch leídos en Intel Solo disponible en el estado de desbloqueo rojo (0F 0F también)
Mnemónico desconocido 0F 0F Escribe uarch Puede cambiar parte de la RAM del microcódigo en Intel
UD1 0F B9 Instrucción intencionalmente indefinida, pero a diferencia de UD2, esta no se publicó
ALTINST 0F 3F Saltar y ejecutar instrucciones en el conjunto de instrucciones alternativas sin documentar . Solo disponible en algunos procesadores x86 fabricados por VIA Technologies .

Instrucciones x87 sin documentar

FFREEP realiza FFREE ST (i) y pop stack

Ver también

Referencias

enlaces externos