Jeu d instructions et modes d adressage MIPS

Documents pareils
Rappels d architecture

Compilation (INF 564)

CM2 L architecture MIPS32

Jeu d instructions NIOS II

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs

Architecture des ordinateurs

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Gestion mémoire et Représentation intermédiaire

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

ASR1 TD7 : Un microprocesseur RISC 16 bits

Structure d un programme

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Résumé Génération de code Le code intermédiaire

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Traduction des Langages : Le Compilateur Micro Java

Programmation assembleur : aperçu

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Exécution des instructions machine

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

UE Programmation Impérative Licence 2ème Année

Initiation à LabView : Les exemples d applications :

Claude Delannoy. 3 e édition C++

TP, première séquence d exercices.

Java Licence Professionnelle CISII,

Initiation à l algorithmique

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Qualité du logiciel: Méthodes de test

Plan du cours. Historique du langage Nouveautés de Java 7

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Ordinateurs, Structure et Applications

Algorithmique et Programmation, IMA

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Conventions d écriture et outils de mise au point

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Chapitre VI- La validation de la composition.

Utilisation d objets : String et ArrayList

PIC : COURS ASSEMBLEUR

Introduction au langage C

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

TP 1. Prise en main du langage Python

as Architecture des Systèmes d Information

Représentation d un entier en base b

Présentation du langage et premières fonctions

Licence Sciences et Technologies Examen janvier 2010

Initiation à la programmation en Python

Cours 1 : La compilation

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Fonctionnement et performance des processeurs

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Programmation en langage C

Architecture : Circuits numériques et éléments d architecture

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours Informatique Master STEP

INF 321 : mémento de la syntaxe de Java

Microprocesseur + Logiciel

TD3: tableaux avancées, première classe et chaînes

Cours d Algorithmique et de Langage C v 3.0

Rappels Entrées -Sorties

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

La mémoire. Un ordinateur. L'octet. Le bit

Bases de programmation. Cours 5. Structurer les données

IFT2880 Organisation des ordinateurs et systèmes

La JVM. La machine virtuelle Java. La JVM. La JVM

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Logiciel de base. Première année ENSIMAG

Problèmes liés à la concurrence

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Cours de Programmation Impérative: Zones de mémoires et pointeurs

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Partie 7 : Gestion de la mémoire

Architecture des ordinateurs Introduction à l informatique

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

//////////////////////////////////////////////////////////////////// Administration bases de données

Introduction à MATLAB R

Cours 14 Les fichiers

4. Groupement d objets

Programmer en JAVA. par Tama

La programmation des PIC en C. Les fonctions, les interruptions.

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

SGM. Master S.T.S. mention informatique, première année. Isabelle Puaut. Septembre Université de Rennes I - IRISA

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Le langage C. Introduction, guide de reference

Plan global Outils de développement et compilation. Ce que l on veut éviter. Plan. Git : gestion de code source et versionnement.

UE C avancé cours 1: introduction et révisions

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Transcription:

Jeu d instructions et modes d adressage MIPS Vincent Risch, mai 2008, révision mai 2014 I.U.T., Aix-Marseille Université Jeu d instructions et modes d adressage MIPS p. 1

MIPS : Introduction Architecture (0,3) typique d une machine RISC Jeu d instructions et modes d adressage MIPS p. 2

MIPS : Introduction Architecture (0,3) typique d une machine RISC Développé fin des années 90, à partir des travaux de John L. Hennessy Jeu d instructions et modes d adressage MIPS p. 2

MIPS : Introduction Architecture (0,3) typique d une machine RISC Développé fin des années 90, à partir des travaux de John L. Hennessy Implémentations actuelles : MIPS32 et MIPS64 Jeu d instructions et modes d adressage MIPS p. 2

32 registres Registres généraux : Nom Numéro de registre Usage $zero 0 Dédié à la constante 0 $v0 $v1 2 3 Dédié à l évaluation des expressions $a0 $a3 4 7 Stockage des arguments lors des appels de fonctions $t0 $t7 8 15 Registres temporaires $s0 $s7 16 23 Registres sauvegardés $t8 $t9 24 25 Registres temporaires supplémentaires $gp 28 Pointeur global $sp 29 Pointeur de pile $fp 30 Pointeur de frame $ra 31 Pointeur d adresse retour Jeu d instructions et modes d adressage MIPS p. 3

