Anexo:Instrucciones x86

Summary

El conjunto de instrucciones x86 ha sido extendido varias veces, introduciendo registros más amplios y tipos de datos y/o nueva funcionalidad.

Instrucciones con enteros

editar

Este es el conjunto de instrucciones completo del 8086/8088, pero la mayoría de estas instrucciones, si no todas, están disponibles en el modo de 32 bits, ellas simplemente operarían en registros y valores de 32 bits (EAX, EBX, etc) en vez de sus contrapartes de 16 bits (AX, BX, etc). Ver lenguaje ensamblador x86 para un tutorial rápido para esta familia de procesadores. El conjunto de instrucciones actualizado también está agrupado de acuerdo a la arquitectura (i386, i486, i686) y más generalmente está referido como x86_32 y x86_64 (también conocido como AMD64).

Representación de números enteros

editar

Los números en los registros pueden representarse de dos maneras. La primera es una representación de entero positivo sin signo, cuyo rango será desde 0 hasta 2n, donde n es 8, 16, 32 o 64 bits dependiendo del tamaño del registro. La segunda es una representación de entero con signo (complemento a dos, con un rango entre -2n-1 hasta 2n-1 - 1, donde n es, al igual que en la anterior, el ancho de bits del registro, (8, 16, 32 o 64 bits).

Rango de los números de acuerdo al tamaño de los registros y su representación como entero con signo y sin signo:

Tamaño del registro Enteros sin signo Enteros con signo
(complemento a dos)
8 bits 0 a 255 -128 a 127
16 bits 0 a 65.535 -32.768 a 32.767
32 bits 0 a 4.294.967.295 -2.147.483.648 a 2.147.483.647
64 bits 0 a 18.446.744.073.709.551.615 -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807

Las operaciones aritméticas del procesador trabajan, generalmente, indistintamente con cualquiera de las dos representaciones. La misma instrucción, (el mismo opcode), para una suma, por ejemplo, puede sumar dos valores en representación como enteros positivos sin signo o dos valores en representación de enteros con signo. Para el procesador es lo mismo, y es el programador (o el compilador) el que trata o piensa en los números como estando en una representación u otra.

Hay, sin embargo, algunas instrucciones, como la multiplicación y la división, por ejemplo, donde son necesarios dos opcodes diferentes , uno para cuando se realizan operaciones con enteros positivos sin signo, y otro para cuando se realizan operaciones con enteros con signo, ya que se necesita un tratamiento especial para cada caso. Existen las instrucciones MUL y DIV para trabajar con enteros positivos sin signo, y las IMUL e IDIV para trabajar con enteros con signo. Lo mismo sucede con las instrucciones de SHIFT (desplazamiento), que tienen versiones para manejar números en representación entera sin signo (SHL y SHR) y con signo (SAL y SAR).

El CPU también puede trabajar con operaciones con números en representación BCD, pero como no hay instrucciones específicas para BCD, se usan las operaciones aritméticas convencionales, pero hay que hacer un ajuste adicional, usando instrucciones especializadas, para obtener el resultado correcto en representación BCD.

Instrucciones x86

editar

Abajo una tabla con las instrucciones x86. La columna CPU indica el primer CPU que tuvo la instrucción, comenzando con el Intel 8086 y el Intel 8088, que fueron los primeros CPU de la serie x86

Mueve y copia datos
editar
Movimiento de datos
CPU Instrucción Opcode Significado Traducción Notas
8086/88 MOV Move Mueve En realidad es una copia, ya que en el destino se copia lo que está en el origen sin alterar este último
80386 MOVZX Move with zero-extend Mueve con extensión de cero
80386 MOVSX Move with sign-extend Mueve con extensión de signo
8086/88 XCHG Exchange data Intercambia datos
8086/88 XLAT 11010111 Table look-up translation Traslación de búsqueda en tabla
Operaciones de pila
editar
Operaciones de pila
CPU Instrucción Opcode Significado Traducción Notas
8086/88 PUSH Push data onto stack Apila dato en la pila
8086/88 POP 0x0F Pop data from stack Desapila dato desde la pila POP CS (opcode 0x0F) solo trabaja en el 8086/8088. Los CPU posteriores usan 0x0F como un prefijo para nuevas instrucciones
8086/88 PUSHF 10011100 Push flags onto stack Apila bandera en la pila
8086/88 POPF 10011101 Pop data into flags register Desapila dato desde la pila hacia los registros de bandera
80186/188 PUSHA Push all general purpose registers onto stack Apila todos los registros de propósito general hacia la pila Equivalente a
PUSH AX, CX, DX, BX, SP, BP, SI, DI
80186/188 POPA Pop all general purpose registers from stack Desapila todos los registros de propósito general desde la pila Equivalente a
POP DI, SI, BP, SP, BX, DX, CX, AX
80386 PUSHAD Push all double-word (32-bit) registers onto stack Apila todos los registros de 32 bits en la pila
80386 POPAD Pop all double-word (32-bit) registers from stack Desapila todos los registros de 32 bits en la pila No desapila el registro ESP
80386 PUSHFD Push EFLAGS register onto stack Apila el registro EFLAGS en la pila
80386 POPFD Pop data into EFLAGS register Desapila dato al registro EFLAGS desde la pila
80186/188 ENTER Enter stack frame Entra un marco de pila Equivalente a
PUSH BP     ; salva BP
MOV BP, SP  ; guarda el valor original de SP
SUB SP, n   ; abre un espacio en el stack para las variables locales de la función
            ; Ahora, con BP se pueden referenciar los parámetros de entrada
            ; de la función, que vienen en el stack al ser llamada ésta
            ; y las variables locales de la función que estarán
            ; en el espacio reservado aquí
80186/188 LEAVE Leave stack frame Sale del marco de pila Equivalente a
MOV SP, BP   ; Restaura SP
POP BP       ; Restaura BP
Entrada y salida por puertos
editar
Entrada/salida de puertos
CPU Instrucción Opcode Significado Traducción Notas
8086/88 IN Input from port Entrada desde un puerto
8086/88 OUT Output to port Salida a un puerto

Conversiones

editar
Conversiones
CPU Instrucción Opcode Significado Traducción Notas
8086/88 CBW 10011000 Convert byte to word Convierte byte a palabra
8086/88 CWD 10011001 Convert word to doubleword Convierte palabra a doblepalabra
80386 CDQ Convert double-word to quad-word Convierte doblepalabra a palabra cuádruple Sign-extends EAX into EDX, forming the quad-word EDX:EAX. Since (I)DIV uses EDX:EAX as its input, CDQ must be called after setting EAX if EDX is not manually initialized (as in 64/32 division) before (I)DIV
80386 CWDE Convert word to double-word Convierte palabra a doblepalabra Unlike CWD, CWDE sign-extends AX to EAX instead of AX to DX:AX
80486 BSWAP Byte Swap Intercambio de bytes Convierte Little endian a big endian (y viceversa). Solo trabaja en registros de 32 bits

Operaciones aritméticas y lógicas

editar
Operaciones aritméticas
editar
Aritméticas
CPU Instrucción Opcode Significado Traducción Notas
8086/88 ADD Add Suma
8086/88 ADC Add with carry Suma con acarreo destino = destino + origen + flag de acarreo
80486 XADD Exchange and Add Intercambia y suma
8086/88 SUB Subtraction Resta
8086/88 SBB Subtraction with borrow Resta con acarreo ("toma prestado")
8086/88 INC Increment by 1 Incremento por 1
8086/88 DEC Decrement by 1 Decrementa por 1
8086/88 NEG Two's complement negation Negación del complemento a dos Cambio de signo. Útil para números en representación con signo (no con representación de enteros sin signo). Es equivalente a invertir los bits con NOT, y luego sumar 1
8086/88 MUL Unsigned multiply Multiplicación sin signo
8086/88 IMUL Signed multiply Multiplicación con signo
8086/88 DIV Unsigned divide División sin signo
8086/88 IDIV Signed divide División con signo
Operaciones BCD y ASCII
editar
Operaciones BCD y ASCII
CPU Instrucción Opcode Significado Traducción Notas
8086/88 DAA 00100111 Decimal adjust AL after addition Ajuste decimal de AL después de la suma Usado en BCD
8086/88 DAS 00101111 Decimal adjust AL after subtraction Ajuste decimal después de sustracción Usado en BCD
8086/88 AAA 00110111 ASCII adjust AL after Addition Ajuste ASCII de AL después de la suma Usado en BCD
8086/88 AAS 00111111 ASCII adjust AL after subtraction Ajuste ASCII de AL después de la sustracción
8086/88 AAM ASCII adjust AX after multiplication Ajuste ASCII de AX después de la multiplicación Solo la versión de base 10 está documentada. La hoja de datos (datasheet) del 8086/8088 solo documenta la versión de base 10 de la instrucción AAD (opcode 0xD5 0x0A), pero cualquier base trabajará (como 0xD5 0x02 para binario, por ejemplo). La documentación posterior de Intel también tiene la forma genérica. Los procesadore NEC V20 y V30 (y posiblemente otros CPU NEC serie V) siempre usan base 10, ignorando el argumento, causando un número de incompatiblidades
8086/88 AAD ASCII adjust AX before division Ajuste ASCII de AX antes de la división
Operaciones lógicas (bitwise)
editar
Lógicas (bitwise)
CPU Instrucción Opcode Significado Traducción Notas
8086/88 AND Logical AND Y lógica
8086/88 OR Logical OR O lógico
8086/88 XOR Exclusive OR O exclusivo (XOR)
8086/88 NOT Logical NOT NO lógico
Rotación de bits
CPU Instrucción Opcode Significado Traducción Notas
8086/88 ROL Rotate left Rota hacia la izquierda
8086/88 ROR Rotate right Rota hacia la derecha
8086/88 RCL Rotate left (with carry) Rota hacia la izquierda con acarreo
8086/88 RCR Rotate right (with carry) Rota a la derecha con acarreo
Desplazamiento de bits
CPU Instrucción Opcode Significado Traducción Notas
8086/88 SHL Shift left (unsigned shift left) Desplazamiento a la izquierda Los bits se desplazan a la izquierda, el bit de la derecha se le asigna cero, el bit de la izquierda desaparece del operando pero queda guardado en el flag del acarreo
8086/88 SHR Shift right (unsigned shift right) Desplazamiento hacia la derecha Los bits se desplazan a la derecha, el bit de la izquierda se le asigna cero, el bit de la derecha desaparece del operando pero queda guardado en el flag del acarreo
80386 SHLD Shift left double-word
80386 SHRD Shift right double-word
Desplazamiento de bits (números con representación de signo (complemento a dos))
CPU Instrucción Opcode Significado Traducción Notas
8086/88 SAL Shift Arithmetically left (signed shift left) Desplaza aritméticamente hacia la izquierda Desplaza los bits del operando hacia la izquierda sin tocar el bit más significativo del operando (bit del signo). Esto permite multiplicar por 2 un operando con signo
8086/88 SAR Shift Arithmetically right (signed shift right) Desplaza aritméticamente hacia la derecha Desplaza los bits del operando hacia la derecha. El bit del signo no se desplaza y además se copia en el bit inmediatamente a la derecha. Esto permite dividir entre dos un operando con signo

Operaciones con bits

editar
Operaciones con bits
CPU Instrucción Opcode Significado Traducción Notas
80386 BT Bit test Prueba de bit
80386 BTR Bit test and reset Prueba de bit y pone a cero
80386 BTS Bit test and set Prueba de bit y pone a 1
80386 BTC Bit test and complement Prueba de bit y complementa
80386 BSF Bit scan forward Busca bit hacia adelante
80386 BSR Bit scan reverse Busca bit hacia atrás

Operaciones con los flags (banderas)

editar
Flags
CPU Instrucción Opcode Significado Traducción Notas
8086/88 CMC 11110101 Complement carry flag Complementa el flag del acarreo
8086/88 CLC 11111000 Clear carry flag Aclara el flag del acarreo
8086/88 STC 11111001 Set carry flag Enciende el flag del acarreo
8086/88 CLI 11111010 Clear interrupt flag Aclara el flag de las interrupciones
8086/88 STI 11111011 Set interrupt flag Enciende el flag de las interrupciones
8086/88 CLD 11111100 Clear direction flag Aclara el flag de la dirección
8086/88 STD 11111101 Set direction flag Enciende el flag de la dirección
8086/88 LAHF 10011111 Load flags into AH register Carga los flags al registro AH
8086/88 SAHF 10011110 Store AH into flags Almacena AH en el registro de flags usado para poner varios valores específicos en los flgs

Operaciones de string

editar
Carga el registro AL, AX o EAX
CPU Instrucción Opcode Significado Traducción Notas
8086/88 LODSB Load string byte Carga el siguiente byte de un string
8086/88 LODSW string word Carga la siguiente palabra (16 bits) de un string
80386 LODSD Load string Carga la siguiente doble palabra (32 bits) de un string can be prefixed with REP
Guarda en contenido del registro AL, AX o EAX
CPU Instrucción Opcode Significado Traducción Notas
8086/88 STOSB Store byte in string Guarda un byte de string
8086/88 STOSW Store word in string Guarda una palabra de string
80386 STOSx Store string Guarda una doble palabra de string
Mueve bytes, words o doublewords
CPU Instrucción Opcode Significado Traducción Notas
8086/88 MOVSB Move byte from string to string Mueve byte de string a string
8086/88 MOVSW Move word from string to string Mueve palabra de string a string
80386 MOVSW, MOVSD Move data from string to string Mueve datos desde string a string
Compara bytes, words o doublewords
CPU Instrucción Opcode Significado Traducción Notas
8086/88 CMPSB Compare bytes in memory Compara bytes en memoria
8086/88 CMPSW Compare words in memory Compara palabras en memoria
80386 CMPSD Compare string double-word Compara string de doblepalabra Compares ES:[(E)DI] with DS:[SI]
Busca bytes, words o doublewords
CPU Instrucción Opcode Significado Traducción Notas
8086/88 SCASB Compare byte string Busca byte en string
8086/88 SCASW Compare word string Busca palabra en string
80386 SCASD Scan string data double-word Busca doble palabra en string
Operaciones de string (con puertos de entrada/salida)
80186/188 Instrucción Opcode Significado Traducción Notas
80186/188 INS Input from port to string Entrada desde un puerto hacia un string Equivalente a
IN AX, DX         ; Lee el puerto de entrada apuntado por DX
MOV ES:[DI], AX   ; Guarda el contenido del puerto en ES:[DI]
; Ajusta DI de acuerdo al tamaño del operando y el flag DF
80186/188 OUTS Output string to port Salida de string por un puerto Equivalente a
MOV AX, DS:[SI]  ; Lee un dato desde DS:[SI]
OUT DX, AX       ; Envía el dato al puerto apuntado por DX
; Ajusta SI de acuerdo al tamaño del operando y al flag DF
80386 INSB, INSW, INSD Input from port to string with explicit size Entrada de un tamaño específico desde un puerto a un string same as INS
Prefijo de repetición
CPU Instrucción Opcode Significado Traducción Notas
8086/88 REPxx Repeat MOVS/STOS/CMPS/LODS/SCAS Repite MOVS/STOS/CMPS/LODS/SCAS (REP, REPE, REPNE, REPNZ, REPZ)

Control del flujo del programa

editar
Saltos incondicionales
editar
Salto incondicional
CPU Instrucción Opcode Significado Traducción Notas
8086/88 JMP Jump Salto (incondicional) La ejecución del programa salta a la dirección apuntada por JMP
Comparaciones
editar
Comparaciones
CPU Instrucción Opcode Significado Traducción Notas
8086/88 CMP Compare operands Compara operandos
80486 CMPXCHG CoMPare and eXCHanGe Compara e intercambia
Pentium CMPXCHG8B CoMPare and eXCHanGe 8 bytes Compara e intercambia 8 bytes
8086/88 TEST Logical compare (AND) Comparación lógica (Y) Compara dos operandos y ajusta los flags. No se alteran los operandos
80386 SETx Set byte to one on condition Ajusta byte de acuerdo a una condición (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)
Saltos condicionales
editar
Saltos condicionales
CPU Instrucción Opcode Significado Traducción Notas
8086/88 Jxx Jump if condition Salta en caso de una condición (JA, JAE, JB, JBE, JC, JCXZ, 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)
80386 JCXZ, JECXZ Jump if register (E)CX is zero Salta si el registro (E)CX es cero
Loops (bucles)
editar
Loops (bucles)
CPU Instrucción Opcode Significado Traducción Notas
8086/88 LOOP/LOOPx Loop control Control de bucles (LOOPE, LOOPNE, LOOPNZ, LOOPZ)
80386 LOOPW, LOOPD Loop Bucle Bucle; (E)CX es el registro contador
80386 LOOPEW, LOOPED Loop while equal Loop mientras igual
80386 LOOPZW, LOOPZD Loop while zero Loop mientras cero
80386 LOOPNEW, LOOPNED Loop while not equal Loop mientras no igual
80386 LOOPNZW, LOOPNZD Loop while not zero Loop mientras no cero
Llamadas a subrutinas
editar
Llamadas a subrutinas
CPU Instrucción Opcode Significado Traducción Notas
8086/88 CALL Call procedure LLamada a procedimiento
8086/88 RET Return from procedure Retorno desde un procedimiento
8086/88 RETN Return from near procedure Retorno desde un procedimiento cercano
8086/88 RETF Return from far procedure Retorno desde un procedimiento lejano
Interrupciones
editar
Llamadas de interrupción
CPU Instrucción Opcode Significado Traducción Notas
8086/88 INT Call to interrupt Llama una interrupción Ejecuta, mediante software, una rutina apuntada por un vector de interrupción
8086/88 INTO 11001110 Call to interrupt if overflow Llama a interrupción en caso de overflow
Retornos de interrupción
CPU Instrucción Opcode Significado Traducción Notas
8086/88 IRET 11001111 Return from interrupt Retorna de una interrupción
80386 IRETx Interrupt return Retorno de una interrupción D suffix means 32-bit return, F suffix means do not generate epilogue code (i.e. LEAVE instruction), Use IRETD rather than IRET in 32-bit situations
Detener el procesador
editar
Detener el procesador
CPU Instrucción Opcode Significado Traducción Notas
8086/88 HLT 11110100 Enter halt state Entra en el estado de parada

Operaciones con registros de segmento

editar
Operaciones con registros de segmento
CPU Instrucción Opcode Significado Traducción Notas
8086/88 LDS Load DS with pointer Carga DS con un puntero
8086/88 LES Load ES with pointer Carga ES con un puntero
8086/88 LEA Load Effective Address Carga dirección efectiva a un registro

Operaciones de sincronización entre procesadores

editar
Operaciones de sincronización entre procesadores
8086/88 Instrucción Opcode Significado Traducción Notas
8086/88 ESC Used with floating-point unit Usado con la unidad de coma flotante
8086/88 LOCK 11110000 Assert BUS LOCK# signal Enciende la señal del bus LOCK# Para multiprocesamiento
8086/88 WAIT 10011011 Wait until not busy Espera hasta que no se esté ocupado Espera hasta que la señal dl pin de BUSY# se vuelva inactivo (usado con la unidad de coma flotante

Verificación de límites de arreglos

editar
Verificación de límites de arreglos
CPU Instrucción Opcode Significado Traducción Notas
80186/188 BOUND Check array index against bounds Chequea el índice de un arreglo con límites Eleva una interrupción 5 de software si la prueba falla

Carga y guarda el registro de tareas

editar
Carga y guarda el registro de tareas
CPU Instrucción Opcode Significado Traducción Notas
80286 LTR Load task register Carga registro de tareas
80286 STR Store task register Guarda registro de tareas

Carga y guarda el estado de la máquina

editar
Carga y guarda el estado de la máquina
CPU Instrucción Opcode Significado Traducción Notas
80286 LMSW Load machine status word Carga la palabra de estatus de la máquina
80286 SMSW Store machine status word Guarda la palabra de estatus de la máquina

Operaciones para cargar y guardar tablas de descriptor

editar
Tablas de descriptor
CPU Instrucción Opcode Significado Traducción Notas
80286 LLDT Load local descriptor table Carga tabla de descriptores local
80286 SLDT Store local descriptor table Guarda tabla de descriptores local
80286 LGDT Load global descriptor table Carga tabla de descriptores global
80286 SGDT Store global descriptor table Guarda tabla de descriptores global
80286 LIDT Load interrupt descriptor table Carga tabla de descriptores de interrupción
80286 SIDT Store interrupt descriptor table Guarda tabla de descriptores de interrupción

Segmentos

editar
Segmentos
CPU Instrucción Opcode Significado Traducción Notas
80286 LSL Load segment limit Carga límite del segmento
80286 VERR Verify a segment for reading Verifica segmento para la lectura
80286 VERW Verify a segment for writing Verifica segmento para la escritura

No clasificadas

editar
No clasificadas
CPU Instrucción Opcode Significado Traducción Notas
80286 ARPL Adjust RPL field of selector
80286 CLTS Clear task-switched flag in register CR0
80286 LAR Load access rights byte
80286 LOADALL Load all CPU registers, including internal ones such as GDT Undocumented, (80)286 and 386 only
80386 LFS, LGS Load far pointer
80386 LSS Load stack segment
80486 INVD Invalidate Internal Caches
80486 INVLPG Invalidate TLB Entry
80486 WBINVD Write Back and Invalidate Cache
Pentium CPUID CPU IDentification This was also added to later 80486 processors
Pentium RDMSR ReaD from Model-Specific Register
Pentium RDTSC ReaD Time Stamp Counter
Pentium WRMSR WRite to Model-Specific Register
Pentium RSM [1] Resume from System Management Mode This was introduced by the i386SL and later and is also in the i486SL and later. Resumes from System Management Mode (SMM)

Otras

editar
Otras
CPU Instrucción Opcode Significado Traducción Notas
8086/88 NOP 0x90 No operation No operación opcode (0x90) equivalente a XCHG AX, AX

Instrucciones de coma flotante

editar

Instrucciones originales del 8087

editar

Las siguientes son las instrucciones originales que vinieron con el coprocesador numérico Intel 8087, que estaba diseñado para suplir funcionalidad de coma flotante a los procesadores Intel 8086 y 8088.

Constantes
Instrucción Significado Traducción Notas
FLDZ Load 0.0 onto stack Carga 0,0 en la pila
FLD1 Load 1.0 onto stack Carga 1,0 en la pila
FLDPI Load π onto stack Carga π en la pila
FLDL2E Load log2(e) onto stack Carga log2(e) en la pila log2(e) = 1,44269504088896340736
FLDLN2 Load ln(2) onto stack Carha ln(2) en la pila ln(2) = 0,69314718055994530942
FLDL2T Load log2(10) onto stack Carga log2(10) en la pila log2(10) = 3,32192809488736234787
FLDLG2 Load log10(2) onto stack Carga log10(2) en la pila log10(2) = 0,30102999566398119521
Operaciones aritméticas
Instrucción Significado Traducción Notas
FABS Absolute value Valor absoluto
FCHS Change sign Cambio de signo
FADD Add Suma
FSUB Subtract Resta
FSUBR Reverse subtract Resta reversa
FMUL Multiply Multiplica
FDIV Divide Divide Ver Error de división del Intel Pentium
FDIVR Divide reversed Divide reverso
FIADD Integer add Suma entera
FISUB Integer subtract Resta entera
FISUBR Integer subtract reversed Resta entera reversa
FIMUL Integer multiply Multiplicación entera
FIDIV Integer divide División entera
FIDIVR Integer divide reversed División entera reversa
FADDP Add and pop Suma y POP
FSUBP Subtract and pop Resta y POP
FSUBRP Reverse subtract and pop Resta reversa y POP
FMULP Multiply and pop Multiplica y POP
FDIVP Divide and pop Divide y POP
FDIVRP Divide reversed and pop Divide reverso y POP
FSCALE Scale by factor of 2 Escala por un factor de 2
Partes de número
Instrucción Significado Traducción Notas
FRNDINT Round to integer Redondea a entero
FXTRACT Extract exponent and significand Extrae el exponente y la parte significativa
FPREM Partial remainder Resto parcial
Funciones trascendentales
Instrucción Significado Traducción Notas
FSQRT Square root Raíz cuadrada
FPTAN Partial tangent Tangente parcial
FPATAN Partial arctangent Arcotangente parcial
F2XM1 2x - 1 2x - 1 Más preciso que 2x para   cercano a cero
FYL2X y * log2(x) y * log2(x) Si  , entonces el logaritmo base -  es computado
FYL2XP1 y * log2(x+1) y * log2(x+1) Más preciso que   cuando   está cercano a cero
Carga y guarda registros
Instrucción Significado Traducción Notas
FXCH Exchange registers Intercambia registros
FLD Floating point load Carga coma flotante
FILD Load integer Carga entero
FBLD Load BCD Carga número en BCD
FSTP Store and pop Guarda y POP
FST Floating point store Guarda coma flotante
FIST Store integer Guarda entero
FISTP Store integer and pop Guarda entero y POP
FBSTP Store BCD and pop Guarda BCD y POP
FINCSTP Increment floating point stack pointer Incrementa el puntero de pila de coma flotante
FDECSTP Decrement floating point stack pointer Decrementa el puntero de pila de coma flotante
FFREE Free register Libera registro
Comparaciones
Instrucción Significado Traducción Notas
FTST Test for zero Prueba por cero
FCOM Compare Compara
FCOMP Compare and pop Compara y POP
FCOMPP Compare and pop twice Compara y POP dos veces
FICOM Integer compare Comparación entera
FICOMP Integer compare and pop Comparación entera y POP
FXAM Examine condition flags Examina los flags de condición
Otras
Instrucción Significado Traducción Notas
FNOP No operation No operación
FWAIT Wait while FPU is executing Espera mientras el FPU está ejecutando
Inicialización
FINIT Initialize floating point processor Inicializa el procesador de coma flotante
FNINIT Initialize floating point processor, no wait Inicializa el procesador de coma flotante, no espera
Excepciones
Instrucción Significado Traducción Notas
FCLEX Clear exceptions Aclara excepciones
FNCLEX Clear exceptions, no wait Aclara las excepciones, no espera
Interrupciones
Instrucción Significado Traducción Notas
FENI Enable interrupts Enciende las interrupciones Solo en el 8087, de lo contrario, FNOP
FNENI Enable interrupts, no wait Activa las interrupciones, no espera Solo en el 8087, de lo contrario, FNOP
FDISI Disable interrupts Desactiva las interrupciones Solo en el 8087, de lo contrario, FNOP
FNDISI Disable interrupts, no wait Desactiva las interrupciones, no espera Solo en el 8087, de lo contrario, FNOP
Control
Instrucción Significado Traducción Notas
FLDCW Load control word Carga la palabra de control
FSTCW Store control word Guarda la palabra de control
FNSTCW Store control word, no wait Guarda la palabra de control, no espera
Estatus
Instrucción Significado Traducción Notas
FSTSW Store status word Guarda la palabra de estatus
FNSTSW Store status word, no wait Guarda la palabra de estado, no espera
Estado
Instrucción Significado Traducción Notas
FSAVE Save FPU state Guarda el estado del FPU
FSAVEW Save FPU state, 16-bit Guarda el estado del FPU, 16 bits
FNSAVE Save FPU state, no wait, 8-bit Guarda el estado de la unidad de punto flotante (FPU), no espera, 8 bits
FNSAVEW Save FPU state, no wait, 16-bit Guarda el estado del FPU, no espera, 16 bits
FRSTOR Restore saved state Restaura el estado salvado
FRSTORW Restore saved state Restaura al estado salvado Quizás no disponible realmente en el 8087
Ambiente
Instrucción Significado Traducción Notas
FLDENV Load environment state Carga el estado del ambiente
FSTENV Store FPU environment Guarda el ambiente del FPU
FNSTENV Store FPU environment, no wait Guarda el ambiente del FPU, no espera
FSTENVW Store FPU environment, 16-bit Guarda el ambiente del FPU, 16 bits
FNSTENVW Store FPU environment, no wait, 16-bit Guarda el ambiente del FPU, no espera, 16 bits
FLDENVW

Véase también

editar

Procesadores x86:

Enlaces externos

editar
  • Intel 80386 Reference Programmer's Manual
    • 80386 Instruction Set
  • The 8086 / 80286 / 80386 / 80486 Instruction Set
  • Intel Pentium Instruction Set Reference
  • Free IA-32 and x86-64 documentation, provided by Intel
  • Netwide Assembler Instruction List (from Netwide Assembler)
  • X86 Opcode and Instruction Reference
  • The Art of Assembly Language Programming