domingo, 19 de enero de 2014

Anexo 5: Los coprocesadores matemáticos

Junto con la aparición de los microprocesadores 8086 y 8088 fabricados por la empresa Intel, hizo su aparición el coprocesador de matemático 8087 también fabricado por la misma empresa, y el cual estaba conectado directamente a los buses de direcciones y datos. El coprocesador matemático no estaba incluído en todas las computadoras domésticas compatibles con las PC de IBM, era un componente extra que podía ser agregado a la tarjeta madre en un socket vacío que estaba reservado en caso de que el usuario quisiera aumentar la velocidad de procesamiento de las operaciones matemáticas de su máquina. Esta es la distribución de pins del circuito integrado.




Y esta es la forma en la cual el coprocesador matemático se interconectaba en la electrónica de la máquina con el microprocesador principal (el circuito integrado Intel 8259 es un circuito especializado conocido como Controlador Programable de Interrupciones, o PIC del inglés Programmable Interrupt Controller, el circuito integrado Intel 8284 es un generador de pulsos de reloj, mientras que el circuito integrado Intel 8288 es un controlador de bus):




Con la aparición del microprocesador Intel 80286, hizo su aparición el coprocesador 80287, también como un circuito integrado opcional para ser agregado internamente a la computadora en el socket que usualmente estaba reservada para tal opción.

Posteriormente, con la introducción del microprocesador Intel 80386, empezó a ser fabricado el coprocesador matemático 80387, también para acompañar a esta nueva familia de microprocesadores.

Con la fabricación de nuevas familias de microprocesadores en la empresa Intel, las capacidades de los coprocesadores matemáticos fueron integradas en el mismo microprocesador, razón por la cual los coprocesadores matemáticos dejaron de fabricarse y venderse como accesorios opcionales.

Este es el conjunto general de instrucciones de los coprocesadores matemáticos:


Instrucciones para co-procesadores matemáticos 80x87

  Instrucción     Significado     Sólo 8087  
  FABS     Absolute value    
  FADD     Add real    
  FADDP     Add real and pop    
  FBLD     Packed decimal (BCD) load    
  FBSTP     Packed decimal (BCD) store and pop    
  FCHS     Change sign    
  FCLEX/FNLEX     Clear exceptions    
  FCOM     Compare real    
  FCOMP     Compare real and go
  FCOMPP     Compare real and pop twice  
  FCOS     Cosine of ST(0)  
  FDECSTP     Decrement stack pointer  
  FDISI/FNDISI     Disable interrupts  
  FDIV     Divide real    
  FDIVP     Divide real and pop    
  FDIVR     Divide real reversed    
  FDIVRP     Divide real reversed and pop    
  FENI/FNENI     Enable interrupts  
  FFREE     Free register    
  FIADD     Integer add    
  FICOM     Integer compare    
  FICOMP     Integer compare and pop    
  FIDIV     Integer divide    
  FIDIVR     Integer divide reversed    
  FILD     Integer load    
  FIMUL     Integer multiply    
  FINCSTP     Increment stack pointer    
  FINIT/FNINIT     Initialize processor    
  FIST     Integer store    
  FISTP     Integer store and pop    
  FISUB     Integer subtract    
  FISUBR     Integer subtract reversed    
  FLD     Load real    
  FLDPI     Load Π (Pi)    
  FLDZ     Load +0.0    
  FLD1     Load +1.0    
  FMUL     Multiply real    
  FMULP     Multiply real and pop    
  FNOP     No operation    
  FPATAN     Partial arctangent    
  FPREM     Partial remainder    
  FPTAN     Partial tangent    
  FRNDINT     Round to integer    
  FRSTOR     Restore saved state    
  FSAVE/FNSAVE     Save state    
  FSCALE     Scale    
  FSETPM     Set protected mode    
  FSIN     Sine of ST(0)    
  FSINCOS     Sine and cosine of ST(0)    
  FSQRT     Square root    
  FST dest     Store real at destination    
  FSTCW/FNSTCW     Store control word    
  FSTENV/FNSTENV     Store environment    
  FSTP     Store real and pop    
  FSTSW/FNSTSW     Store status word    
  FSTSW AX     Store status word to AX    
  FNSTSW AX     Store status word to AX    
  FSUB     Subtract real    
  FSUBP     Subtract real and pop    
  FSUBR     Subtract real reversed    
  FSUBRP     Subtract real reversed and pop    
  FTST     Test stack top against +0.0    
  FUCOM     Unordered compare    
  FUCOMP     Unordered compare    
  FUCOMPP     Unordered compare    
  FWAIT     Wait while 80287 is busy    
  FXAM     Examine stack top    
  FXCH     Exchange registers    
  FXTRACT     Extract exponent and significant    
  FYL2X     Y * log 2 X    
  FYL2XP1     Y * log 2 (X+1)    
  F2XM1     2x-1