En 1980, Intel a introduit le processeur 8087, rendant les opérations en virgule flottante beaucoup plus rapides sur l'IBM PC et d'autres systèmes. Bien que le 8087 prenne en charge des opérations avancées telles que les tangentes, les racines carrées et les logarithmes, cet article se concentre sur les opérations arithmétiques de base : l'addition et la soustraction. Le 8087 a offert une spectaculaire amélioration de vitesse par rapport au processeur 8086, accélérant l'addition d'un facteur presque cent, et les opérations compliquées encore plus.
Pour explorer le circuit de l'8087, j'ai retiré le couvercle du puce avec un ciseau et j'ai utilisé un microscope pour créer l'image haute résolution ci-dessous. La ROM microcode est la grande région rectangulaire au centre de la puce, contenant les 1648 micro-instructions qui contrôlent le puce. La moitié inférieure du puce (boîte rouge) est la datapath, le circuitry qui effectue des calculs en virgule flottante sur des valeurs de 80 bits.
Un premier plan de la datapath de l'8087 montre les blocs fonctionnels utilisés pour l'addition et la soustraction. Le composant clé est l'additionneur entier, situé au centre. Il reçoit un argument du registre B et un autre argument d'un composant tel que les registres temporaires ou les registres de la pile. La sortie de l'additionneur est stockée dans le registre de somme. Le déplaceur peut déplacer une valeur vers la gauche ou vers la droite. Le déplaceur occupe beaucoup d'espace sur la puce car son circuitry permet de déplacer une valeur rapidement par un nombre arbitraire de bits. Les opérations en virgule flottante utilisent intensivement le déplaceur pour aligner les valeurs ; le circuit des zéros leaders compte le nombre de bits ou d'octets zéro à gauche d'une valeur afin qu'ils puissent être déplacés. Le convertisseur d'exposant traite les exposants, détectant les débordements et les sous-débordements. Ces circuits spécialisés ont aidé l'8087 à atteindre ses hautes performances.
La plupart des ordinateurs utilisent des entiers comme représentation de base des nombres. Mais de nombreuses applications ont besoin d'utiliser des nombres avec une partie fractionnaire, comme 1,23. De plus, les entiers ont une plage très limitée : un entier sur 32 bits peut exprimer des nombres allant de environ -2 milliards à 2 milliards. Pour résoudre ces problèmes, les ordinateurs implémentent généralement des nombres en virgule flottante, qui fournissent des fractions sur une plage énorme. Dans la plupart des cas, un nombre en virgule flottante est représenté par signe × significand × 2^exposant. Le significand est un nombre binaire de la forme 1.bbb… : un 1 initial, suivi du point binaire (l'équivalent binaire du point décimal) et le reste des bits.
Dans un nombre binaire, chaque bit représente une puissance de 2. Pour la partie fractionnaire, la partie
Source: Hacker News · Résumé par HeadlinesBriefing