Logiciel de Base. II. Le Langage Machine



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

Conception de circuits numériques et architecture des ordinateurs

Exécution des instructions machine

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

Programmation assembleur : aperçu

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

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

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Architecture des ordinateurs

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

Microprocesseur + Logiciel

Licence Sciences et Technologies Examen janvier 2010

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Représentation des Nombres

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

Ordinateurs, Structure et Applications

ASR1 TD7 : Un microprocesseur RISC 16 bits

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Présentation du cours

IFT2880 Organisation des ordinateurs et systèmes

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

PIC : COURS ASSEMBLEUR

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

IV- Comment fonctionne un ordinateur?

Logiciel de Base. I. Représentation des nombres

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

Structure d un programme

Fonctionnement et performance des processeurs

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

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

Informatique Générale

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

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

Cours Informatique 1. Monsieur SADOUNI Salheddine

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

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

Algorithmique et Programmation, IMA

gestion des processus La gestion des processus

CQP 112 Introduc/on à la programma/on. Thème 2 : Architecture d un système informa/que. Département d informa/que

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

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

Une version javascript sera disponible directement dans le cours prochainement.

Architecture des Ordinateurs Première partie. Licence d Informatique - IUP Miage - FIIFO

Mathématiques appliquées à l informatique

LOGICIEL DC4D MONITOR

Prentice Hall, 2011 (ISBN )

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

Conventions d écriture et outils de mise au point

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

td3a correction session7az

Architecture matérielle des systèmes informatiques

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

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

Analyse de sécurité de logiciels système par typage statique

ÉCOLE POLYTECHNIQUE DE MONTRÉAL. Département de Génie Électrique. La technologie de TEXAS INSTRUMENTS DSP pour le cours Analyse des Signaux ELE2700

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

Chapitre 10 Arithmétique réelle

CONFIGURATION DE L AUTOMATE SIEMENS

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

Gestion mémoire et Représentation intermédiaire

Génération de code binaire pour application multimedia : une approche au vol

Architecture de l ordinateur

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

Description du logiciel Modbus RTU

Calcul scientifique précis et efficace sur le processeur CELL

Codage d information. Codage d information : -Définition-

Conversion d un entier. Méthode par soustraction

Algorithme. Table des matières

Introduction à MATLAB R

Cours 1 : La compilation

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

Chapitre VI- La validation de la composition.

Atelier C TIA Portal CTIA06 : programmation des automates S7-300 Blocs d organisation

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

Logiciel de base. Première année ENSIMAG

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

Le langage C. Introduction, guide de reference

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Informatique Industrielle Année Architecture des ordinateurs Note de cours T.Dumartin

Architecture des ordinateurs

GNS 3 Travaux pratiques

Architecture des ordinateurs Introduction à l informatique

V- Manipulations de nombres en binaire

Les portes logiques. Voici les symboles des trois fonctions de base. Portes AND. Portes OR. Porte NOT

Architecture ordinateur. Organisation mémoire et Entrées/Sorties

Enregistreur sans papier avec écran TFT et carte Compact Flash. B Description des interfaces 07.07/

Programmation en langage C

Organisation des Ordinateurs

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

Machines virtuelles Cours 1 : Introduction


Jeux de caracte res et encodage (par Michel Michaud 2014)

Transcription:

Logiciel de Base (A1-6/7) Léon Mugwaneza ESIL/Dépt. Informatique (bureau A118) mugwaneza@univmed.fr II. Le Langage Machine Exemple : le MIPS R2 (Architecture MIPS-I)

MIPS R2 MIPS : Microprocessor with Interlocked Pipeline Stages Issu d un projet de l université de Stanford Architecture MIPS-I (1985) Machine 32 bits registres et mots de 32 bits little endian ou big endian par configuration les instructions sont codées sur un mot et s exécutent (pour la plupart) en 1 cycle ==> machine RISC Architecture load/store machine à registres adressables où seules 2 «instructions» (load et store) accèdent à la mémoire le mot du MIPS est suffisamment large (et le codage suffisamment bien fait) pour pouvoir spécifier 3 registres dans une instruction 2

