Introduction à l'architecture x86
L'architecture x86 est l'une des plus répandues dans le monde des ordinateurs personnels. Elle a été créée en 1978 et a évolué de 16 bits à 64 bits, tout en conservant une compatibilité descendante remarquable.
Les composants fondamentaux du processeur
Un processeur, ou CPU, est un circuit qui lit, décode, exécute les opérations et gère les entrées/sorties. Parmi ses composants principaux figurent l'ALU (unité arithmétique et logique) et les registres, qui stockent les données internes du CPU.
Registres et leurs tailles
Les registres sont classés selon la largeur de leurs mots :
- AX – registre de 16 bits (première génération).
- EAX – registre de 32 bits, extension d'AX.
- RAX – registre de 64 bits, équivalent d'EAX en mode long.
- RIP – compteur d'instructions en mode 64 bits, remplaçant EIP en mode protégé.
- ESP / RSP – pointeur de pile, dépend du mode d'adressage.
- EIP – compteur d'instructions en mode 32 bits.
Contrairement à une idée répandue, le jeu de registres x86 ne compte pas plus de 100 registres ; il est peu nombreux mais très rapide.
Évolution historique
Les jalons majeurs de l'architecture x86 sont :
- 1978 – création du premier processeur x86, architecture 16 bits.
- 1985 – passage à 32 bits.
- 2003 – introduction du mode 64 bits.
Cette progression a permis d'augmenter la capacité d'adressage mémoire, passant de 1 MiB en Real mode à jusqu’à 1 GiB en Protected mode, puis bien au‑delà en mode long.
Modes d'exécution
Le processeur x86 démarre en Real mode, un mode de 16 bits limité à 1 MiB de mémoire et sans protection. Le Protected mode offre une protection mémoire et un espace d'adressage étendu (jusqu’à 1 GiB). En 64 bits, le Long mode utilise le registre RIP comme compteur d'instructions.
Compatibilité descendante
Une des forces majeures du x86 est sa compatibilité descendante. Un programme écrit en 1978 fonctionne toujours sur un processeur moderne de 2023, grâce à la continuité de l'ensemble d'instructions.
Instructions de base et opérandes
Les instructions x86 manipulent des opérandes qui peuvent être des registres, des constantes ou des adresses mémoire. Voici quelques exemples illustratifs :
- mov eax, 0x14 – l'opérande source est 0x14.
- mov ax, bx – bx est l'opérande source.
- add al, bl – ajoute le contenu de bl à al.
Il est important de retenir que l'instruction MOV ne modifie jamais le registre source, et que l'opérande de gauche doit toujours être un registre lorsqu'il s'agit d'une instruction d'arithmétique comme ADD.
Opérations arithmétiques avancées
Les instructions MUL et DIV utilisent plusieurs registres pour leurs résultats :
- Le produit de MUL est stocké dans EDX:EAX (64 bits répartis sur deux registres).
- Après DIV, le quotient se trouve dans EAX et le reste dans EDX.
Opérations logiques
L'instruction NOT inverse tous les bits d'un registre. L'opération OR est représentée par le symbole | et est vraie lorsqu'au moins un des bits est à 1.
Représentation du code machine
Le code machine est généralement affiché en hexadécimal. Un octet peut être noté sous la forme 0xAA, où la base 16 facilite la lecture des valeurs binaires.
Exemples de manipulation de sous‑registres
Considérons la valeur 0xDEADBEEF stockée dans EAX. Les 16 bits de poids faible correspondent à AX = 0xBEEF. Le sous‑registre AH contient les bits de poids fort de AX, soit 0xBE, et non 0xEF comme on pourrait le supposer.
Récapitulatif des points clés
| Concept | Valeur / Description |
|---|---|
| Année de création du x86 | 1978 |
| Passage à 32 bits | 1985 |
| Introduction du mode 64 bits | 2003 |
| Registre accumulateur 64 bits | RAX |
| Compteur d'instructions 64 bits | RIP |
| Mode de démarrage | Real |
| Compatibilité descendante | Oui |
| Affichage du code machine | Hexadécimal |
| Instruction logique OR | Symbolisé par | |
Ce cours fournit les bases essentielles pour appréhender l'architecture x86, ses registres, ses modes d'exécution et ses instructions fondamentales. Maîtriser ces concepts permet de lire, analyser et écrire du code assembleur efficace sur les plateformes x86 modernes.


