Extrait du support de cours initiation à l’assembleur
1. Introduction
Pour mieux comprendre la structure interne d’un ordinateur, nous aborderons la langage d’assemblage d’un processeur contemporain, le Pentium III d’Intel. Le but du cours n’est donc pas de faire de vous des programmeurs en assembleur.
Qu’est-ce que l’assembleur ou le langage d’assemblage ? Pour obtenir une réponse à cette question, nous vous recommandons de lire à ce stade-ci le chapitre 13 du volume de Zanella et Ligier.
Nous utilisons pour ce cours l’assembleur Masm32 de Microsoft disponible gratuitement sur le Web à l’adresse suivante :
http:;www.pbq.com.au/home/hutch/masm.htm.
Comme débogueur, nous recommandons le Enhanced Debugger d’Intel, également disponible gratuitement à l’adresse suivante :
http:;developer.intel.com/vtune/compilers/cpp/demo.htm.
Il est fourni avec le compilateur C/C++ 4.5 que vous pouvez utiliser avec Visual Studio de Microsoft si le cœur vous en dit.
2. Architecture du Pentium III
2.1 Historique
L’histoire de la famille 80×86 d’Intel commence dans les années 70 avec le 8080, un processeur de 8 bits avec un bus d’adresses de 16 bits, qui pouvait adresser un total de 64 Ko.
Vers 1980, le 8086 et le 8088 font leur apparition, ce dernier avec le premier PC d’IBM.
Ce sont des processeurs de 16 bits avec un bus d ’adresses de 20 bits, qui avaient une capacité d ’adressage de 1 Mo. Le 8088 diffère du 8086 par la largeur du bus de données externe qui est de 16 bits dans le 8086 et de 8 bits dans le 8088.
Toutefois, même si le bus d’adresses était de 20 bits, les registres internes d’adresses étaient toujours de 16 bits pour assurer la compatibilité avec le 8080. Comment donc accéder au reste de la mémoire? Toute la complexité des processeurs Intel vient de la solution adoptée à cette époque pour régler ce problème.
On décida que l’adresse serait constituée des 16 bits des registres internes ajoutée à 16 fois le contenu d’un de quatre registres appelés registres de segment. Ces quatre registres étaient CS (Code Segment), DS (Data Segment), SS (Stack Segment) et ES (Extra Segment).
2.2 Registres d’entiers
Pour l’instant, nous abordons que la partie visible au programmeur qui travaille en mode utilisateur. Nous aborderons l’architecture du Pentium II plus en détail au chapitre X.Un registreest un contenant dans lequel on peut placer des motifs de bits de 8, 16 ou 32 bits. On peut appeler un registre par son nom et effectuer des opérations en utilisant les instructions machine. Par exemple, addeax, 4 additionne 4 au contenu du registre eax et place le résultat dans eax. Dans ce processeur, un motif de 8 bits s’appelle un octet (byte), un motif de 16 bits s’appelle un mot et un motif de 32 bits, un double mot.
2.3 Registres de virgule flottante
Pour l’exécution d’instructions de virgule flottante, le Pentium possède huit registres de données de 80 bits, un registre de contrôle, un registre d’état et divers autres registres.
2.4 Registres MMX
Ces mêmes 8 registres peuvent servir comme registres de 64 bits pour la programmation multimédia. On les appelle alors mm0 à mm7.
2.5 Registres SIMD
Dans le Pentium III, les 8 registres de virgule flottante ont été étendus à 128 bits. Ils s’appellent alors xmm0 à xmm7. Ils peuvent contenir quatre nombres de virgule flottante de simple précision ou deux nombres de virgule flottante de double précision qu’on traite simultanément.
Mentionnons en passant que notre assembleur Masm32 supporte la programmation MMX mais pas encore la programmation SIMD du Pentium III.
………
Support de cours initiation à l’assembleur (316 KO) (Cours PDF)