Les registres (1/2) 32 registres généraux, mais convention de programmation $ ($zero) vaut toujours (donc 31 registres généraux!) $1 ($at - assembler temporary) est réservé à l assembleur $2 ($v) et $3 ($v1) sont destinés à contenir les résultats des fonctions $4 à $7 ($a à $a3) sont destinés au passage des paramètres $8 à $15, $24 et $25 ($t à $t9) : temporaires non sauvegardés par les appels de procédures $16 à $23, ($s à $s7) : temporaires sauvegardés $26 et $27 ($k et $k1) sont réservés au noyau du SE (Kernel) $28 ($gp) : pointeur sur les données globales (Global Pointer) $29 ($sp) : pointeur de pile (Stack Pointer) $3 ($fp) : pointeur sur l environnement d une fonction (Frame Pointer) $31 ($ra) est utilisé à l appel d une fonction pour sauvegarder l adresse de retour (Return Address) Les conventions de programmation sont destinées au programmeur (et surtout au compilateur) et ne sont pas une contrainte du matériel Elles permettent d utiliser des procédures compilées séparément 3

registres spécialisés Les registres (2/2) le compteur ordinal (PC - Program Counter, IP - Instruction pointer) deux registres Hi (High) et Lo (Low) utilisés (implicitement) par les instructions de multiplication et division entre entiers des registres de contrôle regroupés dans le coprocesseur (jusqu à 32 pour les versions supérieures). Signalons :» $12 : le registre d état (status) (contient le masque d interruptions, le mode du processeur, )» $13 : le registre cause de l exception (cause)» $14 : le registre contenant l adresse de l instruction qui a causé l exception (EPC - Exception PC)» $8 : le registre contenant l adresse mémoire qui a causé une violation de protection mémoire (BadVAddr - Bad Virtual Address) Les registres du coprocesseur flottants (coprocesseur 1)» 32 registres de 32 bits ($f à $f31) utilisés comme 16 registres simples précision (on n utilise que les 16 registres de no. pairs), et 16 registres double précision (par jeu de 2 registres)» 1 flag code condition pour les instructions de comparaison des flottants 4

Formats des instructions Format I : utilisé pour des instructions qui manipulent des constantes, load et store (le déplacement est une constante), et les instructions de branchement qui utilisent un déplacement par rapport au compteur ordinal Format J : utilisé pour les instructions j et jal (voir plus loin) Format R : utilisé pour toutes les autres instructions 5

Format R (1/2) 31 26 25 21 2 16 15 11 1 6 5 op (6) rs(5) rt(5) rd(5) shamt(5) funct(6) Que représente chacun des champs d une instruction? op est l opcode : est une partie du code de l instruction (toutes les instructions CPU au format R ont op = - pas vrai pour les instructions des coprocesseurs) funct : combiné avec op spécifie exactement l opération Pourquoi op et funct ne forment-ils pas un seul champ de 12 bits? 6

Format R (2/2) 31 26 25 21 2 16 15 11 1 6 5 op (6) rs(5) rt(5) rd(5) shamt(5) funct(6) Que représentent les champs d une instruction? (suite)... rs (Source Register) : utilisé généralement pour spécifier le registre contenant le premier opérande source rt (Target Register) : utilisé généralement pour spécifier le registre contenant le deuxième opérande source (le nom prête à confusion! ) rd (Destination Register) : utilisé généralement pour spécifier le registre qui contiendra le résultat de l opération shamt (shift amount) : spécifie le nombre de décalages pour les instructions de décalage (= pour les autres instructions) généralement signifie : «il y a des exceptions» par ex. mult et div rangent le résultat dans HIGH et LOW et donc le champ rd n est pas significatif (doit être mis à ) 7

Format R - exemple (1/2) add $8, $9, $1 # $8 $9 + $1 Abus de notation ( normalement : RG[8] RG[9] + RG[1]) Utilisé àchaque fois qu il n y a pas d ambiguïté op = (lu dans la table des codes des instructions) funct = 32 (lu dans table des codes des instructions) rs = 9 (1er opérande source) rt = 1 (2ème opérande source) rd = 8 (destination) shamt = (ce n est pas une instruction de décalage) 8

Format R - exemple (2/2) add $8, $9, $1 # $8 $9 + $1 Représentation décimale par champs 31 26 25 21 2 16 15 11 1 6 5 9 1 8 32 Représentation binaire par champs 31 26 25 21 2 16 15 11 1 6 5 11 11 1 1 Langage Machine : - en binaire : 111111 - en hexadécimal : 12A42 - en décimal : 19 546 144 9

