# Intel 80486

L'Intel 80486 (i486, 486) est un microprocesseur de la famille des x86, fabriqué par Intel. Il est lancé en 1989.
Du point de vue de l'architecture de processeur, le 80486 est très semblable à son prédécesseur immédiat, l'Intel 80386, avec l'ajout de quelques instructions supplémentaires. C'est donc une architecture CISC.
Du point de vue de la microarchitecture, c'est une grande amélioration. Il y a une mémoire cache unifiée intégrée d'instructions et de données, en option une unité de calcul en virgule flottante (FPU) intégrée, et une unité d'interface de bus améliorée. En outre, dans des conditions optimales, le cœur du processeur peut soutenir un rythme d'exécution d'une instruction par cycle. Ces améliorations permettent approximativement de doubler la vitesse d'exécution par rapport à un 80386 à la même fréquence de base. Cependant, quelques modèles bas de gamme (Intel 80486SX) sont plus lents que les 80386 les plus rapides.
Une version 25 MHz est présentée en avril 1989, une version 33 MHz en mai 1990, et une version 50 MHz en juin 1991.
Il existe plusieurs suffixes et variantes comprenant :
* Intel 80486DX - le 80486 original, avec un coprocesseur mathématique (FPU) intégré ;
* Intel 80486SX - un 80486DX sans FPU ; les premières versions sont en fait des 80486DX dont le FPU est défectueux et donc neutralisé ; dans les versions postérieures, le FPU est retiré de la puce pour réduire sa taille, et donc son coût ;
* Intel 80486DX2 - l'horloge interne du processeur tourne à deux fois la fréquence de base de l'horloge du bus externe ;
* Intel 80486SX2 - le même que le 80486DX2, mais avec le FPU neutralisé ;
* Intel 80486SL - 80486DX avec des circuits de gestion d'alimentation, principalement utilisé dans les ordinateurs portables ;
* Intel 80486SL-80486SL-NM - 80486SX avec des circuits de gestion d'alimentation ;
* Intel 80487 - 80486DX avec un plan de brochage légèrement différent pour être utilisé comme FPU dans les systèmes 80486SX ;
* Intel 80486 OverDrive (en) - 80486SX, 80486SX2, 80486DX2 ou 80486DX4 - marqués comme processeurs de mise à niveau, quelques modèles ont des plans de brochages ou des tensions différentes des processeurs équivalents standards ;
* Intel 80486DX4 - conçu pour tourner à trois fois la fréquence de base du bus externe (non quadruple comme souvent cru).
Les fréquences du bus externe sont 16 MHz, 20 MHz, 25 MHz, 33 MHz, 40 MHz et 50 MHz. Plus tard, quelques cartes mères 80486 permettent le support officieux et non documenté des 60 et 66 MHz.

## Améliorations par rapport au 80386

Le jeu d'instructions du i486 est très similaire à celui du i386, avec l’ajout de quelques instructions supplémentaires, telles que CMPXCHG, une opération atomique de comparaison et d'échange, et XADD, une opération atomique de récupération et d'ajout qui renvoie la valeur d’origine (contrairement à un ADD standard, qui renvoie uniquement des drapeaux). Cette génération de processeur comprend jusqu’à 156 instructions différentes.
L’architecture de l’i486 est une grande amélioration par rapport à celle de l'i386. Il dispose d’un cache d’instructions et de données unifié sur puce, d’une unité de calcul en virgule flottante (FPU) sur puce et d’une unité d’interface de bus améliorée. En raison de l’étroitesse du pipeline, des séquences d’instructions simples (telles que ALU reg,reg et ALU reg,im) pouvaient maintenir un débit d’un cycle d’horloge unique (une instruction exécutée à chaque cycle). En d’autres termes, il fonctionnait à environ 1,8 cycles d'horloge par instruction. Ces améliorations ont permis de doubler grossièrement les performances ALU entières par rapport à l’i386 à la même fréquence d’horloge. Un i486 à 16 MHz avait donc des performances similaires à celles d’un i386 à 33 MHz. Avec la combinaison du processeur et du co-processeur sur la puce, le taux d’utilisation du bus serait de 50 % pour la version Intel 486 à 25 MHz. En d’autres termes, la combinaison du processeur et du MCP (coprocesseur mathématique) offre 40 % de performances en plus par rapport à l'Intel 386 DX combiné au coprocesseur mathématique Intel 387 DX. L’ancienne conception devait atteindre 50 MHz pour être comparable à un i486 à 25 MHz.
| $^3$$_1$ | ... | $^1$$_5$ | ... | $^0$$_7$ | ... | $^0$$_0$ | (bit position) |
| Registres principaux (8/16/32 bits) ||||||||
| EAX | EAX | AH | AH | AL | AL | AL | A register |
| EBX | EBX | BH | BH | BL | BL | BL | B register |
| ECX | ECX | CH | CH | CL | CL | CL | C register |
| EDX | EDX | DH | DH | DL | DL | DL | D register |
| Registres d'index (16/32 bits) ||||||||
| ESI | ESI | SI | SI | SI | SI | SI | Source Index |
| EDI | EDI | DI | DI | DI | DI | DI | Destination Index |
| EBP | EBP | BP | BP | BP | BP | BP | Base Pointer |
| ESP | ESP | SP | SP | SP | SP | SP | Stack Pointer |
| Program counter (16/32 bits) ||||||||
| EIP | EIP | IP | IP | IP | IP | IP | Instruction Pointer |
| Sélecteurs de segment (16 bits) ||||||||
| | | CS | CS | CS | CS | CS | Code Segment |
| | | DS | DS | DS | DS | DS | Data Segment |
| | | ES | ES | ES | ES | ES | Extra Segment |
| | | FS | FS | FS | FS | FS | F Segment |
| | | GS | GS | GS | GS | GS | G Segment |
| | | SS | SS | SS | SS | SS | Stack Segment |
Registre de statut :
| $^1$$_7$ | $^1$$_6$ | $^1$$_5$ | $^1$$_4$ | $^1$$_3$ | $^1$$_2$ | $^1$$_1$ | $^1$$_0$ | $^0$$_9$ | $^0$$_8$ | $^0$$_7$ | $^0$$_6$ | $^0$$_5$ | $^0$$_4$ | $^0$$_3$ | $^0$$_2$ | $^0$$_1$ | $^0$$_0$ | (bit position) |
| V | R | 0 | N | IOPL | IOPL | O | D | I | T | S | Z | 0 | A | 0 | P | 1 | C | EFlags |
Registres virgule flottante (80 bits) :
| $^7$$_9$ | ... | $^0$$_0$ |
| ST0 | ST0 | STack register 0 |
| ST1 | ST1 | STack register 1 |
| ST2 | ST2 | STack register 2 |
| ST3 | ST3 | STack register 3 |
| ST4 | ST4 | STack register 4 |
| ST5 | ST5 | STack register 5 |
| ST6 | ST6 | STack register 6 |
| ST7 | ST7 | STack register 7 |

