Plan du cours 1 2 3 4 5 6 7 8 9 10 11 12 Histoire de l’ordinateur Présentation générale Représentation interne des informations Encodage de l’information Circuits logiques Composants électroniques Mémoires Unité centrale de traitement Superordinateurs et microprocesseurs Entrées / sorties Assembleur Introduction au langage MIPS Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 260 / 294 De quoi allons-nous parler et quel chemin allons nous suivre ? Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 261 / 294 Objectifs du chapitre 1 Illustrer la programmation assembleur avec un vrai language. 2 Programmer de petits programmes MIPS et les executer dans un simulateur. 3 Maı̂triser les appels de procédures et la récursion en MIPS. apple 4 . Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 262 / 294 Ressources Sur la base des notes de cours de Christophe Fiorio, JeanMarc Talbot. Computer organization and design : the hardware/software interface, David A. Patterson & John L. Hennessy, Morgan Kaufmann, 4th edition, 2008. Assemblers, Linkers, and the SPIM Simulator, James R. Larus. Documentation on the MIPS32 architecture , MIPS Technologies, 2010. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 263 / 294 Les machines MIPS Le langage MIPS est l’assembleur des processeurs MIPS I I I MIPS I à V ; MIPS32 ; MIPS64. Introduit au début des années 1980 ; Développé par MIPS Technologies ; Processeur RISC ; Existe en 32 et 64 bits ; Souvent utilisé comme support dans le milieu académique ; Processeur des machines NEC, SGI (supercalculateurs), Sony PS,PS2, PSP, Nintendo (console), FreeBox, NeufBox (routeur) ; Nous allons nous intéresser à la norme du langage MIPS32. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 264 / 294 A-t-on des machines MIPS sous la main ? Code ass. MIPS Non ⇒ Utilisation d’une machine virtuelle : un programme qui simule de manière logicielle le fonctionnement d’une machine réelle. Il existe plusieurs logiciels qui sont des simulateurs de machine MIPS e.g., SPIM, MIPSter, MARS, OVPsim, GXemul. Compilateur prog. en langage machine MIPS Interpreteur code machine local + exécution Nous utiliserons : SPIM (http://pages.cs.wisc.edu/~larus/spim.html) MARS (http://courses.missouristate.edu/KenVollmar/ MARS/index.htm) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 265 / 294 MARS, un environnement de programmation MIPS (1/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 266 / 294 MARS, un environnement de programmation MIPS (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 267 / 294 Généralités MIPS, règles syntaxique Nom de fichier programme suffixé par .s ; Toujours une seule instruction par ligne ; # préfixe un commentaire ; Les entiers sont notés soit en décimal soit en hexadécimal (alors préfixé par 0x) ; Les chaı̂nes de caractères sont simplement entre guillemets et peuvent contenir des caractères d’échappement ; Les labels correspondent à une adresse mémoire dans le segment texte ou données (déclarés avec ” :”). Instructions de 32 bits, 3 types d’instructions différentes ; Mémoire adressable de 232 octets ; Mot mémoire de 32 bits ; 32 registres de 32 bits + CO + ACC (hi & lo) ; Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 268 / 294 Exemple Le opérations arithmétiques MIPS OPA a,b,c # a := b OPA c avec OPA ={add, sub, ...} f := (g + h) − (i + j) add add sub $t0,$t1,$t2 $t3,$t4,$t5 $v0,$t0,$t3 Clement Jonquet (Polytech’ Montpellier) # $t0 := $t1+$t2 # $t3 := $t4+$t5 # $v0 := $t0-$t3 Architecture des ordinateurs IG3 2013-2014 269 / 294 Registres MIPS Il existe 32 registres de 32 bits numérotés $0, . . . , $31 Nom Numéro Description $zero 0 Constante 0 $at 1 Réservé à l’assembleur Évaluation d’une expression et résultats d’une $v0,$v1 2-3 fonction $a0,. . .,$a3 4-7 Arguments de sous-programmes $t0,. . .,$t7 8-15 Valeurs temporaires (sauvées par l’appelant) $s0,. . .,$s7 16-23 Valeurs temporaires (sauvées par l’appelé) $t8,$t9 24-25 Valeurs temporaires (sauvées par l’appelant) $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 Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 270 / 294 Accès mémoire MIPS Il existe des instructions de transfert vers/de la mémoire centrale (e.g., lw et sw) ; La mémoire est vue comme un tableau où l’adresse serait l’indice du tableau ; Mot mémoire de 32 bits ; Mémoire adressable de 232 octets (4Go) ⇒ 230 (=1073741824) mots de 32 bits ; Adresse sur 1 octet ⇒ Les mots mémoires sont adressés par des multiples de 4 (i.e., le CO est incrémenté de 4 à chaque cycle). Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 271 / 294 Adressage des opérandes Direct - L’instruction contient des labels ; j etiquette1 # prochain instruction à l’étiquette1 Immédiat - L’instruction contient la valeur ; addi $a0, $t1, 4 # a0:= t1+4 Registre - Le registre contient la valeur ; add $a0, $t1, $t2 # a0:= t1+t2 Implicite - Le code opération indique où se trouve l’opérande ; mult $t1, $t2 # acc:= t1*t2 Indirect Registre avec déplacement - L’adresse de la valeur est obtenue par l’addition d’un entier a la valeur du registre ; lw $t0,4($a1) # Le contenu de à l’adresse dans $a1+4 est chargé dans $t0 Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 272 / 294 Organisation de la mémoire Un programme utilisateur utilise 3 sous-segments : Le segment texte contient le code exécutable (i.e., chargé en mémoire). Le segment données contient les données globales manipulées par le programme (adresse croissante). Le segment pile contient la pile d’execution du programme (adresse décroissante). La mémoire n’est pas infinie Attention à la rencontre entre la pile et le tas ! Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 273 / 294 Instructions MIPS Une instruction MIPS est codée en binaire par un mot de 32 bits ; Les 32 bits sont décomposés en champs, chaque partie ayant une signification particulière, codant ainsi soit l’opération, soit un opérande numérique, soit une adresse ; Avoir un nombre fixe d’opérande est plus simple à gérer ; 3 types d’instructions différentes : I I I Instruction de type R (registre) ; Instruction de type I (transfert) ; Instruction de type J (saut) ; Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 274 / 294 Format des instructions MIPS (1/3) Instruction de type R (registre) Les 32 bits sont décomposés de la manière suivante : op 6 bits rs 5 bits rt 5 bits rd 5 bits decval 5bits fonction 6bits op : code opération correspondant à l’instruction rs : premier registre opérateur source rt : deuxième registre opérateur source rd : registre opération destination (reçoit le résultat de l’opération) decval : valeur du décalage fonction : variante de l’opération décrite par op Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 275 / 294 Format des instructions MIPS (2/3) Instruction de type I (transfert) Les 32 bits sont décomposés de la manière suivante : op 6 bits rs 5 bits rt 5 bits adresse 16 bits op : code opération correspondant à l’instruction rs : premier registre opérateur source rt : deuxième registre opérateur source adresse : adresse mémoire Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 276 / 294 Format des instructions MIPS (3/3) Instruction de type J (saut) Les 32 bits sont décomposés de la manière suivante : op 6 bits adresse 26 bits op : code opération correspondant à l’instruction adresse : adresse mémoire Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 277 / 294 Exemples d’instructions MIPS Exemple d’instruction de type R 000000 10001 10010 01000 00000 100000 0 ⇒ add 17 18 8 0 32 $8,$17,$18 en MIPS Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 278 / 294 Type d’instructions : arithmétiques type instruction add Rd,Rs,Rt addu Rd,Rs,Rt addi Rd,Rs,Imm addiu Rd,Rs,Imm sub Rd,Rs,Rt mult Rs,Rt multu Rs,Rt mul Rd,Rs1,Rs2 arithmétiques div Rs,Rt div divu rem abs neg rol ror Rd,Rs1,Rs2 Rd,Rs1,Rs2 Rd,Rs1,Rs2 Rd,Rs Rd,Rs Rd,Rs1,Rs2 Rd,Rs1,Rs2 Clement Jonquet (Polytech’ Montpellier) addition addition - sans déb. addition d’un immédiat addition - sans déb. soustraction multiplication multiplication non signée multiplication - sans déb. division division division non signée - sans déb. reste de la division valeur absolue opposé d’une valeur rotation vers la gauche rotation vers la droite Architecture des ordinateurs commentaire Rd←Rs+Rt Rd←Rs+Rt Rd←Rs+Imm Rd←Rs+Imm Rd←Rs-Rt [hi,lo]←Rs×Rt [hi,lo]←Rs×Rt Rd←Rs1×Rs2 lo←Rs ÷ Rt hi←Rs mod Rt Rd←Rs1 ÷ Rs2 Rd←Rs1 ÷ Rs2 Rd←Rs1 mod Rs2 Rd←|Rs| Rd←-Rs Rd←rot de Rs1 de la distance dans Rs2 IG3 2013-2014 279 / 294 Type d’instructions : logiques logiques and Rd,Rs,Rt andi Rd,Rs,Imm or Rd,Rs,Rt ori Rd,Rs,Rt nor Rd,Rs,Rt xor Rd,Rs,Rt xori Rd,Rs,Imm not Rd,Rs et logique et logique immédiat ou logique ou logique immédiat nor logique xor logique xor logique immédiat non logique sll Rd,Rs,Sa sllv Rd,Rt,Rs srl Rd,Rs,Sa srlv Rd,Rt,Rs sra Rd,Rs,Sa srav Rd,Rt,Rs décalage décalage décalage décalage décalage décalage Clement Jonquet (Polytech’ Montpellier) logique à gauche immédiat logique à gauche logique à droite immédiat logique à droite arith. à droite immédiat arith. à droite Architecture des ordinateurs Rd←Rs.Rt Rd←Rs.Imm Rd←Rs+Rt Rd←Rs+Imm Rd←Rs + Imm Rd←Rs⊕Rt Rd←Rs⊕Imm Rd←Rs ; négation bit à bit rang du décalage défini par Rs idem idem IG3 2013-2014 280 / 294 Type d’instructions : chargement et rangement mémoire lb Rt,@ chargement lw Rt,@ ld Rt,@ sw Rt,@ sd Rt,@ chargt de la partie gauche chargt de la partie droite chargement d’un immédiat chargement de la partie de poids faible d’un immédiat dans la partie de poids fort d’un registre chargement d’une adresse rangement de l’octet de poids faible d’un registre rangement d’un mot rangement d’un mot double swl Rt,@ swt Rt,@ rangt de la partie gauche rangt de la partie droite lwl Rt,@ lwt Rt,@ li Rd,Imm lui Rt,Imm la Rt,@ sb Rt,@ rangement chargement d’un octet dans l’octet de poids faible d’un registre chargement d’un mot chargement d’un mot double Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs Rt←M[@] Rt←(M[@],M[@+4]) Rt←(M[@],M[@+4]) Rt+1←(M[@+4],M[@+8]) Rt←(M[@],M[@+2]) Rt←(M[@+2],M[@+4]) Rd←Imm Rt←Imm×216 Rt←@ M[@] ←Rt (M[@],M[@+4]) ←Rt (M[@],M[@+4]) ←Rt(M[@+4],M[@+8]) ←Rt+1 (M[@],M[@+2]) ←Rt (M[@2],M[@+4]) ←Rt IG3 2013-2014 281 / 294 Type d’instructions : transfert de données transfert de données move Rd,Rs transfert Rd←Rs mfhi Rd mflo Rd transfert depuis hi transfert depuis lo Rd←hi Rd←lo Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 282 / 294 Type d’instructions : comparaison comparaison seq Rd,Rs1,Rs2 sne Rd,Rs1,Rs2 sgt Rd,Rs1,Rs2 sge Rd,Rs1,Rs2 slt Rd,Rs1,Rs2 sle Rd,Rs1,Rs2 slti Rd,Rs,Imm Clement Jonquet (Polytech’ Montpellier) positionner positionner positionner positionner positionner positionner positionner si si si si si si si égal différent supérieur supérieur ou égal inférieur inférieur ou égal inférieur à l’immédiat Architecture des ordinateurs Rd=Rs1==Rs2?1:0; Rd=Rs1!=Rs2?1:0; Rd=Rs1>=Rs2?1:0; Rd=Rs1>=Rs2?1:0; Rd=Rs1<=Rs2?1:0; Rd=Rs1<=Rs2?1:0; Rd=Rs<=Imm?1:0; IG3 2013-2014 283 / 294 Type d’instructions : branchement conditionnel et saut beq Rs,Rt,label branchement conditionnel bne Rs,Rt,label bgt Rs,Rt,label bge Rs,Rt,label blt Rs,Rt,label ble Rs,Rt,label j label saut jal label jr Rs Clement Jonquet (Polytech’ Montpellier) branchement si égal if(Rs==Rt) $pc ←@ branchement si différent branchement si supérieur branchement si supérieur ou égal branchement si inférieur branchement si inférieur ou égal saut inconditionnel saut inconditionnel avec lien saut inconditionnel par registre if(Rs!=Rt) $pc ←@ if(Rs>Rt) $pc ←@ if(Rs>=Rt) $pc ←@ if(Rs<Rt) $pc ←@ if(Rs<=Rt) $pc ←@ $pc ←@ $pc ←@ $ra←@retour $pc ←@dans Rs Architecture des ordinateurs IG3 2013-2014 284 / 294 Type d’instructions : exception et interruption exception rfe et interruption syscall nop Clement Jonquet (Polytech’ Montpellier) retour d’exception restitue le registre État appel système le registre $v0 contient le numéro de l’appel système ne rien faire ! aucune opération Architecture des ordinateurs IG3 2013-2014 285 / 294 Type d’instructions : virgule flottante (1/2) valeur absolue flottante simple Fd←|Fs| abs.d Fd,Fs instructions add.s Fd,Fs,Ft flottantes add.d Fd,Fs,Ft bc1t label valeur absolue flottante double addition flottante simple addition flottante double branchement si drapeau flottant vrai bc1f branchement si drapeau flottant faux Fd←|Fs| Rd←Rs+Rt Rd←Rs+Rt branchement conditionnel à l’adresse du label branchement conditionnel à l’adresse du label drapeau flottant à 1 si Fs==Ft drapeau flottant à 1 si Fs==Ft drapeau flottant à 1 si Fs<Ft drapeau flottant à 1 si Fs<=Ft drapeau flottant à 1 si Fs<Ft drapeau flottant à 1 si Fs<=Ft abs.s Fd,Fs label c.eq.s Fs,Ft test si égalité simple c.eq.d Fs,Ft test si égalité double c.lt.s Fs,Ft test si inférieur simple c.le.s Fs,Ft test si inférieur ou égal simple c.lt.d Fs,Ft test si inférieur double c.le.d Fs,Ft test si inférieur ou égal double Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 286 / 294 Type d’instructions : virgule flottante (2/2) cvt.d.s Fd,Fs conversion simple en double cvt.s.d Fd,Fs instructions flottantes cvt.s.w Fd,Fs conversion double en simple cvt.d.w Fd,Fs conversion entier en double cvt.w.s Fd,Fs conversion simple en entier cvt.w.d Fd,Fs conversion double en entier mul.s mul.d div.s div.d neg.s neg.d l.s l.d mov.s Fd,Fs,Ft Fd,Fs,Ft Fd,Fs,Ft Fd,Fs,Ft Fd,Fs,Ft Fd,Fs,Ft Fd,@ Fd,@ Fd,Fs mov.d Fd,Fs multiplication flottante simple multiplication flottante double division flottante simple division flottante double opposé d’un nombre simple flottant opposé d’un nombre simple flottant chargement flottant simple précision chargement flottant double précision transfert d’un nombre flottant simple précision transfert d’un nombre flottant double précision Clement Jonquet (Polytech’ Montpellier) conversion entier en simple Architecture des ordinateurs simple Fs; Fd←(double)Fs double Fs; Fd←(simple)Fs int Fs; Fd←(simple)Fs int Fs; Fd←(double)Fs simple Fs; Fd←(int)Fs double Fs; Fd:=(int)Fs Fd←Fs×Ft Fd←Fs×Ft Fd←Fs/Ft Fd←Fs/Ft Fd←- Fs Fd←- Fs Fd←M[@] Fd←M[@] Fd←Fs Fd←Fs IG3 2013-2014 287 / 294 e Exemple de branchement Les instructions de test s’appelle, en langage conditionnels : beq, bne, bgt, bge, blt, ble exercice : coder le programme suivant en la if i/=j then f :=f+h ; end if f :=f-i ; Rs mod Rt s1 ou Rs2 dépend de L1 : beq add sub $19,$20,L1 $16,$16,$18 $16,$16,$19 39/112 Clement Jonquet (Polytech’ Montpellier) #aller en L1 si i=j #f :=f+h Christophe Fiorio, EPU Montpellier Architecture des ordinateurs 2008-2009 IG3 2013-2014 288 / 294 Sous-programmes MIPS ne fournit pas d’instruction permettant de définir des sous-programmes ou des macros. On doit utiliser des sauts/branchements qui modifient le CO : jal saute à une étiquette et garde un lien sur le lieu d’exécution dans le registre $31 ; j saute sans sauvegarder l’adresse de retour ; jr saute à une adresse stockée dans un registre. Lors de l’appel de sous-programmes : On utilise les registres 4 à 7 pour le passage de paramètres ; $t0-$t9 sont sauvés par l’appelant ; $s0-$s7 sont sauvés par l’appelé. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 289 / 294 Appels de sous-programmes imbriqués Utilisation d’une pile (LIFO) pour le passage de paramètre et la sauvegarde de l’adresse de retour. On utilise le registre $29 comme sommet de pile (registre SP) ; Il n’y a pas d’instruction PUSH et POP ; Équivalent de PUSH et POP en MIPS push : pop : addi sw jal lw subi $29,$29,4 $31,0($29) procedure $31,0($29) $29,$29,4 Clement Jonquet (Polytech’ Montpellier) # # # # # sommet de pile ajusté sauvegarde de l’adresse de retour saut à la procédure restauration de $31 ajustement du sommet de pile Architecture des ordinateurs IG3 2013-2014 290 / 294 Appels de sous-programmes : exemple [Talbot] (1/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 291 / 294 Appels de sous-programmes : exemple [Talbot] (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 292 / 294 Retour sur les objectifs du cours 1 Décrire l’organisation interne des ordinateurs et son evolution. 2 Modéliser le fonctionnement des ordinateurs. 3 Représenter des données alphanumériques. 4 Modéliser le calcul arithmétique et logique. 5 Écrire un petit programme en language assembleur. 6 Appréhender les principes généraux sous-jacents à la programmation. Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 293 / 294 Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2013-2014 294 / 294