Intel 8087
Les Intel 8087 furent les premiers coprocesseurs mathématiques conçus par Intel en 1980 pour les machines 16 bits (le 8231 est plus ancien, mais conçu pour le processeur 8 bit Intel 8080).
Il était conçu pour être utilisé avec les microprocesseurs Intel 8088 et 8086. Le but du 8087, le premier de la famille x87, était d'accélérer des calculs pour des applications demandant un traitement avec des nombres à virgule flottante. Les performances d'exécution augmentèrent de 20 % à 500 % selon les applications. Le 8087 pouvait atteindre la performance de 50 kFLOP/s, dépendant de l'opération demandée.
Ce coprocesseur introduit environ 60 nouvelles instructions disponibles pour le programmeur, dont les mnémoniques commencent tous par la lettre F pour les différencier des instructions arithmétiques sur les entiers disponibles nativement sur les 8086/88. Par exemple, pour les additions et multiplications, réalisées par les instructions 8086/88 ADD et MUL qui portent sur des entiers, le 8087 ajoute les instructions FADD et FMUL, portant sur des nombres en virgule flottante. Dans le code machine binaire, toutes ces instructions commençaient par la suite de bits 11011, ce qui fait 27 en décimal, le code ASCII de la touche ESCAPE : on parle parfois d'escape opcodes.
Les 8087 (et, en fait, toute la famille des x87) ne fournissent pas un ensemble linéaire de registres tels que les registres AX/BX/CX/DX des processeurs 8086/88 et 80286. Les registres de travail des x87 sont structurés sous une certaine forme de pile (cependant elle n'est pas exactement comme une structure de données typique de pile) s'étendant de ST0 à ST7. Les instructions en virgule flottante des coprocesseurs x87 opèrent des push et des pop de valeurs sur cette pile.
Quand Intel conçut le 8087, il souhaita standardiser en partie ses spécifications. Intel intégra donc le groupe de travail de la future norme IEEE 754 portant sur la représentation des nombres en virgule flottante. Le 8087 est donc historiquement très important car ses spécifications servirent de base à ce qui devint la norme IEEE 754 en 1985. Cependant le 8087 est sorti en 1980, à une époque où le standard IEEE 754 n'en était qu'au stade de brouillon. Il n'implémente donc pas le standard IEEE 754 dans tous ses détails. La première unité de calcul en virgule flottante IEEE 754 est l'Intel 80387.
Les 8087 fournissaient deux représentations pour les nombres virgule flottante, sur 32 et 64 bits, ainsi qu'un support interne étendu aux données 80 bits pour améliorer la précision sur de gros calculs grands et complexes. Indépendamment de ceci, les 8087 offraient un format 80 bits à 17 chiffres en décimal codé en binaire et un format de données 16, 32 et 64 bits dans les entiers.
Le 8087 différait des coprocesseurs Intel suivants par le fait qu'il était directement connecté aux bus d'adresses et de données. Le 8088/86 cherchait une instruction qui commençait avec la séquence '11011' et laissait le contrôle au coprocesseur. Le coprocesseur rendait la main une fois que la séquence d'instruction du coprocesseur prenait fin. Les coprocesseurs suivants d'Intel ne se connectaient pas de la même façon aux bus, mais leurs instructions étaient délivrées par le processeur principal.
Les 8087, annoncés en 1980, ont été remplacés par les 80287 et 80387. Les générations suivantes de processeurs Intel x86, à partir du 80486, n'utilisent plus de coprocesseur séparé pour le calcul en virgule flottante, mais l'incluent directement sur leur die, à l'exception notable du 80486SX qui était un 80486DX modifié où l'unité de calcul en virgule flottante, testée défectueuse, avait été désactivée. Le 80487 était en fait un 80486DX complet avec une broche supplémentaire. Quand il était installé, il désactivait le 80486SX. Le 80486DX, Pentium, et processeurs suivants incluent directement en leur cœur les fonctionnalités de calculs en virgule flottante.