TD 4 : Introduction au langage MIPS

Documents pareils
Compilation (INF 564)

Rappels d architecture

Architecture des ordinateurs

Initiation à la programmation en Python

Le langage C. Séance n 4


Les chaînes de caractères

Rappels Entrées -Sorties

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

ACTIVITÉ DE PROGRAMMATION

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)

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

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

Introduction au langage C

Représentation d un entier en base b

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

Initiation à l algorithmique

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

CM2 L architecture MIPS32

Java Licence Professionnelle CISII,

Cours Informatique Master STEP

STAGE IREM 0- Premiers pas en Python

Algorithmique et Programmation, IMA

Gestion mémoire et Représentation intermédiaire

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

Le prototype de la fonction main()

Conventions d écriture et outils de mise au point

I. Introduction aux fonctions : les fonctions standards

Structure d un programme

1. Structure d'un programme FORTRAN 95

Présentation du langage et premières fonctions

Architecture des ordinateurs

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

Cours d algorithmique pour la classe de 2nde

4. Groupement d objets

Algorithme. Table des matières

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

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

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

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

Qualité du logiciel: Méthodes de test

Examen Médian - 1 heure 30

KL5121. Pour activer des sorties en fonction de la position d'un codeur

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

Concept de machine virtuelle

Partie 7 : Gestion de la mémoire

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Découverte de Python

TP 1. Prise en main du langage Python

Cours 14 Les fichiers

Corrigé des TD 1 à 5

Algorithmique & programmation

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

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Cours d initiation à la programmation en C++ Johann Cuenin

Traduction des Langages : Le Compilateur Micro Java

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

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

Licence Sciences et Technologies Examen janvier 2010

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

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

Programmation C++ (débutant)/instructions for, while et do...while

INF 321 : mémento de la syntaxe de Java

Claude Delannoy. 3 e édition C++

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours Informatique 1. Monsieur SADOUNI Salheddine

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

Programmation C. Apprendre à développer des programmes simples dans le langage C

Chap III : Les tableaux

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

TP 1 : 1 Calculs en binaire, octal et hexadécimal

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

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

Langage Java. Classe de première SI

Chapitre 2 Devine mon nombre!

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.


INITIATION A LA PROGRAMMATION

Premiers Pas en Programmation Objet : les Classes et les Objets

Les structures. Chapitre 3

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

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Projet de programmation (IK3) : TP n 1 Correction

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

1 Lecture de fichiers

Logiciel de base. Première année ENSIMAG

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

1 Recherche en table par balayage

2 Comment fonctionne un ordinateur, dans les grandes lignes

TP, première séquence d exercices.

Exonet : sauvegarde automatisée d une base de données

Application 1- VBA : Test de comportements d'investissements

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Les fichiers. Chapitre 4

V- Manipulations de nombres en binaire

Transcription:

ARCHITECTURE DES ORDINATEURS IG3 2012-2013 TD 4 : Introduction au langage MIPS Clément Jonquet {jonquet@lirmm.fr} Environnement de travail Nous allons utiliser un simulateur pour le langage MIPS. Étant donné la grande utilisation de MIPS, plusieurs simulateurs sont disponibles (e.g., SPIM, MARS, MIPSter, etc.). Si vous êtes sur votre machine personnelle vous pouvez utiliser SPIM ou MARS ; si vous êtes sur une machine Polytech, il vous faut utiliser MARS, qui est une application Java et qui ne nécessite pas d'installation. SPIM (http://pages.cs.wisc.edu/~larus/spim.html) de James R. Larus (Microsoft, Univ. of Wisconsin) ; MARS (http://courses.missouristate.edu/kenvollmar/mars/index.htm) de Ken Vollmar (Missouri State Univ.). Les 2 environnements de programmation proposent un mode "step-by-step" qui permet d'exécuter les instructions les unes après les autres. Ce mode va nous intéresser pour comprendre les mécanismes de la programmation assembleur. Quel que soit l'environnement choisi, les généralités de MIPS nécessaires au TD sont rappelés ci-après. Généralités MIPS Syntaxe Les commentaires commencent par le symbole # et se terminent à la n de la ligne. Un identicateur est une séquence de caractères alphanumériques, de soulignés (_) et de points (.), qui ne commence pas par un chire. Les codes opération d'instruction sont des mots réservés qui ne peuvent pas être utilisés comme identicateurs. Les étiquettes sont déclarées en les plaçant au début d'une ligne et en les faisant suivre du symbole :. Les nombres sont en base 10 par défaut. S'ils sont précédés de 0x ils sont interprétés comme hexadécimaux. Les chaînes de caractères sont encadrées par des doubles apostrophes ". Certains caractères spéciaux dans les chaînes de caractères suivent la convention C : retour-chariot : \n tabulation : \t guillemet : \" Directives Enregistre en mémoire la chaîne de caractères str, mais ne la termine pas par un caractère nul..ascii str.asciiz str nul. Enregistre en mémoire la chaîne de caractères str et la termine par un caractère

