Patricia Renault UPMC 2005/2006 UE MAREP Cours 4 : Structuration d’un programme assembleur et exécution d’un programme binaire Patricia Renault UPMC 2005/2006
Plan Description de la mémoire Taxonomie des programmes Exécution séquentielle d’un programme binaire Ecriture et exécution de programmes assembleur MIPS sur le simulateur SiMips
Plan Description de la mémoire Taxonomie des programmes Uniformité de la mémoire Structuration de la mémoire Taxonomie des programmes Exécution séquentielle d’un programme binaire Ecriture et exécution de programmes assembleur MIPS sur le simulateur SiMips
Uniformité de la mémoire Modélisation Tableau de mot de 4 octets Adressable en octets Rôle Stocke sous forme de suite d’octet ce qui est nécessaire au bon fonctionnement d’un ordinateur et à l’exécution d’un programme Uniformité Cette uniformité confère à l’ordinateur de Van Neumann son universalité
Structuration de la mémoire Mémoire structurée en 2 zones distinctes : la zone réservée aux utilisateurs, à laquelle on peut accéder sans restriction (il n’est pas nécessaire d’être en mode “ superviseur ”). la zone réservée au système d’exploitation, à laquelle on ne peut accéder que par des instructions spéciales utilisables uniquement en mode “ superviseur ”. En MIPS, les 2 zones sont distinguées par leur adresses : entre 0x0000 0000 et 0x7FFF FFFF zone utilisateur entre 0x8000 0000 et 0xFFFF FFFF zone système
Structuration de la mémoire Différents types d’information d’un programme regroupé dans des segments (espace d’adressage contigu) Chaque programme dispose de trois segments : Segment de données, variables globales du programme, Segment de code, instructions du programme en langage machine, Segment de pile, permettant d’exécuter des programmes contenant des sous-programmes, et stockant le contexte d’exécution du sous-programme, ses paramètres d’appel ainsi que ses variables locales. En MIPS, les directives .Data, .Text et .Stack permettent de préciser le contenu et la taille des segments de données, de pile et de code.
Plan Description de la mémoire Taxonomie des programmes Différents niveaux de programmation Exemple : Binaire, binaire désassemblé, langage d’assemblage Exemple : C, langage d’assemblage, binaire désassemblé, binaire Exécution séquentielle d’un programme binaire Ecriture et exécution de programmes assembleur MIPS sur le simulateur SiMips
Différents niveaux de programmation Programme binaire Programme en langage d’assemblage Programme en langage de plus haut niveau
Différents niveaux de programmation Programme binaire : Niveau de représentation compréhensible pour le processeur. Programme composé d’une suite d’instructions du jeu d’instructions du processeur, codées en binaire. Programme en langage d’assemblage : Niveau plus abstrait, instructions définies dans le jeu d’instructions du processeur représentées de façon symbolique Elles possèdent un mnémonique et une désignation abstraite des opérandes (mais ces opérandes sont les registres utilisateur du processeur, où des cases mémoire), Elles s’affranchissent de l’adresse d’implantation d’autres instructions en utilisant des étiquettes
Différents niveaux de programmation Programme en langage de plus haut niveau (C, Ada) : Niveau encore plus abstrait. Les instructions sont celles du langage de haut niveau, indépendamment du jeu d’instructions de la machine sur laquelle le programme s’exécutera. Ces langages permettent : La définition de types d’objets structurés, La définition de variables nommées, utilisables directement dans les instructions, Des mécanismes de structuration des traitements (structures de contrôle, sous-programme, paquetage …) Des mécanismes de traitements des erreurs (exceptions pour Ada)
Différents niveaux de programmation En règle générale, un programme complexe est écrit dans un langage de haut niveau, puis il est compilé en langage machine. La compilation comprend deux phases : la traduction des instructions de haut niveau en langage machine. la résolution des adresses ; les étiquettes sont converties en adresses relatives par rapport au début de la zone dans laquelle elles sont implantées (code translatable), ou bien en adresse absolue (alors le programme doit être implanté à une adresse fixe en mémoire). Remarque : il existe d’autres mécanismes d’exécution d’un programme de haut niveau, notamment l’interprétation.
Exemple : Binaire, binaire désassemblé, langage d’assemblage
Exemple : C, langage d’assemblage, binaire désassemblé, binaire Programme C : int var1 = 0x1234567, var2 = 0x89ABCDEF; int var3; main(){ var3 = var1 + var2; exit(0); }
Exemple : C, langage d’assemblage, binaire désassemblé, binaire Programme assembleur équivalent : .data # variables globales var1 : .word 0x01234567 var2 : .word 0x89ABCDEFF var3 : .word .stack # zone zone de pile (vide) .text # zone d'instructions __start : # point d'entree est __start lui $4, var1 >> 16 # recupere ad de var1 ori $4, $4, var1 & 0xFFFF # dans $4 lw $2, ($4) # $2 contient 01234567
Exemple : C, langage d’assemblage, binaire désassemblé, binaire lui $4, var2 >> 16 # recupere ad de var2 ori $4, $4, var2 & 0xFFFF # dans $4 lw $3, ($4) # $3 contient 89ABCDEF addu $4, $3, $2 # $4 contient 8ACF1356 lui $5, var3 >> 16 # recupere ad de var3 ori $5, $5, var3 & 0xFFFF # dans $5 sw $4, ($5) # resultat dans var3 ori $2, $0, 10 syscall # fin
Exemple : C, langage d’assemblage, binaire désassemblé, binaire Programme binaire équivalent (étiquettes var1, var2 et var3 remplacées par les adresses d’implantation des variables aux adresses 0x1000 0000, 0x1000 0004 et 0x1000 0008):
Plan Description de la mémoire Taxonomie des programmes Exécution séquentielle d’un programme binaire Cycle d’exécution d’une instruction Exemple Ecriture et exécution de programmes assembleur MIPS sur le simulateur SiMips
Cycle d’exécution d’une instruction Exécution en plusieurs étapes : Chercher l’instruction (adresse dans PC) Décoder l’instruction Exécuter l’instruction Déterminer l’adresse de la prochaine instruction
Cycle d’exécution d’une instruction P C R A D H I L O T CSTE DATA IN DATA OUT ADRESSE Y X RES MIPS - CHEMIN DE DONNEES U (i)
Cycle d’exécution d’une instruction Le chemin de données fait apparaître les registres : IR : Instruction Register. C’est là qu’est placée l’instruction à décoder (en provenance du bus de données DATA IN, dans l’étape Chercher Instruction). DT : Data Transfer. C’est là qu’est rangée la donnée (en provenance du bus de données DATA IN, dans l’étape Exécuter - Chercher les données). AD : Address. Il contient les adresses à placer sur le bus d’adresses pour les transferts avec la mémoire. C’est également un registre qui peut stocker des résultats intermédiaires.
Exemple Instruction : addu $4,$3,$2, de codage 0x00622021, implantée à l’adresse 0x4000 0018 Chercher l’instruction : PC = 0x4000 0018. Chargement de l’adresse 0x4000 0018 sur le bus d’adresse avec la commande de lecture. Récupérer le mot 0x00622021 sur DATA IN et le ranger dans IR. Décoder l’instruction. Contenu de IR : 0x00622021 => addition, avec registres source $3 et $2, et registre destination $4. Exécuter l’instruction. On calcule alors $2 + 0 dans AD, puis AD + $3, la sortie de l’ALU est alors stockée dans $4. Sélection de l’instruction suivante : Calcul PC + 4 (PC sur l’entrée X et constante 4 sur l’entrée Y), résultat dans PC.
Plan Description de la mémoire Taxonomie des programmes Exécution séquentielle d’un programme binaire Ecriture et exécution de programmes assembleur MIPS sur le simulateur SiMips Comment ca marche ? Simulateur SiMips
Comment ca marche ? Ecriture de programme assembleur via votre éditeur de texte préféré Sauvegarde des fichiers assembleurs avec l’extension .s Lancement de Simips dans votre terminal (simips &) Génération du programme binaire désassemblé (.a) Attention aux erreurs de syntaxes !!! Chargement du programme binaire désassemblé Exécution du programme
Simulateur SiMips