Format I (1/2) Et les instructions avec des opérandes qui sont des constantes? Un champ de 5 bits ne permet de représenter que 32 constantes ( à 31, ou -16 à + 15) : on conçoit raisonnablement des opérandes constantes plus grandes Idéalement le MIPS devrait avoir un seul format d instructions (pour la simplicité du décodage) solution de compromis Définir un deuxième format qui est partiellement «compatible» avec le (conforme au) format R les instructions ayant un opérande constante, ce format utilisera au plus 2 registres 1

op (5) Format I (2/2) 31 26 25 21 2 16 15 rs (5) rt (5) Immediate (16) Seul un champ n est pas conforme au format R et le champ op est au même endroit Que représente chacun des champs? op : comme pour le format R mais comme il n y a pas de champ funct, spécifie complètement l opération Pourquoi dans le format R, op et funct ne forment-ils pas un seul champ de 12 bits? rs : spécifie le seul registre opérande source (quand il y en a un) rt : spécifie généralement le registre qui «contiendra» le résultat (est ce pour cela qu on l appelle Target Register?) immediate : constante sur 16 bits (représentation des nombres en complément à 2, extension de signe avant l opération même pour les opérations non signées) 11

Format I - exemple (1/2) addi $21, $22, -5 # $21 $22 + (-5) op = 8 (lu dans la table des codes des instructions) rs = 22 (registre contenant l opérande) rt = 21 (registre contenant le résultat) immediate = -5 (décimal par défaut) 12

Format I - exemple (2/2) addi $21, $22, -5 # $21 $22 + (-5) Représentation décimale par champs 31 26 25 21 2 16 15 8 22 21-5 Représentation binaire par champs 31 26 25 21 2 16 15 1 111 111 1111111111111 Langage Machine - en hexadécimal : 22D5FFCE - en décimal : 584 449 998 Problème : Et les constantes qui ne tiennent pas sur 16 bits? Voir instructions lui et ori plus loin 13

Format J (1/3) Utilisé dans les instructions j et jal qui modifient PC en lui affectant une adresse absolue (PC adresse cible) L adresse cible devrait pouvoir être n importe quelle adresse mémoire Donc n importe quelle constante sur 32 bits On ne peut pas avoir un code opération sur 6 bits et une adresse cible sur 32 bits dans un seul mot de 32 bits Solution de compromis 14

Format J (2/3) 31 26 25 Op (6) Ex : j 1 target address (26 bits) Que représente chacun des champs d une instruction? op : même signification (et même localisation) que dans les formats R et I, spécifie complètement l opération target address : adresse mémoire (les autres champs qui restent sont combinés pour spécifier une adresse «la plus large possible») Comment fabrique-t-on l adresse sur 32 bits? 15

Format J (3/3) Le champ «target address» spécifie 26 des 32 bits Comme les instructions sont des mots de 32 bits, on peut supposer (imposer) qu elles soient alignées à des frontières de mots les 2 bits de poids faibles sont donc toujours à on peut donc spécifier 28 des 32 bits de l adresse Où trouver les 4 bits restants? MIPS a choisi de prendre les 4 bits de poids forts du registre PC New PC = PC[31..28] & (target address) & (où & est la concaténation de chaîne de bits) on ne peut donc pas aller n importe où en mémoire! («pages» de 256M octets) mais c est suffisant 99,99% du temps : les programmes ne sont pas si longs! (mais il faut bien positionner le début du programme) si on veut absolument spécifier les 32 bits de l adresse, il est possible de charger l adresse dans un registre et d utiliser les instructions jr et jalr (voir plus loin) 16

Langage Machine : l exemple du MIPS R2 Les registres les 3 formats d instructions R I 31 26 25 21 2 16 15 11 1 6 5 op (6) rs(5) rt(5) rd(5) shamt(5) funct(6) 31 26 25 21 2 16 15 op (5) rs (5) rt (5) Immediate (16) J Op (6) 31 26 25 target address (26 bits) Les modes d adressage Le répertoire des instructions 17