32 registres Registres généraux : Nom Numéro de registre Usage $zero 0 Dédié à la constante 0 $v0 $v1 2 3 Dédié à l évaluation des expressions $a0 $a3 4 7 Stockage des arguments lors des appels de fonctions $t0 $t7 8 15 Registres temporaires $s0 $s7 16 23 Registres sauvegardés $t8 $t9 24 25 Registres temporaires supplémentaires $gp 28 Pointeur global $sp 29 Pointeur de pile $fp 30 Pointeur de frame $ra 31 Pointeur d adresse retour Registres réservés : Nom Numéro de registre Usage $at 1 Réservé à l assembleur $k0 $k1 26 27 Réservé au système d exploitation Jeu d instructions et modes d adressage MIPS p. 3

Formats d instruction Trois formats d instruction : Registre (type R) instructions UAL Jeu d instructions et modes d adressage MIPS p. 4

Formats d instruction Trois formats d instruction : Registre (type R) instructions UAL Immédiat (type I) instructions UAL Jeu d instructions et modes d adressage MIPS p. 4

Formats d instruction Trois formats d instruction : Registre (type R) instructions UAL Immédiat (type I) instructions UAL Saut (type J) ruptures de séquence Jeu d instructions et modes d adressage MIPS p. 4

Format R 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits op rs rt rd décal fonct 1. op : code opération 2. rs : registre opérande source 3. rt : registre opérande source 4. rd : registre opérande destination 5. décal : décalage 6. fonction : sélectionne la variante de l opération Jeu d instructions et modes d adressage MIPS p. 5

Format I 6 bits 5 bits 5 bits 16 bits op rs rt immédiat 1. op : code opération 2. rs : registre opérande source ou destination 3. rt : registre opérande source ou destination 4. immédiat : valeur immédiate Jeu d instructions et modes d adressage MIPS p. 6

Format J 6 bits op 26 bits adresse 1. op : code opération 2. adresse : adresse de saut Jeu d instructions et modes d adressage MIPS p. 7

Addition 1. mémonique : add 2. exemple : add $s1, $s2, $s3 3. signification : $s1 = $s2 + $s3 Jeu d instructions et modes d adressage MIPS p. 8

Addition immédiate 1. mémonique : addi 2. exemple : addi $s1, $s2, 100 3. signification : $s1 = $s2 + 100 Jeu d instructions et modes d adressage MIPS p. 9

Soustraction 1. mémonique : sub 2. exemple : sub $s1, $s2, $s3 3. signification : $s1 = $s2 - $s3 Jeu d instructions et modes d adressage MIPS p. 10

Opérations logiques 1. mémonique : and 2. exemple : and $s1, $s2, $s3 3. signification : $s1 = $s2 & $s3 1. mémonique : or 2. exemple : or $s1, $s2, $s3 3. signification : $s1 = $s2 $s3 1. mémonique : nor 2. exemple : nor $s1, $s2, $s3 3. signification : $s1 = ~($s2 $s3) Jeu d instructions et modes d adressage MIPS p. 11

Décalages 1. mémonique : sll 2. exemple : sll $s1, $s2, 10 3. signification : $s1 = $s2 «10 1. mémonique : srl 2. exemple : srl $s1, $s2, 10 3. signification : $s1 = $s2» 10 Le champs décalage comptient la valeur de décalage Jeu d instructions et modes d adressage MIPS p. 12

Chargement 1. mémonique : lw 2. exemple : lw $s1, 100($s2) 3. signification : $s1 = Mem[$s2 + 100] Jeu d instructions et modes d adressage MIPS p. 13

Rangement 1. mémonique : sw 2. exemple : sw $s1, 100($s2) 3. signification : Mem[$s2 + 100] = $s1 Jeu d instructions et modes d adressage MIPS p. 14

Offset mémoire L unité d adressage mémoire est l octet. Puisque instructions et données occupent 32 bits, tous les mots mémoire sont alignés sur des adresses multiples de quatre : 12 8 4 0 adresses mémoire Jeu d instructions et modes d adressage MIPS p. 15

Exemple Soit l instruction C : A[12]=h + A[8]; avec h associé au registre $s2, et l adresse de base de A rangée dans le registre $s3. Jeu d instructions et modes d adressage MIPS p. 16

Exemple Soit l instruction C : A[12]=h + A[8]; avec h associé au registre $s2, et l adresse de base de A rangée dans le registre $s3. lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 48($s3) # t0 <- A[8] # t0 <- h + A[8] # A[12] <- h + A[8] Jeu d instructions et modes d adressage MIPS p. 16