### Différences entre i386 et i486

* Un cache SRAM sur puce (niveau 1) de 8 Ko stocke les instructions et les données les plus récemment utilisées (16 Ko et/ou en écriture différée sur certains modèles ultérieurs). Le i386 n’avait pas de cache interne mais supportait un cache hors puce plus lent (pas réellement un cache de niveau 2 car le i386 n’avait pas de cache interne de niveau 1).
* Un protocole de bus externe amélioré pour permettre la cohérence du cache et un nouveau mode en rafale pour les accès à la mémoire afin de remplir une ligne de cache de 16 octets en cinq cycles de bus. Le 386 avait besoin de huit cycles de bus pour transférer la même quantité de données.
* Le pipeline étroitement couplé exécute une instruction simple comme ALU reg,reg or ALU reg,im à chaque cycle d’horloge (après une latence de plusieurs cycles). Le i386 avait besoin de deux cycles d’horloge.
* FPU intégré (désactivé ou absent sur les modèles SX) avec un bus local dédié ; associé à des algorithmes plus rapides sur un matériel plus complet que dans l’i387, il effectuait des calculs en virgule flottante plus rapidement que la combinaison i386/i387.
* Amélioration des performances du MMU.
* Nouvelles instructions : XADD, BSWAP, CMPXCHG, INVD, WBINVD, INVLPG.
Tout comme dans le i386, un modèle de mémoire linéaire de 4 Go a été mis en œuvre. Tous les registres du « sélecteur de segments » peuvent être définis sur une valeur neutre en mode protégé, ou sur zéro en mode réel, et en utilisant uniquement les « registres d'offset » de 32 bits (terminologie x86 pour les registres généraux du processeur utilisés comme registres d’adresses) comme une adresse virtuelle linéaire de 32 bits en contournant la logique de segmentation. Les adresses virtuelles sont alors normalement mappées sur des adresses physiques par le système de pagination, sauf lorsqu’il est désactivé (le mode réel n’a pas d’adresses virtuelles). Tout comme avec l'i386, le contournement de la segmentation de la mémoire peut améliorer considérablement les performances de certains systèmes d’exploitation et applications.
Sur une carte mère de PC typique, quatre SIMM à 30 broches (8 bits) appariés ou un SIMM à 72 broches (32 bits) par banque étaient nécessaires pour s’adapter au bus de données 32 bits de l'i486. Le bus d’adresses utilisait 30 bits (A31.. A2) complété par quatre broches de sélection d’octets (au lieu de A0, A1) pour permettre toute sélection de 8/16/32 bits. Cela signifiait que la limite de la mémoire physique directement adressable était également de 4 gigaoctets (2$^{30}$ mots de 32 bits = 2$^{32}$ mots de 8 bits).

## Galerie

* Intel 80486DX2 66 MHz
* Intel 80486DX2 Overdrive
* Intel 486DX2 50 MHz @ 3,3 V (cache 8 ko). Cette puce, basée sur la microarchitecture 80486, disposait d'un doubleur de fréquence d'horloge fonctionnant à 50 MHz. Elle comprend l'unité de calcul en virgule flottante.