Modes d adressage (1/4) Le MIPS a 5 modes d adressage 1. Direct registre (register) op rs rt rd Registre rs Ex : add $2, $3, $4 add $v, $v1 $a 2. Immédiat (immediate) op rs rt immediate Ex : addi $2, $2, -5 ori $v, $t, 1 nombres signés sur 16 bits ( binaire complément à 2) 18

Modes d adressage (2/4) 3. Basé (base @ssing) op rs rt immediate Mémoire Registre rs + lw $2, 2($3) # $2 M[$3+2] (Load Word) nombre signé sur 16 bits n importe lequel des registres généraux ($ compris) 19

Modes d adressage (3/4) 4. Relatif PC (PC-relative) op rs rt immediate Mémoire PC + Ex : beq $2, $3, -2 # si $2=$3 alors PC PC + (-2)*4 le déplacement est en nombre de mots 2

Modes d adressage (4/4) 5. Pseudo direct Mémoire op target address Mémoire PC & Sur 28 bits Ex : j 1 # PC PC[31..28] & (1 * 4) l adresse est non signée concaténation ajout de deux en poids faibles @ssage Indirect Registre? @ssage direct mémoire? avec l @ssage basé (exercice) 21

Les Instructions du MIPS R2 instructions de transfert instructions arithmétiques et logiques instructions de comparaison et branchement instructions d appel de procédure instructions du coprocesseur flottants instructions d appel système l instruction nop (no operation) 22

Instructions de transfert (1/2) Transfert reg. généraux - mémoire : Load et Store lw, sw : Load Word, Store Word - lw $2, 2($3) # $2 M[$3+2] (Format I) 31 26 25 21 2 16 15 35 3 2 2 = xc4 - sw $ra, -4($sp) # M[$sp-4] $ra (Format I) ($ra = $31 et $sp = $29) 31 26 25 21 2 16 15 43 29 31-4 = xfffc 23

Instructions de transfert (2/2) Octets et 1/2 mots lb, sb (byte) lbu (load byte unsigned) lh, sh (half word) lhu (load half unsigned) Dans le cas d un «load» on charge les poids faibles du registre MAIS le reste du registre (poids forts) est également touché : lbu et lhu mettent les poids forts à lb et lh font l extension de signe (mettent le «bit de signe» de l octet ou du 1/2 mot dans les poids forts) 24

Chargement d une constante Load Upper Immediate (lui Rt, immediate) on ne peut spécifier qu une constante sur 16 bits la constante est chargée dans les 16 bits de poids forts du registre Rt les bits de poids faibles de Rt sont mis à Combiné avec ori, permet de charger une constante de 32 bits dans un registre comment réaliser $2 x1fc4a6? en deux instructions à l aide de lui et ori lui $2, x1f ori $2, $2, xc4a6 On ne peut pas utiliser l addition à la place de ori addi fait toujours l extension de signe avant l addition xc4a6 devient FFFFC4A6! 25

Load et store «non alignées»(1/5) lw et sw doivent spécifier des adresses multiples de 4 (frontières de mots) simplifie le matériel d accès à la mémoire dans le cas de «non alignement» : il y a une erreur à l exécution signalée par le mécanisme d exception (voir plus loin) MIPS offre la possibilité d accéder à un mot rangé de part et d autre d une frontière de mots (mais en 2 instructions) instructions load et store «non alignées» : lwl (Load Word Left), lwr (Load Word Right), swl (Store Word Left), swr (Store Word Right) 26

Bonus Load et store «non alignées» (2/5) Load Word Left (lwl) Mémoire big-endian 8 9 1 11 A B C D $24 avant @ 4 @ 4 5 6 7 1 2 3 1 2 3 D $24 après lwl $24, 1($) l autre partie du registre reste inchangée 27

Bonus Load et store «non alignées» (3/5) Load Word Right (lwr) Mémoire big-endian 8 9 1 11 4 5 6 7 1 2 3 lwr $24, 4($) A B C A B C 4 D $24 avant $24 après l autre partie du registre reste inchangée lwl et lwr s utilisent conjointement 28

Bonus Load et store «non alignées» (4/5) Store Word Left (swl) Mémoire big-endian avant A B C D $24 @ 4 @ 8 9 1 11 4 5 6 7 1 2 3 après swl $24, 2($) @ 4 @ 8 9 1 11 4 5 6 7 1 A B 29