Comparaison 1. mémonique : slt Set on Less Than 2. exemple : slt $s1, $s2, $s3 3. signification : if ($s2 < $s3) $s1 = 1; else $s1 = 0; Jeu d instructions et modes d adressage MIPS p. 17

Comparaison immédiate 1. mémonique : slti 2. exemple : slti $s1, $s2, 100 3. signification : if ($s2 < 100) $s1 = 1; else $s1 = 0; Jeu d instructions et modes d adressage MIPS p. 18

Branchement conditionnel (=) 1. mémonique : beq Branch on EQual 2. exemple : beq $s1, $s2, Etiquette 3. signification : if ($s1 == $s2) goto Etiquette; Jeu d instructions et modes d adressage MIPS p. 19

Branchement conditionnel (!=) 1. mémonique : bne Branch on Not Equal 2. exemple : bne $s1, $s2, Etiquette 3. signification : if ($s1!= $s2) goto Etiquette; Jeu d instructions et modes d adressage MIPS p. 20

Branchement inconditionnel 1. mémonique : j Jump 2. exemple : j Etiquette 3. signification : goto Etiquette; Jeu d instructions et modes d adressage MIPS p. 21

Exemple Soit l instruction C : while (save[i] == k) i+=1; avec i et k associés au registres $s3 et $s5, et l adresse de base de save rangée dans le registre $s6. Jeu d instructions et modes d adressage MIPS p. 22

Exemple Soit l instruction C : while (save[i] == k) i+=1; avec i et k associés au registres $s3 et $s5, et l adresse de base de save rangée dans le registre $s6. Loop: sll $t1, $s3, 2 # t1 <- 4*i Jeu d instructions et modes d adressage MIPS p. 22

Exemple Soit l instruction C : while (save[i] == k) i+=1; avec i et k associés au registres $s3 et $s5, et l adresse de base de save rangée dans le registre $s6. Loop: sll $t1, $s3, 2 # t1 <- 4*i add $t1, $t1, $s6 # t1 <- adresse de save[i] Jeu d instructions et modes d adressage MIPS p. 22

Exemple Soit l instruction C : while (save[i] == k) i+=1; avec i et k associés au registres $s3 et $s5, et l adresse de base de save rangée dans le registre $s6. Loop: sll $t1, $s3, 2 # t1 <- 4*i add $t1, $t1, $s6 # t1 <- adresse de save[i] lw $t0, 0($t1) # t0 <- save[i] Jeu d instructions et modes d adressage MIPS p. 22

Exemple Soit l instruction C : while (save[i] == k) i+=1; avec i et k associés au registres $s3 et $s5, et l adresse de base de save rangée dans le registre $s6. Loop: sll $t1, $s3, 2 # t1 <- 4*i add $t1, $t1, $s6 # t1 <- adresse de save[i] lw $t0, 0($t1) # t0 <- save[i] bne $t0, $s5, Exit # goto Exit if save[i]!=k Exit: # sortie de boucle Jeu d instructions et modes d adressage MIPS p. 22

Exemple Soit l instruction C : while (save[i] == k) i+=1; avec i et k associés au registres $s3 et $s5, et l adresse de base de save rangée dans le registre $s6. Loop: sll $t1, $s3, 2 # t1 <- 4*i add $t1, $t1, $s6 # t1 <- adresse de save[i] lw $t0, 0($t1) # t0 <- save[i] bne $t0, $s5, Exit # goto Exit if save[i]!=k addi $s3, $s3, 1 # i += 1 j Loop # goto Loop Exit: # sortie de boucle Jeu d instructions et modes d adressage MIPS p. 22

Organisation de la mémoire Allocation mémoire $sp 7FFF FFFC 16 pile $gp 1000 8000 16 données dynamiques 1000 0000 16 données statiques PC 0040 0000 16 texte 0 16 réservé Jeu d instructions et modes d adressage MIPS p. 23

Organisation de la mémoire Allocation mémoire Pile des contextes $sp 7FFF FFFC 16 pile $gp 1000 8000 16 données dynamiques $fp... argument 6 argument 5 registres sauvegardés 1000 0000 16 données statiques PC 0040 0000 16 texte $sp variables locales 0 16 réservé Jeu d instructions et modes d adressage MIPS p. 23

Modes d adressage MIPS Immédiat : l opérande est une constante contenue dans l instruction Jeu d instructions et modes d adressage MIPS p. 24

Modes d adressage MIPS Immédiat : l opérande est une constante contenue dans l instruction Registre : l opérande est un registre Jeu d instructions et modes d adressage MIPS p. 24

