CM2 L architecture MIPS32



Documents pareils
Rappels d architecture

Compilation (INF 564)

Jeu d instructions NIOS II

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

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

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

Architecture des ordinateurs

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

Licence Sciences et Technologies Examen janvier 2010

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


Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Conception de circuits numériques et architecture des ordinateurs

ASR1 TD7 : Un microprocesseur RISC 16 bits

Exécution des instructions machine

Programmation assembleur : aperçu

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

Cours 1 : La compilation

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

Introduction au langage C

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

Organigramme / Algorigramme Dossier élève 1 SI

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

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

GPA770 Microélectronique appliquée Exercices série A

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

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

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

Structure d un programme

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

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

Conventions d écriture et outils de mise au point

Représentation des Nombres

Architecture des ordinateurs

Cours 1 : Qu est-ce que la programmation?

Algorithmique et Programmation, IMA

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

Cours Informatique 1. Monsieur SADOUNI Salheddine

Architecture matérielle des systèmes informatiques

Gestion mémoire et Représentation intermédiaire

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

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

Cours d Algorithmique et de Langage C v 3.0

Évaluation et implémentation des langages

Algorithme. Table des matières

Informatique Générale

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Microprocesseur + Logiciel

STAGE IREM 0- Premiers pas en Python

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Programmer en JAVA. par Tama

Une version javascript sera disponible directement dans le cours prochainement.

Rappels sur les suites - Algorithme

Programmation en langage C

Partie 7 : Gestion de la mémoire

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

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

Chap III : Les tableaux

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Le langage C. Introduction, guide de reference

Définitions. Numéro à préciser. (Durée : )

Java Licence Professionnelle CISII,

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

IV- Comment fonctionne un ordinateur?

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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)

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Claude Delannoy. 3 e édition C++

Structure fonctionnelle d un SGBD

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Chapitre 1 : La gestion dynamique de la mémoire

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Machines virtuelles Cours 1 : Introduction

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

ALGORITHMIQUE ET PROGRAMMATION En C

Traduction des Langages : Le Compilateur Micro Java

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP 1. Prise en main du langage Python

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

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

PIC : COURS ASSEMBLEUR

Introduction à l algorithmique et à la programmation M1102 CM n 3

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

Introduction à l architecture des ordinateurs. Adrien Lebre Décembre 2007

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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

SYSTÈME DE GESTION DE FICHIERS

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

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

Cours de Systèmes d Exploitation

Génie Logiciel avec Ada. 4 février 2013

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

Transcription:

CM2 L architecture MIPS32 Olivier Marchetti (CM-TD-TP) Alexandre Brière (TD-TP) Laboratoire d informatique de Paris 6 Pôle SoC UPMC Année 2014-2015

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Question du jour : comment programmer un ordinateur? Comment parler avec quelqu un d aussi binaire qu un ordinateur? Soit en binaire ou alors... avoir un traducteur! UNIX, l assembleur et C Comme tout SE de l époque, UNIX fut écrit en assembleur. Dennis Ritchie dévellopa le C au début des années 70. UNIX fut réécrit en C en 1972! L oeuf et la poule Qui compile le compilateur? Comment est écrit le compilateur? Comment concevoir un langage de haut niveau?... Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 2 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Question du jour : comment programmer un ordinateur? Comment éviter de programmer en langage machine? En utilisant le langage assembleur de l architecture. X Plus aucune variable = orchestrer un va-et-vient entre CPU et RAM. X Plus aucun type = organiser en mémoire les données. X Plus aucune structure de contrôle ou structure de données = les réinventer en jouant avec des étiquettes assembleurs. 32 registres utilisateur de 32 bits chacun. 2 32 octets adressables. Des registres dédiés (notamment pour les flottants) Quelques conventions pour la mémoire. Etiquetter des portions du code assembleur. Des instructions de branchement. Des instructions de saut. Programmer en ensembleur... ou se substituer au compilateur Savoir précisément où écrire, où lire. Savoir décomposer tous les traitements. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 3 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Présentation du MIPS32 Généralités MIPS Microprocessor without Interlocked Pipeline Stages Architecture étudiée dans cette UE... made in Stanford! Architecture Premier CPU en 1985. 32 ou 64 bits. Architecture sous licence... PS2, PSP, Nintendo, Jeu d instructions Type RISC (Reduced Instruction Set Computer ). Taille fixe pour les instructions. Pipeline instructions (cf. dernier CM). Facile à apprendre (régulière), suffisamment général, intéressant. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 4 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Plan 1 Instructions MIPS Instructions arithmétiques Instructions logiques Instructions de transfert de données Instructions avec constantes Instructions de branchement 2 Structure de contrôle en MIPS Structure de contrôle if... then... Structure de contrôle if... then... [else] Structure de contrôle while Structure de contrôle for 3 Données en MIPS Déclarer et définir des variables Convention sur les registres 4 Entrée/Sortie en MIPS Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 5 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 6 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : opérations arithmétiques Quelles sont les instructions arithmétiques du MIPS? Soient les désignations de registres $d, $s, $t. Addition add add $d, $s, $t Soustraction sub sub $d, $s, $t Au niveau registre : add $d, $s, $t $d $s + $t Au niveau registre : sub $d, $s, $t $d $s - $t Multiplication mult mult $s, $t # résultat sur 64 bits Division div div $s, $t Un registre 64 bits découpé en deux champs 32 bits (notés Hi et Lo) : mult $s, $t Hi pref 32($s * $t) Lo suff 32($s * $t) Un registre 64 bits découpé en deux champs 32 bits (notés Hi et Lo) : div $s, $t Hi $s % $t Lo $s / $t Remarque Pour les grandeurs non-signée (syntaxe identique) : addu, subu, multu, divu Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 7 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : calculer une expression arithmétique Comment traiter une expression arithmétique C? Soit l instruction C suivante : (a + b) - (c + d); Supposons que nous ayons quatre registres avec l affectation suivante : Comment procéder au calcul? aff. reg. val. var. prog. $reg 1 a $reg 2 b $reg 3 c $reg 4 d Tout décomposer. Gérer la ressource registre. Veiller à la cohérence du calcul. Possibilité d utiliser d autres registres... mais 32 registres c est peu. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 8 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : opérations logiques Quelles sont les instructions logiques du MIPS? Soient les désignations de registres $d, $s, $t. Opérations logiques de base : AND (bit-à-bit) and and $d, $s, $t Au niveau registre : and $d, $s, $t $d $s & $t OR (bit-à-bit) or or $d, $s, $t Au niveau registre : or $d, $s, $t $d $s $t XOR (bit-à-bit) xor xor $d, $s, $t Au niveau registre : xor $d, $s, $t $d $s ^ $t NOR nor nor $d, $s, $t Au niveau registre : nor $d, $s, $t $d ($s $t) Comparaison de deux entiers : inférieur à slt (set on less than) Au niveau registre : slt $d, $s, $t slt $d, $s, $t $d ($s < $t) Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 9 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). 2 Effectuer des transferts de données. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 10 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : transferts de données principes (1/4) Comment contourner la limite des 32 mots registres? 2 32 octets 4Go! organiser un va-et-vient registres/ram Haut-niveau : l abstraction variable dispense le programmeur de réfléchir à la localisation réelle des données. Assembleur : la localisation des données est inévitable. CPU 00011110 11000101 mot 2 1 mot 2 2 Pour charger (resp. décharger) un registre depuis la RAM (resp. vers la RAM), il faut spécifier : une adresse de base C (début de la zone mémoire voulue), une valeur de décalage (l index, stocké dans $s), le registre contenant (resp. recevant) la donnée. L adresse d écriture/lecture en RAM sera : Remarques RAM[$s + C] Le registre $s indique la granularité de la donnée à charger (i.e. un multiple de quelques octets). Par défaut, un transfert RAM registre copie quatre octets. $Reg C valeur de $s valeur de $s 01001100 11100000 00101101 RAM @ 2 1 0 Contient données/programmes Entièrement adressée (par octet) Formée de mots = la RAM n est qu un grand tableau. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 11 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : transferts de données syntaxe (2/4) Instructions MIPS pour les transferts registres/mémoire : Chargement d un registre lw (load word) lw $t, C($s) CPU 00011110 11000101 mot 2 1 mot 2 2 Au niveau registre/ram : lw $t, C($s) $t RAM[$s + C] $Reg C Déchargement d un registre sw (store word) sw $t, C($s) Au niveau registre/ram : sw $t, C($s) RAM[$s + C] $t valeur de $s valeur de $s 01001100 11100000 00101101 RAM @ 2 1 0 C désigne une constante sur 16 bits, alors que $s est sur 32 bits. Remarques Traiter des mots de taille moindre (syntaxe identique) : lh, sh : charge / décharge un 1 /2-mot (load/store half ), lb, sb : charge / décharge un octet (load/store bytes). Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 12 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : transferts de données exemples (3/4) Exemple 1 Soit tab[] un tableau d entiers 32 bits d adresse stockée dans le registre $v1. Soient deux variables x et y associées respectivement aux registres $v2 et $v3. Quel serait l équivalent MIPS de l instruction C : y = x + tab[5]; Exemple 2 Soit tab[] un tableau d entiers 16 bits d adresse stockée dans le registre $v1. Soit une variable x associée au registre $v2. Quel serait l équivalent MIPS de l instruction C : tab[1] = x + tab[10]; Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 13 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : transferts de données problème d alignement (4/4) Que se passe-t-il si le calcul d adresse est erroné? Soit tab[] un tableau contenant 0, 1, 2... Ces entiers sont encodés sur 32 bits (i.e. 4 octets). L adresse mémoire de ce tableau est dans $t. Le programmeur, étourdi, charge cependant les valeurs par : lh $s, C($t). avec la constante C prise dans 0, 2, 4... Mots chargés par le programmeur adr_tab[] 0 1 0 0 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000 RAM @ = données mal lues tab[1] = 1 tab[0] = 0 Alignement mémoire Une donnée est alignée si son adresse mémoire est multiple de sa taille en octet. Exemple : les entiers sur 4 octets ont des adresses multiples de 4. La RAM étant entièrement adressée, il faut veiller à lire correctement les données. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 14 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). 2 Effectuer des transferts de données. 3 Manipuler des constantes. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 15 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : manipuler des constantes dans le code assembleur (1/3) Comment un programmeur peut-il utiliser des constantes dans son code MIPS? Un peu de bricolage Soit $AdrC stockant l adresse mémoire d un emplacement contenant la constante 10. lw $d, 0($AdrC) # $d 10 add $d, $d, $s # $d 10 + $s Problème d efficacité un chargement en mémoire est coûteux en temps. usage fréquent de petites constantes. = manipuler directement les constantes dans l assembleur MIPS Opérations arithmétiques à chargement immédiat (avec C sur 16 bits) : Addition immédiate addi addi $d, $s, C $d $s + C Soustraction immédiate subi subi $d, $s, C $d $s - C Opération logiques à chargement immédiat (avec C sur 16 bits) : AND immédiat (bit-à-bit) andi andi $d, $s, C $d $s & C OR immédiat (bit-à-bit) ori ori $d, $s, C $d $s C Test inférieur à immédiat slti (set on less than immediate) slti $d, $s, C $d ($s < C) Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 16 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : manipuler des constantes dans le code assembleur (2/3) Comment manipuler (24 60 60 = 86400) 10 = (10101000110000000) 2? Un peu de bricolage La construire par étape en obervant que : ( 16 1 15 0 10100011000000 0 0) 2 = (0000000000000001) 2 2 16 + (0101000110000000) 2 Avec cette décomposition et $d contenant 0, nous avons : addi $d, $d, 1 # $d 0 + 1 sll $d, $d, 16 # $d $d 2 16 addi $d, $d, 0x5180 # $d $d + 0x5180 Un peu lourd... Décalage de bit sll, srl (shift left/right logical) sll/srl $d, $s, dec # dec < 2 5 Au niveau registre : sll $d, $s, dec $d $s 2 dec Au niveau registre (et si $d est un entier positif), srl $d, $s, dec $d $s 2 dec = MIPS permet de charger un petit entier sur les 16 bits du poids fort d un registre! Chargement poids fort immédiat lui (load upper immediate) Au niveau registre : lui $d, C lui $d, C $d 0 $d $d 2 16 valeur 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 chargement 31 16 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Compléter par un addi ensuite... Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 17 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : manipuler des constantes dans le code assembleur (3/3) Comment faire une affectation en assembleur? = Variable = concept inexistant au niveau assembleur = Gestion des ressources matérielles (RAM, registres) La question serait davantage : Comment le programmeur charge-t-il ses registres? Depuis la RAM ou un registre lw $t, C($s) # $t RAM[$s + C] Avec un immédiat addi/ori $d, $s, 0 # $d $s add/or $d, $s, $zero # $d $s addi/ori $d, $zero, C # $d C Remarques Le registre $zero (ou $0) contient toujours... 32 registres, c est peu! = décharger certains registres avec sw. Les instructions or/ori sont un peu plus rapides que add/addi. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 18 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). 2 Effectuer des transferts de données. 3 Manipuler des constantes. 4 Pouvoir réaliser des branchements sur le code. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 19 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Assembleur MIPS : prendre des décisions Comment guider le flot d instructions en MIPS? Programme enregistré rappels Données et programmes sont stockés en mémoire. La mémoire est entièrement adressé. Une instruction est un mot mémoire. Un programme n est qu une suite de mots. = indiquer à l ordinateur l adresse de la prochaine instruction à exécuter. Instructions de branchement conditionnel MIPS : Branchement sur égalité beq (branch on equal) beq $s, $t, Ad Etq Au niveau registre : Si ($s == $t) alors PC PC + 4 + 4 Ad Etq Branchement non-égalité bne (branch on not equal) bne $s, $t, Ad Etq Au niveau registre : Si ($s!= $t) alors PC PC + 4 + 4 Ad Etq Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 20 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Arithmétiques Logiques Transfert Constantes Branchement Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). 2 Effectuer des transferts de données. 3 Manipuler des constantes. 4 Pouvoir réaliser des branchements sur le code. 5 Disposer de structures de contrôle classiques. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 21 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS IfThen IfThenElse While For Assembleur MIPS : if... then... Comment traduire un simple if d un code C? Soit le code C suivant : if (note archi < 0) note archi = 0; note archi += 1; Si $r est assigné à note archi : = la programmation assembleur, ce n est rien que des goto étiquette! Pseudo-instructions assembleur MIPS Les instructions MIPS sont : quasi-implémentées en matériel, X mais très peu nombreuses (57 au total). Pseudo-instructions MIPS : remplacent des petites portions de MIPS fréquentes (mais non implémentées dans le matériel), basées sur le instructions réelles du MIPS. utilisent un registre intermédiaire spécifique ($at). = pas très pratique pour coder... Exemple : avec : move $d, $r addi $d, $r, 0 bge $s, $t, Etq slt $at,$s,$t beq $at,$zero, Etq bge : branch if greater than or equal, le registre $at réservé à l assembleur. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 22 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS IfThen IfThenElse While For Assembleur MIPS : définir une condition Comment écrire en assembleur? Soit le code C suivant : if (note archi < 0) note archi = 0; note archi += 1; La séquence semble la même... La condition logique a été niée! Si $r est assigné à note archi : 1 bge $r, $0, SUITE 2 move $r, $0 3 SUITE : addi $r, $r, 1 Langage haut-niveau vs. assembleur MIPS : méthodologie En assembleur : une instruction par ligne. Nombre d opérandes par instruction déterminé par l ISA. Instructions et opérandes sont tous adressés. L ordinateur effectue en permanence le cycle chercher, décoder, exécuter. En d autres termes : lecture ligne après ligne, adresse après adresse, instruction après instruction. Ce fonctionnement glouton contraint le programmeur à adapter son écriture. = astuce : nier la condition logique pour préserver l ordre initial. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 23 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS IfThen IfThenElse While For Assembleur MIPS : if... then... [else] Comment traduire un simple if... then... [else] d un code C? Soit le code C suivant : if (note archi < 0) note archi = 0; else note archi += 1; Première tentative en MIPS : 1 bge $r, $0, SINON 2 move $r, $0 3 SINON : addi $r, $r, 1 Problème : à l exécution, on ajoute toujours 1 pt! l adresse d une instruction numéro ligne = effectuer des sauts d instructions grâce aux adresses! Instruction de branchement inconditionnel MIPS (saut) : Saut sur étiquette j Etq (jump) j Etq Au niveau registre : j Etq PC PC + 4[31...28].4 Ad Etq avec concaténation des premiers bits $PC et ceux de l étiquette. if... then... [else] en MIPS Insérer un saut d instruction : 1 bge $r, $0, SINON 2 move $r, $0 3 j SUITE 4 SINON : addi $r, $r, 1 5 SUITE : Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 24 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS IfThen IfThenElse While For Assembleur MIPS : tant que... faire Boucle tant que... faire en C while (notes archi[i++] >= 0) nb notes archi += 1; Soient les assignations suivantes : l adresse du tableau note archi[] est stockée dans le registre $t0, le registre $ind contient la valeur de la variable i, le registre $n contient la valeur de la variable nb notes archi, les registres $t1, $t2, $t3 contiennent respectivement : la valeur 4, la valeur intermédiaire 4 i, la i e valeur du tableau note archi[]. Boucle tant que... faire en MIPS 1 TANTQUE : mul $t2, $t1, $ind # $t2 4 i 2 addi $t0, $t0, $t2 # $t0 @notes archi[i] 3 lw $t3, 0($t0) # $t3 notes archi[i] 4 blt $t3, $zero, SUITE # test logique nié 5 addi $n, $n, 1 # incrémentation 6 addi $ind, $ind, 1 # incrémentation 7 j TANTQUE # saut vers TANTQUE 8 SUITE : Autres pseudo-instructions mul : retourne les 32 bits de poids faible du produit des opérandes. blt : branch on lower than. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 25 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS IfThen IfThenElse While For Assembleur MIPS : Pour... faire Boucle Pour (i allant de 0 à n - 1) faire en C for (i = 0; i < n; i++) { instructions for } En considérant que l assignation de registres suivante : $r contient la valeur de i, $t contient la valeur de n, $test stocke le résultat d un calcul intérmédiaire, une telle boucle se programme ainsi en MIPS : Boucle Pour (i allant de 0 à n - 1) faire en MIPS 1 add $r, $zero, $zero # $r 0 + 0 2 POUR : slt $test, $r, $t # $test 0 si i >= n 3 beq $test, $zero, SUITE # saut vers la suite du code 4... # corps de la boucle 5 addi $r, $r, 1 # incrémentation compteur 6 j POUR # saut en début de boucle 7 SUITE : Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 26 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Déclarer/Definir des données Convention sur les registres Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). 2 Effectuer des transferts de données. 3 Manipuler des constantes. 4 Pouvoir réaliser des branchements sur le code. 5 Disposer de structures de contrôle classiques. 6 Disposer de variables déclarées et définies. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 27 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Déclarer/Definir des données Convention sur les registres Assembleur MIPS : déclarer et définir des variables (1/3) Langage haut-niveau vs. assembleur Haut-niveau : l abstraction variable dispense le programmeur de réfléchir à la localisation réelle des données. Assembleur : la localisation des données est inévitable. Segments mémoire MIPS et programme C : le segment texte.text contient les instructions du programme. = $pc : adresse de l instr. exécutée. le segment des données.data contient données statiques (variable globales ou statiques), = $gp : adresse du seg. des données. la mémoire dynamique gérée dans le tas (xxxalloc() en C). $gp $pc Mem. dispo. Tas données stat..data.text Programme Seg. données Seg. texte Mémoire du programme Les tailles (et donc les adresses) de ces segments sont calculées à la compilation. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 28 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Déclarer/Definir des données Convention sur les registres Assembleur MIPS : déclarer et définir des variables (2/3) Comment indiquer en MIPS où, comment, et quoi stoker? Indiquer le segment mémoire.text [adr] : la donnée sera dans le segment texte (i.e. avec les instructions du programme à l adresse adr si fournie)..data [adr] : la donnée sera stockée dans le segment des données (à l adresse adr si fournie)..stack : la donnée sera sur la pile (cf. CM3). k{text,data} : la donnée sera dans le segment {texte, données} du noyau du système d exploitation. Décrire la visibilité extern Etq taille : déclare la donnée enregistrée à l adresse Etq sur taille octets consécutifs comme étant globale au fichier. Place la donnée dans le segment des données. globl Etq : déclare l étiquette Etq est un symbole globale visible dans d autres fichiers assembleur. S apprend à l usage... Décrire et enregistrer les données Les enregistrements mémoire suivants sont réalisés à des adresses consécutives. align n : réalise l alignement mémoire de la donnée suivante sur une frontière de 2 n octects. space n : définit un espace de n octets consécutifs dans le segment des données. ascii ch : enregistre en mémoire la chaîne de caractère ch sans le caractère de fin de chaîne. asciiz ch : idem, mais avec le caractère de fin de chaîne. byte b 1,...,b n : enregistre n octets. double d 1,...,d n : enregistre n flottants double précision. float f 1,...,f n : enregistre n flottants simple précision. half h 1,...,h n : enregistre n quantités 16 bits (alignement demi-mot). word w 1,...,w n : enregistre n quantités 32 bits (alignement mot). Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 29 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Déclarer/Definir des données Convention sur les registres Assembleur MIPS : déclarer et définir des variables (3/3) Comment structurer un fichier assembleur MIPS? Fichier MIPS type Etiquettes Dir{Seg. mém, visib., données} Instr. Commentaires.data tab ent :.word 1,2,3,4..........text.globl main # main devient global......... main : la $r, tab ent # charge tab entier dans $r......... Ecriture MIPS Une instruction par ligne. Etiquettes en début de ligne suivies de :. Idenfiticateur : idem au C. Pas de commentaires multilignes. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 30 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Déclarer/Definir des données Convention sur les registres Assembleur MIPS : convention d usage des registres Peut-on utiliser comme l on veut chacun des 32 registres? Pas vraiment : contraintes matérielles (fortes) et conventions logicielles. Noms et numéros de registres Nom Numéro Fonct. conv. $zero $0 constante 0 $at $1 Rés. assembleur $v0 $v1 $2 $3 Val. retour et Rés. fonction $a0 $a3 $4 $7 Arg. fonct. $t0 $t7 $8 $15 Temp. $s0 $s7 $16 $23 Temp. sauv. $t8 $t9 $24 $25 Temp. $k0 $k1 $26 $27 Rés. noyau SE $gp $28 Pointeur global $sp $29 Pointeur pile $fp $30 Pointeur bloc $ra $31 Adr. retour Nombre de conventions seront expliquées lors du CM3. Contraintes matérielles Le programme utilise d autres programmes. Le SE veille. Conventions logicielles X X X $zero contient toujours la valeur zéro. $ra utilisé pour le flot des instructions. ($HI, $LO) (ALU) utilisés pour (mult, div) = Ensemble de conventions déterminant le bon usage de l architecture (programme, compilation). = A respecter. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 31 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Programmation C vs. Programmation MIPS Pour bien programmer, de quoi avons-nous besoin? 1 Réaliser des calculs (arithmétiques ou logiques). 2 Effectuer des transferts de données. 3 Manipuler des constantes. 4 Pouvoir réaliser des branchements sur le code. 5 Disposer de structures de contrôle classiques. 6 Disposer de variables déclarées et définies. 7 Effectuer des entrées/sorties élémentaires. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 32 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Assembleur MIPS : effectuer des entrées/sorties élémentaires Comment réaliser une E/S élémentaire? Réaliser un appel système - méthodologie 1 Ecrire l instruction pour charger le service voulu dans le registre $v0. 2 [ Ecrire les instructions pour charger des arguments dans les registres $a0, $a1... (cf. documentation MIPS).] 3 Ecrire l instruction syscall. 4 [ Ecrire les instructions pour récupérer une valeur de retour de l appel syscall. ] Service Code Service Arguments Valeur de retour afficher entier 1 $a0 : stocke l entier voulu afficher ch. car. 4 $a0 : adresse de la chaîne lire entier 5 $v0 : entier lu lire ch. car. 8 $a0 : adresse du tampon exit 10 $a1 : nb. max. car. lus Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 33 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Assembleur MIPS : effectuer des entrées/sorties élémentaires exemple Ecrire en assembleur MIPS le programme qui affiche hello world. L instruction la (pour load address) permet de charger dans un registre une adresse. Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 34 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Assembleur vs. langage de haut-niveau : conclusion Pourquoi écrire en langage assembleur alors qu un langage de haut-niveau est finalement beaucoup plus intuitif? Langage Assembleur Langage haut-niveau Contrôle très fin du matériel (presque au niveau cycle). = très utile dans l embarqué Exploitation maximale des fonctionnalités offertes par le matériel. = très grande hétérogénéité du matériel et donc des ISA. Les archis passent... les langages haut-niveau restent! = le C a plus de 40 ans! Facilité d écriture. = accroît la productivité! Compilateurs de plus en plus performants. Peu intuitif. = entretien laborieux... Codes sources très longs. = productivité divisée! Certaines architectures ne sont exploitables qu en langage assembleur. Difficile d effectuer des choses très fines (e.g. temps réel). Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 35 / 36

Instructions MIPS Contrôle Données en MIPS E/S en MIPS Rendre à César ce qui est à César Références bibliographiques utilisées Organisation et conception des ordinateurs, J. Hennessy & D. Patterson, Dunod. en.wikipedia.org et diverses ressources... Images utilisées Image du transparent 18 : Sujet : Source : Licence : smileys. openclipart.org. domaine public. Image du transparent 31 : échangeur autoroutier Los Angeles-Pasadena-Santa- Monica (auteur : inconnu). Olivier Marchetti CM2 L architecture MIPS32 Année 2014-2015 36 / 36