Bonus Load et store «non alignées» (5/5) Store Word Right (swr) Mémoire big-endian avant A B C D $24 @ 4 @ 8 9 1 11 4 5 6 7 1 2 3 après swr $24, 5($) @ 4 @ 8 9 1 11 C D 6 7 1 2 3 swl et swr s utilisent conjointement 3

Autres inst. de transfert (1/2) Load et store des registres des coprocesseurs 4 coprocesseurs ( : contrôle, 1: flottants, ) instructions lwcz (z =, 1, 2, 3) instructions swcz (z =, 1, 2, 3) Transfert entre High/Low et les registres généraux move from High : mfhi Rd move from Low : mflo Rd move to High : mthi Rd move to Low : mtlo Rd 31

Autres inst. de transfert (2/2) Transfert entre registres généraux et registres des coprocesseurs Move From Coprocessor : mfcz Rt, Rd (z =, 1, 2, 3) Move To Coprocessor : mtcz Rt, Rd (z =, 1, 2, 3) les instructions mfc et mtc sont privilégiées Il n y a pas d instruction de transfert entre registres généraux! $3 $4 se fait par add $3, $4, $ 32

Inst. arithmétiques (1/5) add Rd, Rs, Rt addu Rd, Rs, Rt # add unsigned ex : addu $2, $3, $4 31 26 25 21 2 16 15 11 1 6 5 3 4 2 addu est l addition non signée : pour MIPS sans test de débordement de capacité! 33 33

Inst. arithmétiques (2/5) addi Rt, Rs, imm addiu Rt, Rs, imm # add immediate # add immediate unsigned ex : addiu $2, $3, xffff 31 26 25 21 2 16 15 9 3 2 xffff Il y a extension de signe de l opérande «imm» avant addition sans test de débordement (cas addiu) ou avec test de débordement (cas addi) 34

Inst. arithmétiques (3/5) sub Rd, Rs, Rt subu Rd, Rs, Rt # opérandes signés # unsigned : opérandes non signés ex : subu $2, $3, $4 # $2 $3 - $4 (sans test de débordement) 31 26 25 21 2 16 15 11 1 6 5 3 4 2 x23 = 35 Il n y a pas de variante avec opérande immédiat pour sub Pourquoi? addi et addiu suffisent! une «pseudo instruction» existe en langage d assemblage et est traduite par l assembleur 35

Inst. arithmétiques (4/5) mult Rs, Rt multu Rs, Rt # multiply unsigned ex : mult $2, $3 # Hi,Lo $2 * $3 (opérandes non signées) 31 26 25 21 2 16 15 11 1 6 5 2 3 x18=24 Il n y a pas de variante avec opérande immédiate pour mult comment multiplier par une constante? La transférer d abord dans un registre! une «pseudo instruction» existe en langage d assemblage et est traduite par l assembleur (en utilisant $1) ex : mult $2, x12 est traduite par addi $at, $, x12 mult $2, $at Le résultat étant sur 64 bits, il ne peut pas y avoir de débordement! 36

Inst. arithmétiques (5/5) div Rs, Rt divu Rs, Rt # divide unsigned ex : div $2, $3 # Lo quotient ($2 / $3); High reste ($2 / $3) 31 26 25 21 2 16 15 11 1 6 5 2 3 Il n y a pas de débordement En cas de division par zéro, le résultat n est pas défini x1a=26 37

Instructions logiques and Rd, Rs, Rt andi Rs, Rt, immediate # and immediate ex : and $2, $3, $4 # $2 $3 & $4 (Et bit à bit - Et logique sur vecteur) 31 26 25 21 2 16 15 11 1 6 5 3 4 2 x24 = 36 Dans le cas andi l opérande sur 16 bits est étendu sur 32 bits en mettant des dans les poids forts (the immediate operand is zero extended) Autres instructions logiques : Ou (or Rd, Rs, Rt et ori Rs, Rt, immediate) Ou exclusif (xor Rd, Rs, Rt et xori Rs, Rt, immediate) Non Ou (nor Rd, Rs, Rt) 38