Modes d adressage MIPS Immédiat : l opérande est une constante contenue dans l instruction Registre : l opérande est un registre Indexé : l opérande est à une adresse de base à laquelle est ajouté le contenu d un registre comme déplacement Jeu d instructions et modes d adressage MIPS p. 24

Modes d adressage MIPS Immédiat : l opérande est une constante contenue dans l instruction Registre : l opérande est un registre Indexé : l opérande est à une adresse de base à laquelle est ajouté le contenu d un registre comme déplacement Indexé sur le PC : l opérande est à une adresse à laquelle est ajouté le contenu du compteur de programme comme déplacement Jeu d instructions et modes d adressage MIPS p. 24

Modes d adressage MIPS Immédiat : l opérande est une constante contenue dans l instruction Registre : l opérande est un registre Indexé : l opérande est à une adresse de base à laquelle est ajouté le contenu d un registre comme déplacement Indexé sur le PC : l opérande est à une adresse à laquelle est ajouté le contenu du compteur de programme comme déplacement Pseudo-direct : saut obtenu par concaténation des 26 bits du champs adresse d une instruction j et des quatre bits de poids fort du PC Jeu d instructions et modes d adressage MIPS p. 24

Adressage immédiat L opérande est une constante contenue dans l instruction op rs rt immédiat Jeu d instructions et modes d adressage MIPS p. 25

Adressage registre L opérande est un registre op rs rt rd décal fonct registre Jeu d instructions et modes d adressage MIPS p. 26

Adressage indexé L opérande est à une adresse de base à laquelle est ajouté le contenu d un registre comme déplacement op rs rd adresse registre + octet 1/2-mot mot Jeu d instructions et modes d adressage MIPS p. 27

Adressage indexé sur le PC L opérande est à une adresse à laquelle est ajouté le contenu du compteur de programme comme déplacement op rs rd adresse PC + mot Jeu d instructions et modes d adressage MIPS p. 28

Adressage pseudo-direct Saut obtenu par concaténation des 26 bits du champs adresse d une instruction j et des quatre bits de poids fort du PC op adresse PC. mot Jeu d instructions et modes d adressage MIPS p. 29

Appels de fonction Six étapes : la fonction appelante place les paramètres données dans une zone accessible par la fonction appelée Jeu d instructions et modes d adressage MIPS p. 30

Appels de fonction Six étapes : la fonction appelante place les paramètres données dans une zone accessible par la fonction appelée elle transfère le contrôle à la fonction appelée Jeu d instructions et modes d adressage MIPS p. 30

Appels de fonction Six étapes : la fonction appelante place les paramètres données dans une zone accessible par la fonction appelée elle transfère le contrôle à la fonction appelée la fonction appelée acquiert les ressources mémoire nécessaires Jeu d instructions et modes d adressage MIPS p. 30

Appels de fonction Six étapes : la fonction appelante place les paramètres données dans une zone accessible par la fonction appelée elle transfère le contrôle à la fonction appelée la fonction appelée acquiert les ressources mémoire nécessaires le corps de la fonction appelée est exécuté Jeu d instructions et modes d adressage MIPS p. 30

Appels de fonction Six étapes : la fonction appelante place les paramètres données dans une zone accessible par la fonction appelée elle transfère le contrôle à la fonction appelée la fonction appelée acquiert les ressources mémoire nécessaires le corps de la fonction appelée est exécuté la fonction appelée place les paramètres résultats dans une zone accessible par la fonction appelante Jeu d instructions et modes d adressage MIPS p. 30

Appels de fonction Six étapes : la fonction appelante place les paramètres données dans une zone accessible par la fonction appelée elle transfère le contrôle à la fonction appelée la fonction appelée acquiert les ressources mémoire nécessaires le corps de la fonction appelée est exécuté la fonction appelée place les paramètres résultats dans une zone accessible par la fonction appelante elle rend le contrôle au point d appel de la fonction appelante Jeu d instructions et modes d adressage MIPS p. 30

Registres dédiés aux appels de fonction 1. $a0 $a3 : quatre registres dédiés au passage de paramètres 2. $v0 $v1 : deux registres dédiés au retour de résultats 3. $ra : registre-adresse de retour au point d appel, utilisé par l intruction jr 4. une instruction dédiée à l appel de fonction : jal 5. le registre de gestion de pile $sp pour le sauvegarde et la restauration de variables du programme appelant Jeu d instructions et modes d adressage MIPS p. 31

Appel de fonction 1. mémonique : jal Jump And Link 2. exemple : jal Etiquette 3. signification : $ra = PC + 4; goto Etiquette; Jeu d instructions et modes d adressage MIPS p. 32

