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. [1]
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 según la arquitectura ( i386 , i486 , i686 ) y, en general, se denomina x86 32 y x86 64 (también conocido como AMD64 ).
Instrucciones originales 8086/8088
Instrucción | Significado | 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) |
LLAMADA | 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 | Saltar | 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 ++ ; si no * ( byte * ) DI - = * ( byte * ) SI - ; | 0xA4 |
MOVSW | Mover palabra de una cadena a otra | if ( DF == 0 ) * ( palabra * ) DI ++ = * ( palabra * ) SI ++ ; más * ( palabra * ) DI - = * ( palabra * ) SI - ; | 0xA5 |
MUL | Multiplicar sin firmar | (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) solo funciona 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, AL está 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 | Shift left (shift left 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 | Significado | Notas |
---|---|---|
ATADO | 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 ; ajustar (E) DI de acuerdo con el tamaño del operando y DF |
LICENCIA | 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 ] SALIDA DX , ( E ) AX ; ajustar (E) SI según el tamaño del operando y DF |
POPA | Saque todos los registros de propósito general de la pila | equivalente a: POP DI POP SI POP BP POP AX ; no hay POP SP aquí, todo lo que hace es ADD SP, 2 (ya que AX se sobrescribirá más adelante) 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 ; El valor almacenado es el valor SP inicial 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 , 12 h IMUL DX , 1200 h IMUL CX , DX , 12 h IMUL BX , SI , 1200 h IMUL DI , palabra ptr [ BX + SI ], 12 h IMUL SI , palabra ptr [ BP - 4 ], 1200 h |
SHL / SHR / SAL / SAR / ROL / ROR / RCL / RCR inmediato | Rotar / desplazar bits con un valor inmediato superior a 1 | ejemplo: HACHA ROL , 3 SHR BL , 3 |
Agregado con 80286
Instrucción | Significado | 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 | Significado | 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 doble palabra (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 | Significado | 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, [2] 586 y Bochs / QEMU . [3] |
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 | Significado | 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. [1] 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 [4] | 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 | Significado | 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 | Significado | 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 | Significado | 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, CMOVNO, 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 | Significado | Notas |
---|---|---|
SYSENTER | LLAMADA AL SISTEMA ENTER | A veces denominada instrucción 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 | Significado | 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 [5] [6] 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 | Significado | 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 la palabra doble 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 | Significado | 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 | Significado | 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 | Significado | 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 | Significado | 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 | Significado | 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 [7] ; Los procesadores posteriores AMD Jaguar y basados en Zen no son compatibles con TBM. [8] Ningún procesador Intel (a partir de 2020) admite TBM.
Instrucción | Descripción [9] | Expresión de C equivalente [10] |
---|---|---|
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 alta del registro de destino por la mitad baja 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 | Significado | Notas |
---|---|---|
F2XM1 | más preciso que para x cerca de 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 | Significado | Notas |
---|---|---|
FSETPM | Establecer modo protegido | 80287 solamente, de lo contrario FNOP |
Agregado con 80387
Instrucción | Significado | 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 | Significado | 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 empaquetados de dos palabras | |
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 palabra con signo empaquetados para mayor 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 números enteros de palabras con signo empaquetados, almacena 16 bits de resultados | |
PMULLW mm, mm / m64 | 0F D5 / r | Multiplica números enteros de palabras con signo empaquetadas, almacena 16 bits de resultados | |
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 cuatro palabras a la izquierda, cambiar a ceros | |
PSLLQ mm, mm / m64 | 0F F3 / r | Desplazar cuatro palabras 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 | Cambiar palabras a la derecha, cambiar bits de signo | |
PSRAW mm, mm / m64 | 0F E1 / r | Cambiar palabras a la derecha, cambiar bits de 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 | Significado |
---|---|---|
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 | Significado |
---|---|---|
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 | Significado |
---|---|---|
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 | Significado |
---|---|---|
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 punto 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 punto 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 de FP único no temporal |
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 | Almacene valores empaquetados de punto flotante de precisión simple mediante 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 | Convertir valor FP escalar de precisión simple en 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 coma 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 escalares de coma flotante de precisión simple |
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. [11]
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 | Significado |
---|---|---|
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 empaquetado alto |
MOVHPD m64, xmm1 | 66 0F 17 / r | Mover el valor de coma flotante de precisión doble de empaquetado alto |
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 | Significado |
---|---|---|
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 | Significado |
---|---|---|
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 precisión doble empaquetados |
SSE2 comparar instrucciones
Instrucción | Código de operación | Significado |
---|---|---|
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 | Significado |
---|---|---|
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 | Significado |
---|---|---|
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 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 | Convierta 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 firmada 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 coma 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 dos palabras 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 truncamiento escalar valor de punto flotante de precisión doble a entero Qword con signo |
- CMPSD y MOVSD tienen el mismo nombre que los mnemónicos de instrucción de cadena CMPSD (CMPS) y MOVSD (MOVS) ; sin embargo, los primeros se refieren a puntos flotantes escalares de precisión doble, mientras que los últimos se refieren a cadenas de palabras dobles .
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 | Significado |
---|---|---|
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 palabra 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 palabra con signo empaquetados para mayor 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 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 de 0 |
PSLLW xmm1, imm8 | 66 0F 71/6 ib | Cambiar palabras a la izquierda mientras cambia de 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 0 |
PSLLQ xmm1, imm8 | 66 0F 73/6 ib | Desplazar cuatro palabras a la izquierda mientras cambia en 0 |
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 de 0 |
PSRLW xmm1, imm8 | 66 0F 71/2 ib | Cambiar palabras a la derecha mientras cambia de 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 | Restar enteros de cuatro palabras empaquetados. |
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 | Significado |
---|---|---|
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 | Significado | 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 | Significado | 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 | Significado |
---|---|---|
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 dependiendo de |
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 | Significado |
---|---|---|
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, | 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, | 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 | Significado |
---|---|---|
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, | 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 de dword empaquetados 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 de dword empaquetados 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 pista 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 | Significado |
---|---|---|
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 | Significado |
---|---|
VCVTPH2PS xmmreg, xmmrm64 | Convierta cuatro valores de coma flotante de precisión media en la memoria o la mitad inferior de un registro XMM en cuatro valores de coma flotante de precisión simple en un registro XMM |
VCVTPH2PS ymmreg, xmmrm128 | Convierta ocho valores de punto flotante de precisión media en la memoria o un registro XMM (la mitad inferior de un registro YMM) en ocho valores de punto 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.
Multiplicar-suma fusionada (multiplicación-acumulación de vectores de coma flotante) con tres operandos.
Instrucción | Significado |
---|---|
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 | Multiplicación-resta fusionada de valores de coma flotante de doble precisión empaquetados |
VFMSUB213PD | Multiplicación-resta fusionada de valores de coma flotante de doble precisión empaquetados |
VFMSUB231PD | Multiplicación-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 | Multiplicación-resta fusionada de valores escalares de coma flotante de precisión doble |
VFMSUB213SD | Multiplicación-resta fusionada de valores escalares de coma flotante de precisión doble |
VFMSUB231SD | Multiplicación-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 | Significado | 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 doble precisión 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 | Multiplicación-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 | Suma de 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. [12] |
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. [13] |
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 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 cuatro palabras 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 la 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 empaquetado. |
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 | Redondea 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 | Realice 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 la 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 bloquee ( HCF ). La única salida es reiniciar la CPU. [14] En algunas implementaciones, se emula a través de BIOS como una secuencia de detención . [15] 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 |
? | 0F 0E | En AMD K6 y posteriores se asignan a la operación FEMMS (borrado rápido del estado MMX), posiblemente identificado como manipulación de 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
- CLMUL
- RDRAND
- Extensiones de larrabee
- Extensiones vectoriales avanzadas 2
- Conjuntos de instrucciones de manipulación de bits
- CPUID
Referencias
- ^ a b "Re: identificación del procesador Intel y la instrucción CPUID" . Consultado el 21 de abril de 2013 .
- ^ Toth, Ervin (16 de marzo de 1998). "BSWAP con registros de 16 bits" . Archivado desde el original el 3 de noviembre de 1999.
La instrucción baja la palabra superior del registro de doble palabra sin afectar sus 16 bits superiores.
- ^ Coldwin, Gynvael (29 de diciembre de 2009). "BSWAP + prefijo 66h" . Consultado el 3 de octubre de 2018 .
interno (cero) extendiendo el valor de un registro más pequeño (16 bits) ... aplicando el bswap a un valor de 32 bits "00 00 AH AL", ... truncado a 16 bits inferiores, que son "00 00". … Bochs… bswap reg16 actúa igual que bswap reg32… QEMU… ignora el prefijo 66h
- ^ "RSM: reanudar desde el modo de gestión del sistema" . Archivado desde el original el 12 de marzo de 2012.CS1 maint: bot: estado de URL original desconocido ( enlace )
- ^ Manual de referencia de optimización de arquitecturas Intel 64 e IA-32 , sección 7.3.2
- ^ Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 , sección 4.3, subsección "PREFETCHh: captación previa de datos en cachés"
- ^ Hollingsworth, Brent. Instrucciones "Nuevo" Bulldozer "y" Piledriver " (pdf) . Advanced Micro Devices, Inc . Consultado el 11 de diciembre de 2014 .
- ^ "Ficha técnica de la serie A de AMD 16h de la familia" (PDF) . amd.com . AMD . Octubre de 2013 . Consultado el 2 de enero de 2014 .
- ^ "Manual del programador de la arquitectura AMD64, volumen 3: instrucciones de uso general y del sistema" (PDF) . amd.com . AMD . Octubre de 2013 . Consultado el 2 de enero de 2014 .
- ^ "tbmintrin.h de GCC 4.8" . Consultado el 17 de marzo de 2014 .
- ^ https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf sección 3.5.2.3
- ^ "La microarquitectura de las CPU Intel, AMD y VIA: una guía de optimización para programadores de ensamblajes y fabricantes de compiladores" (PDF) . Consultado el 17 de octubre de 2016 .
- ^ "Programación de ajedrez AVX2" . Consultado el 17 de octubre de 2016 .
- ^ "Re: códigos de operación no documentados (HINT_NOP)" . Archivado desde el original el 6 de noviembre de 2004 . Consultado el 7 de noviembre de 2010 .
- ^ "Re: También algunos códigos de operación 0Fh indocumentados" . Archivado desde el original el 26 de junio de 2003 . Consultado el 7 de noviembre de 2010 .
enlaces externos
- Documentación gratuita de IA-32 y x86-64 , proporcionada por Intel
- Referencia de instrucciones y código de operación x86
- Referencia de instrucciones x86 y amd64
- Tablas de instrucciones: listas de latencias de instrucción, rendimientos y desgloses de microoperaciones para CPU Intel, AMD y VIA
- Lista de instrucciones de ensamblador de Netwide (de ensamblador de Netwide )