Inst. de décalage (1/2) Déplacer (décaler), d un nombre de bits donné, tous les bits d un mot vers «la droite» ou vers «la gauche» ex: décalage à droite de 8 bits 11 1 1 11 1 11 11 11 1 1 11 1 1111 1111 11 1 1 11 1 ex: décalage à gauche de 8 bits 1 1 11 1 11 11 111 1 logique arithmétique 11 1 11 11 111 1 Décalage arithmétique (à droite) : on copie le bit de poids forts (division par une puissance de 2) 39

Inst. de décalage (2/2) Nombre de bits à décaler dans l instruction : sll (Shift Left Logical) srl (Shif Right Logical) sra (Shift Right Arithmetic) ex : sra Rd, Rt, sa 31 26 25 21 2 16 15 11 1 6 5 Rt Rd Nombre de bits à décaler dans un registre : sa sllv (Shift Left Logical Variable) srlv (Shif Right Logical Variable) srav (Shift Right Arithmetic Variable) ex : sra Rd, Rt, Rs x3 = 3 31 26 25 21 2 16 15 11 1 6 5 Rs Rt Rd x4 = 4 4

Instructions de branchement (1/2) Saut relatif conditionnel beq Rs, Rt, offset # Branch on EQual bne Rs, Rt, offset # Branch on Not Equal Ex : beq $2, $3, -2 # si $2=$3 alors PC PC + (-2)*4 Où pointe PC? Sur l instruction en cours d interprétation? Sur l instruction suivante? Pour le MIPS : instruction suivante Comment réaliser un saut relatif inconditionnel? Prendre Rs = Rt (ex : Beq $, $, offset) Autres instructions de saut relatif : bgtz (>), bgez (>= ), bltz (< ), blez (<=) Déplacement en nb d instructions, mémoire adressée par octets (ici z signifie zéro et non numéro de coprocesseur comme dans mfcz, mtcz...) 41

Instructions de branchement (2/2) Saut absolu inconditionnel j target jr Rs # Jump # Jump Register (PC Rs) j 1 # PC PC[31..28] & (1 * 4) l adresse est non signée concaténation ajout de deux en poids faibles 42

Instructions de comparaison Comparaison signée slt Rd, Rs, Rt # Set on Less Than slti Rt, Rs, immediate # slt Immediate Ex : slt $2, $3, $4 # si $3 < $4 alors $2 1 sinon $2 Comparaison non signée sltu Rd, Rs, Rt # Set on Less Than Unsigned sltiu Rt, Rs, immediate # slt immediate unsigned Ex : sltiu $2, $3, -1 # si $3 < xff9c alors $2 1 sinon $2 La comparaison est faite en considérant les opérandes comme des entiers non signés. Pour sltiu il y a extension de signe de l opérande sur 16 bits avant la comparaison (xff9c ==> xffffff9c) 43

MIPS et codes conditions le CPU (partie sur les entiers) du MIPS n a pas de code condition des registres généraux sont positionnés à des valeurs particulières lors des instructions de comparaisons (ex. slt - Set on Less Than ) les instructions de branchement réalisent en même temps les comparaisons et les branchements les débordements sont directement signalés par des exceptions la partie coprocesseur flottants a un code condition 44

Inst. d appel de procédure (1/2) Branchements vs. appels de procédure BR BR appel Retour à l appelant branchement = modification du compteur ordinal appel de procédure = sauvegarde adresse de retour + branchement (l appel de procédure doit sauvegarder la valeur du compteur ordinal pour pouvoir retourner à l instruction qui suit l appel) du point de vue de la partie du programme où s effectue l appel de procédure, l appel est considéré comme une instruction qui prend «un certain temps» et qui a un «effet complexe» sur l état de la machine 45

Inst. d appel de procédure (2/2) Appel avec saut absolu inconditionnel jal target jalr Rs jalr Rd, Rs # Jump And Link ($ra PC ; PC target) # JAL Register ($ra PC ; PC Rs) # Rd PC ; PC Rs Comment retourner à l appelant? jr $ra (à condition de ne pas avoir modifié $ra!) Appel avec saut relatif conditionnel bltzal Rs, offset # branch on less than zero and link bgezal Rs, offset # branch on greater than or equal zero and link «link» signifie garder une liaison avec l appelant calcul d adresse de branch. : (voir inst. branch. Relatif) appel impossible au delà de 32 K instructions 46