Retour de fonction 1. mémonique : jr Jump Register 2. exemple : jr $ra 3. signification : goto $ra; Jeu d instructions et modes d adressage MIPS p. 33

Modèle général appelant-appelé appelant:... #... jal appelé # $ra=pc+4; goto appelé;... # adresse retour : PC+4 appelé:...... jr $ra retour à PC+4 Jeu d instructions et modes d adressage MIPS p. 34

Modèle général appelant-appelé appelant:... #... jal appelé # $ra=pc+4; goto appelé;... # adresse retour : PC+4 appelé:...... jr $ra retour à PC+4 Jeu d instructions et modes d adressage MIPS p. 34

Pile et registres supplémentaires 1. Tout registre de l appelant utilisé par la fonction appelée doit être sauvegardé à l entrée, et restauré au sortir par celle-ci. 2. La structure de donnée idéale est la pile : les valeurs des registres sont empilées à l entrée de la fonction, et dépilées à la sortie. 3. MIPS utilise le registre dédié $sp (Stack Pointer) 4. Pour des raisons historiques, la pile croît des adresses hautes vers les adresses basses. Jeu d instructions et modes d adressage MIPS p. 35

fonction_exemple/c int fonction exemple (int g, int h, int i, int j) { int f; f = (g+h)-(i+j); return f; } avec g, h, i, j associées aux registres $a0, $a1, $a2, $a3, f associée au registre $s0, la valeur de retour associée au registre $v0, et l adresse de retour au registre $ra Jeu d instructions et modes d adressage MIPS p. 36

Corps de la fonction_exemple/mips f = (g+h)-(i+j); va être compilé en : add $t0, $a0, $a1 # t0 <- g+h add $t1, $a2, $a3 # t1 <- i+j sub $s0, $t0, $t1 # f = $t0 - $t1 il faut préalablement sauvegarder les contenus des registres $s0, $t0, $t1 Jeu d instructions et modes d adressage MIPS p. 37

Sauvegarde des registres ( PUSH ) addi $sp, $sp, -12 sw $t1, 8($sp) sw $t0, 4($sp) sw $s0, 0($sp) # alloue l espace dans la pile # sauve $t1 dans la pile # sauve $t0 dans la pile # sauve $s0 dans la pile Jeu d instructions et modes d adressage MIPS p. 38

Passage des paramètres retours add $v0, $s0, $zero # renvoie f Transfert du registre $v0 vers $s0 Jeu d instructions et modes d adressage MIPS p. 39

Restauration des registres( POP ) lw $s0, 0($sp) lw $t0, 4($sp) lw $t1, 8($sp) addi $sp, $sp, 12 # restaure $s0 pour l appelant # restaure $t0 pour l appelant # restaure $t1 pour l appelant # rend l espace alloué dans la pile Jeu d instructions et modes d adressage MIPS p. 40

f_exemple f_exemple: addi $sp, $sp, -12 # alloue l espace dans la pile sw $t1, 8($sp) # sauve $t1 dans la pile sw $t0, 4($sp) # sauve $t0 dans la pile sw $s0, 0($sp) # sauve $s0 dans la pile add $t0, $a0, $a1 # t0 <- g+h add $t1, $a2, $a3 # t1 <- i+j sub $s0, $t0, $t1 # f = $t0 - $t1 add $v0, $s0, $zero # renvoie f lw $s0, 0($sp) # restaure $s0 pour l appelant lw $t0, 4($sp) # restaure $t0 pour l appelant lw $t1, 8($sp) # restaure $t1 pour l appelant addi $sp, $sp, 12 # rend l espace dans la pile jr $ra # retour à l appelant Jeu d instructions et modes d adressage MIPS p. 41

Conventions de programmation Registres : non sauvegardés à sauvegarder Jeu d instructions et modes d adressage MIPS p. 42

Conventions de programmation Registres : non sauvegardés $v0 $v1 $a0 $a3 $t0 $t9 à sauvegarder Jeu d instructions et modes d adressage MIPS p. 42

Conventions de programmation Registres : non sauvegardés à sauvegarder $v0 $v1 $s0 $s7 $a0 $a3 $gp $t0 $t9 $sp $fp $ra Jeu d instructions et modes d adressage MIPS p. 42

