Programmation Assembleur x86/Introduction
Un livre de Wikibooks.
| Programmation Assembleur x86 |
[modifier] Les processeurs x86
Les processeurs de la famille x86 comptent approximativement deux décennies de domination sur l'univers de l'ordinateur personnel — on dit maintenant aussi ordinateur familial, sans doute le public concerné a-t-il évolué. Le Pentium 4TM, par exemple, est un x86.
En réalité, un x86 est un processeur compatible avec son plus lointain ancêtre : le 8086 créé par IntelTM en 1978. Il va de soi que la compatibilité n'est assurée que dans un sens. Autant un programme écrit en assembleur pour fonctionner sur un 8086 a toutes les chances de fonctionner sur un de ses descendants du 21ème siècle, autant l'inverse est très peu probable, à moins que son programmeur soit un grand nostalgique et ait par hasard retrouvé sous un meuble une disquette portant un assembleur de l'époque comme MASM.
La famille des x86 est divisée en plusieurs générations. Le 8086 est un processeur 16-bits muni d'un bus d'adressage 20-bits. Le 8088, construit à peu près en même temps que le 8086, est un processeur moins cher, qui n'a qu'un bus de données 8-bits, bien que son fonctionnement interne soit totalement identique à celui du 8086.
Le 8086, bien que très compétitif à sa création, commence à montrer ses lacunes vers le milieu des années 80. Ses deux principales lacunes sont : sa limitation à 1 Mo de mémoire système (les 20 bits d'adressage), et l'absence totale des mécanismes de protection de la mémoire, ce qui limite le développement de systèmes d'exploitation multi-tâches — ceux-ci se sont en réalité développés bien plus tard en ce qui concerne les PC : Linux apparaît en 1991.
Le 80286 a donc remplacé le 8086, et son apparition marque le début d'une ère plus complexe, puisqu'à partir d'ici, les x86 ont plusieurs modes d'exécution. Tous les successeurs du 80286 comportent un mode réel ou mode d'adressage réel. Lorsqu'un x86 fonctionne en mode réel, il se comporte comme un 8086, c'est-à-dire que l'accès à la mémoire système se fait de manière très rudimentaire : un registre de segment contient l'adresse physique du segment mémoire qui nous intéresse, et un registre pointeur contient une adresse à l'intérieur du segment. De plus, son jeu d'instructions est celui du 8086. Le 80286 introduit le mode protégé. Un registre de segment ne contient alors plus une adresse physique marquant le début du segment, mais un sélecteur de segment. Un sélecteur de segment est constitué d'un numéro de descripteur et d'un certain nombre d'indicateurs. Le processeur va alors rechercher le descripteur de segment correspondant dans une table, et celui-ci indique, entre autres, l'adresse physique (24 bits cette fois) de début du segment. Le 80286 contient aussi les rudiments du système d'adressage actuel par plages de mémoire virtuelle.
Le 80386 est le premier processeur x86 32-bits. Il offre de plus un système de mémoire virtuelle complet.
Le 80486 introduit de nouvelles instructions de calculs sur virgules flottantes.
L'époque qui suit est l'époque des PentiumTM, des CeleronTM, des AthlonTM, etc. qui se différencient de leurs prédécesseurs par différentes optimisations, en particulier, le traitement en simultané de deux instructions consécutives, ainsi que différentes nouvelles instructions dont les extensions MMX, SSE et 3Dnow.
L'Opteron et l'Athlon 64 d'AMD, ainsi que le Xeon 64 bits d'Intel utilisent un jeu d'instructions 64 bits.
[modifier] Marques déposées
- Les noms des marques déposées par leurs détenteurs respectifs.
[modifier] Liens web
http://www.intel.com/products/processor/manuals/ - Les manuels en anglais des Code Op