Inst. coprocesseur flottants (1/2) Instructions de «Format R» 31 26 25 21 2 16 15 11 1 6 5 cop1 (6) fmt(5) ft(5) fs(5) fd(5) funct(6) Que représentent les champs d une instruction? cop1 = x11 (instructions coprocesseur 1) fmt : format ( : simple précision, 1 : double précision) fs : le «registre flottants» contenant le premier opérande ft : le «registre flottants» contenant le deuxième opérande fd : le «registre flottants» qui contiendra le résultat de l opération funct : spécifie l opération Ex : add.s $f, $f2, $f4 # $f $f2 + $f4 31 26 25 21 2 16 15 11 1 6 5 x11 4 2 add.d $f, $f2, $f4 # $f,$f1 $f2,$f3 + $f4,$f5 31 26 25 21 2 16 15 11 1 6 5 x11 1 4 2 47

Inst. coprocesseur flottants (2/2) Autres instructions (voir doc Assemblers, Linkers, and the SPIM Simulator ) load, store (lwc1, stwc1) soustraction valeur absolue comparaison (positionnent un code condition) test du code condition et branchement multiplication, division conversion arrondis (floor, ceil, round, truncate, )... Architecture MIPS32 48

Instructions relatives aux exceptions Architecture MIPS-I Appel système «sans paramètre dans l inst.» : syscall 31 26 25 21 2 16 15 11 1 6 5 Appel système «avec paramètre dans l inst.» : break <code> 31 26 25 1 9 6 5 <code> (16 bits) Restauration du registre d état : rfe (Return From Exception) xxxx xd xc 31 26 24 5 x1 1 Instruction privilégiée (ne peut être exécutée qu en mode «superviseur») -- cf partie O.S. x2 49

L instruction NOP No OPeration (instruction qui ne fait rien!) en fait une pseudo instruction réalisée par sll $,$, A quoi peut servir NOP? attente active sans trop modifier l état du processeur remplir les «délais» des instructions de branchement différé et chargement différé dans certaines implantations pipelinées du jeu d instructions 5

Utilisation de NOP Une tâche (une durée incompressible) 4,5 cycles 2 cycles Etant donnée une tâche à réaliser : celle-ci a une durée incompressible en fonction de la technologie période d horloge courte ==> beaucoup de cycles pour la tâche période d horloge longue ==> peu de cycles pour la tâche Le temps d exécution (la durée) d une instruction est donné par la formule D = C * T où C est le nombre de cycles d horloge par instruction T est la durée du cycle (période d horloge) 51

Implantation pipelinée On ne peut pas accélérer l exécution d une instruction Peut on accélérer l exécution d un programme (suite d instructions)? oui par implantation pipelinée on divise le cycle «fetch decode exécute» en plusieurs unités fonctionnelles qui peuvent «travailler» en même temps pour le compte de plusieurs instructions Interprétation des instructions du MIPS en 5 étapes Instruction fetch (lecture instruction) IF ID EX MEM WB Instruction Decode (décodage, lecture des opérandes) Execute Accès à la mémoire Ecriture des registres 52

Chargement différé (1/2) temps $5 prêt Microprocessor with Interlocked Pipeline Stages IF ID EX MEM WB IF ID EX MEM WB lw $5, 24($8) add $2, $3, $7 IF ID EX MEM WB add $2, $5, $6 $5 nécessaire le résultat du load ne peut pas être utilisé dans les 3 instructions suivantes le nombre d instructions qui doivent séparer le load et l utilisation du résultat est le délai de chargement (load delay) comment programmer une telle machine? dès qu on s aperçoit qu on a besoin d un résultat non prêt : bloquer tout le pipeline laisser la gestion des délais de chargement au programmeur (compilateur) qui insère des instructions utiles ou des NOP on parle de chargement différé (delayed loads) Il y a également des branchements différés (delayed branchs) des optimisations permettent de réduire les délais de blocage 53

Chargement différé (2/2) temps IF ID EX MEM WB valeur $5 prête lw $5, 24($8) IF ID EX MEM WB IF ID EX MEM WB add $2, $3, $7 add $2, $5, $6 $5 nécessaire Délai de chargement de 1 54

Fin du chapitre II 55