f_exemple (suite) f_exemple: addi $sp, $sp, -12 # alloue l espace dans la pile sw $t1, 8($sp) # sauve $t1 dans la pile sw $t0, 4($sp) # sauve $t0 dans la pile sw $s0, 0($sp) # sauve $s0 dans la pile add $t0, $a0, $a1 # t0 <- g+h add $t1, $a2, $a3 # t1 <- i+j sub $s0, $t0, $t1 # f = $t0 - $t1 add $v0, $s0, $zero # renvoie f lw $s0, 0($sp) # restaure $s0 pour l appelant lw $t0, 4($sp) # restaure $t0 pour l appelant lw $t1, 8($sp) # restaure $t1 pour l appelant addi $sp, $sp, 12 # rend l espace dans la pile jr $ra # retour à l appelant Jeu d instructions et modes d adressage MIPS p. 43

f_exemple (suite) f_exemple: addi $sp, $sp, -12 # alloue l espace dans la pile sw $t1, 8($sp) # sauve $t1 dans la pile sw $t0, 4($sp) # sauve $t0 dans la pile sw $s0, 0($sp) # sauve $s0 dans la pile add $t0, $a0, $a1 # t0 <- g+h add $t1, $a2, $a3 # t1 <- i+j sub $s0, $t0, $t1 # f = $t0 - $t1 add $v0, $s0, $zero # renvoie f lw $s0, 0($sp) # restaure $s0 pour l appelant lw $t0, 4($sp) # restaure $t0 pour l appelant lw $t1, 8($sp) # restaure $t1 pour l appelant addi $sp, $sp, -12 # rend l espace dans la pile jr $ra # retour à l appelant Jeu d instructions et modes d adressage MIPS p. 43

f_exemple (suite) f_exemple: addi $sp, $sp, -4 # alloue l espace dans la pile sw $s0, 0($sp) # sauve $s0 dans la pile add $t0, $a0, $a1 # t0 <- g+h add $t1, $a2, $a3 # t1 <- i+j sub $s0, $t0, $t1 # f = $t0 - $t1 add $v0, $s0, $zero # renvoie f lw $s0, 0($sp) # restaure $s0 pour l appelant addi $sp, $sp, 4 jr $ra # rend l espace dans la pile # retour à l appelant Jeu d instructions et modes d adressage MIPS p. 43

Deux cas à considérer Si la fonction appelée est terminale : Jeu d instructions et modes d adressage MIPS p. 44

Deux cas à considérer Si la fonction appelée est terminale : empiler $s0, $s1... utilisés Jeu d instructions et modes d adressage MIPS p. 44

Deux cas à considérer Si la fonction appelée est terminale : empiler $s0, $s1... utilisés non-terminale : Jeu d instructions et modes d adressage MIPS p. 44

Deux cas à considérer Si la fonction appelée est terminale : empiler $s0, $s1... utilisés non-terminale : empiler $ra Jeu d instructions et modes d adressage MIPS p. 44

Deux cas à considérer Si la fonction appelée est terminale : empiler $s0, $s1... utilisés non-terminale : empiler $ra empiler $a0, $a1,... utilisés Jeu d instructions et modes d adressage MIPS p. 44

Deux cas à considérer Si la fonction appelée est terminale : empiler $s0, $s1... utilisés non-terminale : empiler $ra empiler $a0, $a1,... utilisés empiler $s0, $s1... utilisés Jeu d instructions et modes d adressage MIPS p. 44

Deux cas à considérer Si la fonction appelée est terminale : empiler $s0, $s1... utilisés non-terminale : empiler $ra empiler $a0, $a1,... utilisés empiler $s0, $s1... utilisés Exemple important de fonction non-terminale : les fonctions récursives... Jeu d instructions et modes d adressage MIPS p. 44

fonction fact/c int fact (int n) { if (n<1) return 1; else return (n * fact(n-1)); } Le paramètre n est placé dans le registre $a0, la valeur de retour de la fonction dans le registre $v0. Jeu d instructions et modes d adressage MIPS p. 45

fact fact: addi $sp, $sp, -8 # alloue l espace dans la pile sw $ra, 4($sp) # empile l adresse de retour sw $a0, 0($sp) # empile l argument n slti $t0, $a0, 1 # test pour n < 1 beq $t0, $zero, recurs # if (n>=1) goto recurs; addi $v0, $zero, 1 # return 1; lw $a0, 0($sp) # dépile l argument n lw $ra, 4($sp) # dépile l adresse de retour addi $sp, $sp, 8 # pop des deux valeurs sauvées jr $ra # retour à l appelant recurs: addi $a0, $a0, -1 # n>=1: l argument reçoit n-1 jal fact # appel récursif lw $a0, 0($sp) # dépile l argument n lw $ra, 4($sp) # dépile l adresse de retour addi $sp, $sp, 8 # rend l espace dans la pile mul $v0, $a0, $v0 # return n*fact(n-1) jr $ra # retour à la fonction appelante Jeu d instructions et modes d adressage MIPS p. 46

