Contexte et architecture du 8087

Introduit en 1980, le coprocesseur 8087 d’Intel a été conçu pour soulager le 8086 des calculs à virgule flottante. Son architecture repose sur un datapath de 80 bits, visible sur le die grâce à une micro‑photographie à haute résolution. Le cœur du circuit comprend une ROM de 1648 micro‑instructions qui orchestre les opérations, un additionneur entier central et un shifter capable de décaler les bits d’un nombre arbitraire de positions. Ces blocs, associés à une logique de comptage des zéros à gauche, permettent d’aligner rapidement les opérandes avant l’opération arithmétique.

Mécanisme d’addition flottante

Les nombres sont stockés au format « temporary real » : 1 bit de signe, 15 bits d’exposant (bias = 16383) et 64 bits de mantisse. Avant d’additionner, le 8087 compare les exposants, décale le mantisse du plus petit opérande vers la droite jusqu’à ce que les exposants soient égaux, puis utilise l’additionneur entier pour sommer les mantisses alignées. Si la somme génère un dépassement de capacité (bit de dépassement à gauche), le résultat est normalisé : un décalage d’un bit vers la droite et une incrémentation de l’exposant. Cette chaîne de traitement explique pourquoi le 8087 réalise l’addition en près de 100 fois moins de cycles que le 8086, qui devait simuler ces étapes en logiciel.

Soustraction flottante et cas particuliers

La soustraction suit le même principe d’alignement, mais introduit des complications supplémentaires. Après le décalage des mantisses, l’opération utilise l’additionneur entier en mode soustraction, ce qui peut produire un résultat négatif ou nul. Si le résultat est négatif, le 8087 inverse le signe et rend la mantisse positive. En cas de zéro, aucune normalisation n’est possible ; le coprocesseur renvoie alors le symbole +0 ou –0 selon le signe d’origine. Le processus de normalisation peut nécessiter un décalage important : dans l’exemple 8 – 7.5, la mantisse résultante a été déplacée de quatre bits, entraînant une décrémentation de l’exposant de quatre.

Spécificités matérielles et micro‑code

Outre les registres de pile (huit registres de 80 bits, chacun doté d’un tag indiquant « zero », « valid », « special » ou « empty »), le 8087 possède des registres temporaires tmpA et tmpB (80 bits avec tag) et un registre tmpC spécial. tmpC ne possède ni signe ni exposant, mais une mantisse de 68 bits : 64 bits de donnée, un bit de garde contre le dépassement et trois bits de rondeur. Cette configuration permet au micro‑code d’effectuer les étapes de normalisation et d’arrondi sans perdre de précision. Le convertisseur d’exposant détecte les débordements et sous‑débordements, garantissant que les valeurs restent dans la plage de plus de 10^4932 offerte par le champ exponentiel de 15 bits.