Plan du cours 1 2 3 4 5 6 7 8 9 10 11 12 Histoire de l’ordinateur Présentation générale Représentation interne des informations Encodage de l’information Circuits logiques Composants électroniques Mémoires Unité centrale de traitement Superordinateurs et microprocesseurs Entrées / sorties Assembleur Introduction au langage MIPS Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 237 / 294 De quoi allons-nous parler et quel chemin allons nous suivre ? Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 238 / 294 Objectifs du chapitre 1 Manipuler le language de programmation le plus bas niveau qu’offre la machine. 2 Utiliser des jeux d’instructions pour écrire des mini-programmes. 3 Comprendre le mécanismes d’appel de procédure (sous-programme) et le fonctionnement de la pile et du tas. 4 Percevoir les principes de programmation universel (qq soit le language). Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 239 / 294 Pourquoi ? [Strandth & Durand, 2005] Le rôle d’un informaticien n’est pas de concevoir des architectures, en revanche il a besoin d’un modèle de fonctionnement de l’ordinateur qui lui donne une bonne idée de la performance de son programme et de l’impact que chaque modification du programme aura sur sa performance. Assimiler un tel modèle suppose un certain nombre de connaissances sur le fonctionnement d’un ordinateur, notamment le mécanisme d’appel de fonction, la transmission des paramètres d’une fonction à l’autre, l’allocation ou la libération d’espace mémoire, etc. ⇒ Apprendre l’architecture des ordinateurs et un langage machine, permet cela. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 240 / 294 Niveaux de programmation Langage machine Le programmeur a le choix entre différents langages (assembleur, Ada, Java, C, etc.). La machine ne comprends que le langage machine (i.e., instructions binaires) ! L’assembleur (i.e., langage d’assemblage) est le premier langage non binaire accessible au programmeur ; Code mnémoniques et symboles ; L’assembleur (i.e., programme traducteur) converti le langage d’assemblage en langage machine ; Permet d’exploiter au maximum les ressources de la machine ; Dépend de la machine. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 241 / 294 Traduction et interprétation Interprétation Conversion et exécution d’un programme en une seule étape : les instructions sont lues les unes après les autres et sont converties immédiatement en langage machine. Pas de programme objet intermédiaire ; Répétition du travail de traduction à chaque exécution (⇒ phase de développement). Traduction Génération d’un programme équivalent au programme source mais codé dans la langage binaire de l’ordinateur. Le programme obtenu en langage machine doit être ensuite chargé pour pouvoir être exécuté. Traduction réalisée une seule fois ; Exécution rapide et efficace (⇒ phase d’exploitation) ; 2 types : les assembleurs et les compilateurs. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 242 / 294 Traduction de langage évolué Programme C Compilateur prog. en langage d’assemblage prog. en langage machine Assembleur chargeur Mémoire Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 243 / 294 Langage d’assemblage Utilisés par les spécialistes ⇒ optimisation ; Pour valoriser l’architecture spécifique de la machine ; Diagnostic d’erreurs (i.e., examen du contenu de la mémoire) ; L’assembleur est une variante symbolique du langage machine ⇒ même jeu d’instructions ; Propre à chaque type de machine ; Permet d’accéder aux ressources de la machine (i.e., registres) ; Permet d’accéder aux facilités de traitement (e.g., décalage) ; Le programmeur peut utiliser : Codes mnémoniques (jeu d’instruction) ; Étiquettes (adresse symboliques) ; Littéraux (constante numériques) ; Directives (pseudo instruction). Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 244 / 294 Instruction en assembleur Structure d’une instruction étiquette code opération (mnémonique) opérandes + commentaires Exemples d’instructions donnees1 : adresse1 : DS MOVE ADD JUMP Clement Jonquet (Polytech’ Montpellier) 1 A1,donnees1 A1,A2 adresse2 # # # # Architecture des ordinateurs variable avec 1 mot mémoire transfère contenu A1+A2, résultat dans A1 saut inconditionnel IG3 2013-2014 245 / 294 Opérandes et étiquettes L’assembleur permet de donner des noms alphanumériques aux variables et aux étiquettes. ⇒ effectuer un branchement. L’assembleur permet de ne pas donner l’adresse binaire mais un nom aux opérandes. Chaque registre possède un nom reconnu par l’assembleur. Exemples d’opérandes et d’étiquettes tab : dix : boucle : DS DC MOVE MOVE JUMP 1 10 dix,A1 A2,tab boucle Clement Jonquet (Polytech’ Montpellier) # # # # # variable avec 1 mot mémoire constante 10 A1← valeur(dix) tab← valeur(A2) saut inconditionnel Architecture des ordinateurs IG3 2013-2014 246 / 294 Macro-instruction (1/2) Utiliser des directives pour isoler la séquence d’instruction que l’on veut éviter de répéter et lui attribuer un nom symbolique pour lui faire référence. L’assembleur remplace par la séquence correspondante. Étend le jeu d’instruction ; Programme plus simple et plus facile a modifier ; Calcul du cube d’un nombre MACRO MOVE MOVE MUL MUL MOVE ENDM CUBE (valeur, valeurcube) valeur,D1 valeur,D2 D1,D2 D1,D2 D2,valeurcube Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs #D2 := D1×D2 IG3 2013-2014 247 / 294 Macro-instruction (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 248 / 294 Sous-programme (1/2) Définis comme les macros, mais leurs instructions constituent une entité bien séparée du programme principal. Cette séparation existe toujours après la traduction Présent une seule fois en mémoire ; Branchements traités lors de l’exécution ; Abstraction. Peut être utilisé par plusieurs programmes. Attention : Connaı̂tre les adresses des sous-programmes ; Sauvegarder l’adresse de retour ; Sauvegarder l’état de la machine (e.g., registre utilisés par le sous-programme). Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 249 / 294 Sous-programme (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 250 / 294 Passage de paramètres avec une pile [Meynard00] Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 251 / 294 Passage de paramètres Un paramètre est une variable dont le nom est connu mais dont le contenu n’est précisé qu’au moment de l’exécution. C’est le passage des paramètres formels aux paramètres effectifs : fais lors de la traduction pour les macros (i.e., expansion) ; fais lors de l’exécution pour les sous-programmes. Passage par valeur Recopier la valeur des paramètres dans une zone connue des sous-programmes (e.g., mémoire ou registre). Le sous-programme ne travaille que sur une copie des paramètres (⇒ protection) Passage par référence Transmettre au sous-programme les adresses des paramètres. Le sous-programme travaille donc sur les données du programme appelant. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 252 / 294 Exemple de passage de paramètres [Meynard00] (1/2) La fonction mult est un sous-programme récursif à 1 paramètre de retour réalisant la multiplication de 2 entiers positifs par additions successives. entierpositif mult(entierpositif x, entierpositif y) entierpositif i ; // inutile dans l’algo ! si x=0 alors retourne 0 ; sinon début i=y ; retourne mult(x-1,i)+y ; fin Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 253 / 294 Exemple de passage de paramètres [Meynard00] (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 254 / 294 Sauvegarde de l’état de la machine Avant l’appel d’un sous-programme Executer un sous-programme consiste à passer le contrôle du processeur à ce sous-programme. Il faut donc sauvegarder en mémoire centrale l’état des registres pour permettre d’executer un sous-programme (utilisant éventuellement ces registres) et revenir ensuite à l’execution du premier. Registres sauvegardés par l’appelant ; Registres sauvegardés par l’appelé ; Lors des appels récursifs (sous-programme qui se rappelle lui-même) on utilise la pile pour sauvegarder l’état de la machine. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 255 / 294 Fonctionnement de l’assembleur Traduction et passes La traduction nécessite généralement 2 passes à cause des références en avant i.e., référence à un symbole/étiquette non encore connus. Exemple de références en avant étiquette Boucle : code op. ---JUMP ------- opérande commentaire instruction quelconque Boucle La 1ère passe construit la table des symboles (nom, type, adresse) et alloue une adresse à chaque instruction (commençant à 0) ; La 1ère passe construit la table des références extérieures (i.e., appels à des sous-programmes) ; La 2ème passe génère les instructions en code machine. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 256 / 294 Développement d’un programme Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 257 / 294 Éditeur de liens Combine plusieurs programmes en langage machine en un seul programme complet et exécutable. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 258 / 294 Chargeur Charge le programme complet obtenu par l’éditeur de lien en mémoire centrale. Ajuste les adresses finales des instructions à l’aide de l’emplacement de chargement ; L’assembleur aide le chargeur en lu indiquant quels contenus d’instruction doit également être modifié ; Plus simple : utiliser un registre de base lors de l’exécution ! La question de l’amorçage Le chargeur est un programme indispensable pour charger les programmes en mémoire centrale et ainsi pouvoir le exécuter... mais qui charge le chargeur ? bootstrapping sur bande ou ROM ou disque spécial. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 259 / 294