fact fact: addi $sp, $sp, -8 # alloue l espace dans la pile sw $ra, 4($sp) # empile l adresse de retour sw $a0, 0($sp) # empile l argument n slti $t0, $a0, 1 # test pour n < 1 beq $t0, $zero, recurs # if (n>=1) goto recurs; addi $v0, $zero, 1 # return 1; lw $a0, 0($sp) # dépile l argument n lw $ra, 4($sp) # dépile l adresse de retour addi $sp, $sp, 8 # pop des deux valeurs sauvées jr $ra # retour à l appelant recurs: addi $a0, $a0, -1 # n>=1: l argument reçoit n-1 jal fact # appel récursif lw $a0, 0($sp) # dépile l argument n lw $ra, 4($sp) # dépile l adresse de retour addi $sp, $sp, 8 # rend l espace dans la pile mul $v0, $a0, $v0 # return n*fact(n-1) jr $ra # retour à la fonction appelante Jeu d instructions et modes d adressage MIPS p. 46

fact fact: addi $sp, $sp, -8 # alloue l espace dans la pile sw $ra, 4($sp) # empile l adresse de retour sw $a0, 0($sp) # empile l argument n slti $t0, $a0, 1 # test pour n < 1 beq $t0, $zero, recurs # if (n>=1) goto recurs; addi $v0, $zero, 1 # return 1; addi $sp, $sp, 8 # pop des deux valeurs sauvées jr $ra # retour à l appelant recurs: addi $a0, $a0, -1 # n>=1: l argument reçoit n-1 jal fact # appel récursif lw $a0, 0($sp) # dépile l argument n lw $ra, 4($sp) # dépile l adresse de retour addi $sp, $sp, 8 # rend l espace dans la pile mul $v0, $a0, $v0 # return n*fact(n-1) jr $ra # retour à la fonction appelante Jeu d instructions et modes d adressage MIPS p. 46

Compilateur et éditeur de liens Compilateur : transforme le programme source en programme en langage d assemblage utilisant des emplacements mémoire symboliques. Jeu d instructions et modes d adressage MIPS p. 47

Compilateur et éditeur de liens Compilateur : transforme le programme source en programme en langage d assemblage utilisant des emplacements mémoire symboliques. Editeur de liens : résoud les références symboliques sur des programmes compilés séparément. Jeu d instructions et modes d adressage MIPS p. 47

Compilateurs optimisants Un compilateur peut réaliser trois types d optimisation : Optimisations locales. Réalisées à l intérieur d un bloc. Jeu d instructions et modes d adressage MIPS p. 48

Compilateurs optimisants Un compilateur peut réaliser trois types d optimisation : Optimisations locales. Réalisées à l intérieur d un bloc. Optimisations globales. Réalisées sur plusieurs blocs. Jeu d instructions et modes d adressage MIPS p. 48

Compilateurs optimisants Un compilateur peut réaliser trois types d optimisation : Optimisations locales. Réalisées à l intérieur d un bloc. Optimisations globales. Réalisées sur plusieurs blocs. Allocation des registres. Association des variables aux registres en fonction des différentes portions de code. Jeu d instructions et modes d adressage MIPS p. 48

Compilateurs optimisants Un compilateur peut réaliser trois types d optimisation : Optimisations locales. Réalisées à l intérieur d un bloc. Optimisations globales. Réalisées sur plusieurs blocs. Allocation des registres. Association des variables aux registres en fonction des différentes portions de code. Beaucoup d optimisations sont réalisées à la fois localement et globalement, par exemple l élimination de sous-expressions communes, la propagation des constantes, la propagation par copie... Jeu d instructions et modes d adressage MIPS p. 48

Elimination de sous-expressions communes Le compilateur détecte plusieurs occurences d une même expression, et utilise la première pour éliminer les suivantes. Exemple : T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R106, T lw R107, i sll R108, R107, 2 add R109, R106, R108 sw R105, 0(R109) Jeu d instructions et modes d adressage MIPS p. 49

Elimination de sous-expressions communes Le compilateur détecte plusieurs occurences d une même expression, et utilise la première pour éliminer les suivantes. Exemple : T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R106, T lw R107, i sll R108, R107, 2 add R109, R106, R108 sw R105, 0(R109) Jeu d instructions et modes d adressage MIPS p. 49