.data<@> Les éléments qui suivent sont enregistrés dans le segment de données. Si l'argument optionnel @ est présent, les éléments qui suivent sont enregistrés à partir de l'adresse @..byte b 1,...,b n Enregistre les n valeurs dans des octets consécutifs en mémoire..word w 1,...,w n Enregistre les n quantités 32 bits dans des mots consécutifs en mémoire..float f 1,...,f n Enregistre les n nombres ottants simples précision dans des emplacements mémoire consécutifs..text <@> Les éléments qui suivent sont placés dans le segment de texte de l'utilisateur. Dans SPIM, ces éléments ne peuvent être que des instructions ou des mots. Si l'argument optionnel @ est présent, les éléments qui suivent sont enregistrés à partir de l'adresse @..globl sym Déclare que le symbole sym est global et que l'on peut y faire référence à partir d'autres chiers. Les registres Il existe 32 registres de 32 bits numérotés $0,..., $31 ; les registres peuvent être accédé soit par leur numéro soit par leur nom. Nom Numéro Description $zero 0 Constante 0 $at 1 Réservé à l'assembleur $v0,$v1 2-3 Évaluation d'une expression et résultats d'une fonction $a0,...,$a3 4-7 Arguments de sous-programmes $t0,...,$t7 8-15 Valeurs temporaires (non préservées) $s0,...,$s7 16-23 Valeurs temporaires (préservées) $t8,$t9 24-25 Valeurs temporaires (non préservées) $k0,$k1 26-27 Réservé pour les interruptions (i.e., système d'exploitation) $gp 28 Pointeur global $sp 29 Pointeur de pile $fp 30 Pointeur de bloc $ra 31 Adresse de retour Appel de procédure - conventions Par convention, lors de l'appel de procédure, les registres $t0,...,$t9 sont sauvegardés par l'appelant et peuvent donc être utilisés sans problème par l'appelé. Les registres $s0,...,$s7 doivent quand à eux être sauvegardés et restitués exact par l'appelé. La pile croit des adresses hautes vers les adresses basses : on soustrait à $sp pour allouer de l'espace dans la pile, on ajoute à $sp pour rendre de l'espace dans la pile. Les déplacements dans la pile se font sur des mots mémoire entiers (multiples de quatre octets). Lors du passage de passage de paramètres : tout paramètre plus petit que 32 bits est automatiquement promu sur 32 bits. Les quatre premiers paramètres sont passés par les registres $a0,...,$a3. Les paramètres supplémentaires sont passés dans la pile. Toute valeur de format inférieur ou égal à 32 bits est retournée par le registre $v0 (sur 64 bits $v1 est utilisé avec $v0). 2

Gestion de la mémoire Les appels système Les simulateurs fournissent un ensemble de services par l'intermédiaire de l'instruction d'appel. Pour demander un service on charge le code du service (voir tableau ci-dessous) dans le registre $v0 et ses arguments dans les registres $a0,...,$a3 (ou $f12 pour les valeurs ottantes). Les appels système qui retournent des valeurs placent leurs résultats dans le registre $v0 (ou $f0 pour les résultats ottants). service code arguments résultat print_int 1 $a0 = entier print_oat 2 $f12 = ottant simple précision print_double 3 $f12 = ottant double précision print_string 4 $a0 = chaîne de caractères read_int 5 un entier dans $v0 read_oat 6 un ottant simple dans $v0 read_double 7 un ottant double dans $v0 read_string 8 $a0 = tampon, $a1 = longueur sbrk 9 $a0 = quantité une adresse dans $v0 exit 10 Par exemple, le code suivant imprime la réponse = 5..data str:.asciiz "la réponse = ".text main: li $v0,4 #code appel système print_str la $a0,str #adresse chaîne à imprimer #on imprime la chaîne li $v0,1 #code appel système print_int li $a0,5 #entier à imprimer #on l'imprime 3

Questions Question 1 Enregistrer dans un chier et exécuter le code ci-dessus. (a) A quelle adresse est chargée le début de la chaîne de caractère str? (b) Quelle est la signication des instructions lui $1,4097 et ori $4,$1, 0, rajoutées par l'assembleur? (c) Rajouter une autre chaîne de caractère avant str dans le code. Que devient l'instruction ori? Question 2 Traduire en MIPS les aectations suivantes en continuant le programme ci-dessous :.data sep:.asciiz ", ".text li $t1, 10 li $t2, 50 li $t3, 15 add $a0, $t1, $t2 # a0:= t1+t2-t3 sub $a0, $a0, $t3 li $v0, 1 # a0=45 li $v0, 4 la $a0, sep (a) a0:= t1+4 (b) a0:= t1*8 (c) a0:= ((t1+t2)/4)+(t3 mod 2) (d) Comment éviter de répéter systématiquement le code d'achage? Question 3 Écrire le code ci-dessous en MIPS et exécuter le programme avec des valeurs e.g., i=2, j=2, g=7, h=3 if (i=j) then f := g+h; else f := g-h; endif print f Question 4 Considérer les tableaux T1 et T2 de taille 10 respectivement initialisés à {1,2,3,4,5,6,7,8,9,10} et {10,10,10,10,10,10,10,10,10,10}. (a) Coder en MIPS la boucle suivante et exécuter la sur les tableaux T1 et T2. c:=10 for i in 1..10 loop T2[i] := T1[i] + c; end loop; (b) Combien y-a-t-il d'instructions exécutées pendant l'exécution de ce code? Combien de références (lw, sw) à des données en mémoire seront faites pendant l'exécution? Question 5 Écrire un programme MIPS qui calcule le carré d'un nombre saisi au clavier à l'aide d'un procédure square dénie à une étiquette donné. Question 6 Écrivez un programme MIPS inversant l'ordre des octets d'un mot de 4 octets O 1 O 2 O 3 O 4 (e.g., 0A0B0C0D) chargé au début du programme dans le registre $a0. A la n du programme, le registre $v0 doit contenir le mot O 4 O 3 O 2 O 1 où les octets sont inversés (e.g., 0D0C0B0A). 4

Question 7 Écrire la fonction factorielle et le code suivant en MIPS. main () { printf ("The factorial of 10 is ", fact (10)); } int fact (int n) { if (n < 1) return (1); else return (n * fact (n - 1)); } 5