Elimination de sous-expressions communes Le compilateur détecte plusieurs occurences d une même expression, et utilise la première pour éliminer les suivantes. Exemple : T[i]+=3; # T[i]+3; # T[i]+3; li R100, T li R100, T lw R101, i lw R101, i sll R102, R101, 2 sll R102, R101, 2 add R103, R100, R102 add R103, R100, R102 lw R104, 0(R103) lw R104, 0(R103) add R105, R104, 3 add R105, R104, 3 # T[i]= sw R105, 0(R103) li R106, T lw R107, i sll R108, R107, 2 add R109, R106, R108 sw R105, 0(R109) Jeu d instructions et modes d adressage MIPS p. 49

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R106, T lw R107, i sll R108, R107, 2 add R109, R106, R108 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R106, T lw R107, i sll R108, R107, 2 add R109, R106, R108 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R107, i sll R108, R107, 2 add R109, R100, R108 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R107, i sll R108, R107, 2 add R109, R100, R108 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R101, i sll R108, R101, 2 add R109, R100, R108 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R101, i sll R108, R101, 2 add R109, R100, R108 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R101, i sll R102, R101, 2 add R109, R100, R102 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R101, i sll R102, R101, 2 add R109, R100, R102 sw R105, 0(R109) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 sw R105, 0(R103) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # T[i]= li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 sw R105, 0(R103) # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Compilation optimisée de T[i]+=3; # T[i]+3; li R100, T lw R101, i sll R102, R101, 2 add R103, R100, R102 lw R104, 0(R103) add R105, R104, 3 # adresse de base du tableau T # valeur de l incrément i # alignement sur 4 octets # valeur du déplacement # R104 <- adresse de T[i] # R105 <- T[i]+3 sw R105, 0(R103) # T[i]=T[i]+3; Jeu d instructions et modes d adressage MIPS p. 50

Directives d assemblage Dit à l assembleur comment interpéter ce qui suit en mémoire. Par exemple :.ascii <chaîne> : ce qui suit la directive est une chaîne de caractères.asciiz <chaîne> : ce qui suit la directive est une chaîne terminée par le caractère \0.byte <b1,..., bn> : range b1,..., bn dans n octets successifs.data : ce qui suit la directive est placé dans le segment de données Jeu d instructions et modes d adressage MIPS p. 51

Directives d assemblage.glob <étiquette> : ce qui suit la directive est une étiquette globale et peut être référencée à partir d autres fichiers.text : ce qui suit la directive est placé dans le segment Texte.word <w1,..., wn> : range w1,..., wn dans n mots successifs Jeu d instructions et modes d adressage MIPS p. 51

Exemple de directive.data tableau:.word 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005.text main: la $t0, tableau... Jeu d instructions et modes d adressage MIPS p. 52

Exemple de directive.data tableau:.word 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005.text main: la $t0, tableau... portion de programme référençant un tableau d entiers dans le segment de données la est une pseudo instruction permettant le chargement d une adresse Jeu d instructions et modes d adressage MIPS p. 52

Entrées-sorties : syscall Toutes les entrées sorties sont prises en charge par la routine système syscall Opération $v0 = Arguments Valeur retour print_int 1 $a0 = entier à afficher print_string 4 $a0 = chaîne à afficher read_int 5 $v0 = entier lu read_string 8 $a0 = buffer, $a1 = longueur exit 10 print_char 11 $a0 = car. à afficher $a0 = car. lu read_char 12 $a0 = car. lu exit2 17 $a0 = résultat Jeu d instructions et modes d adressage MIPS p. 53

Exemple : syscall.data str:.asciiz Bonjour.text main: ori $v0, $zero, 4 # $v0 <- 4 la $a0, str # $a0 <- str syscall # affiche Bonjour... ori $v0, $zero, 10 # $v0 <- 10 syscall # appel système de # terminaison de programme Jeu d instructions et modes d adressage MIPS p. 54

Exemple : syscall.data str:.asciiz Bonjour.text main: ori $v0, $zero, 4 # $v0 <- 4 la $a0, str # $a0 <- str syscall # affiche Bonjour... ori $v0, $zero, 10 # $v0 <- 10 syscall # appel système de # terminaison de programme l étiquette str: référence l adresse de la chaîne de caractères en mémoire $a0 est l adresse de la chaîne, passée comme argument à syscall Jeu d instructions et modes d adressage MIPS p. 54