Plan du cours 1 Histoire de l’ordinateur 2 Présentation générale 3 Représentation interne des informations 4 Circuits logiques 5 Mémoires 6 Unité centrale de traitement 7 Assembleur 8 Introduction au langage MIPS 9 Entrées / sorties Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 201 / 238 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 2010-2011 202 / 238 Les machines MIPS Le langage MIPS est l’assembleur des processeurs MIPS (jeux d’instructions : 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 2010-2011 203 / 238 A-t-on des machines MIPS sous la main ? Code ass. MIPS Compilateur Non ⇒ Utilisation d’une machine virtuelle : un programme qui simule de manière logicielle le fonctionnement d’une machine réelle. prog. en langage machine MIPS Interpreteur code machine local + exécution Il existe plusieurs logiciels qui sont des simulateurs de machine MIPS e.g., SPIM, MIPSter, MARS, OVPsim, GXemul. Nous utiliserons SPIM (http://pages.cs.wisc.edu/~larus/spim.html) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 204 / 238 Généralités MIPS Instructions de 32 bits, 3 types d’instructions différentes ; Mémoire adressable de 232 octets ; CO et RI de 32 bits ; 32 registres de 32 bits ; Toujours une seule instruction par ligne ; # prefixe un commentaire ; Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 205 / 238 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 2010-2011 206 / 238 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 (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 Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 207 / 238 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) ⇒ 235 bits ⇒ 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 2010-2011 208 / 238 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’instruction, soit un opérande numérique, soit une adresse ; Avoir un nombre fixe d’opérande est plus simple à gérer ; 3 types de format d’instruction 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 2010-2011 209 / 238 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 2010-2011 210 / 238 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 2010-2011 211 / 238 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 2010-2011 212 / 238 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 2010-2011 213 / 238 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étiquesdiv Rs,Rt 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 div Rd,Rs1,Rs2 divu Rd,Rs1,Rs2 rem Rd,Rs1,Rs2 division division non signée (sans déb.) reste de la division abs neg rol ror valeur absolue opposé d’une valeur rotation vers la gauche rotation vers la droite Rd,Rs,Rt Rd,Rs Rd,Rs1,Rs2 Rd,Rs1,Rs2 Clement Jonquet (Polytech’ Montpellier) 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÷Rs2 – si Rs1 ou Rs2 est négatif Rd←– Rs IG3 2010-2011 214 / 238 Type d’instructions : logiques type logiques instruction and Rd,Rs,Rt andi Rd,Rs,Imm or Rd,Rs,Rt ori Rd,Rs,Rt nor Rd,Rs,Rt et logique et logique immédiat ou logique ou logique immédiat nor logique xor Rd,Rs,Rt xori Rd,Rs,Imm not Rd,Rs xor logique xor logique immédiat non logique sll Rd,Rs,Sa sllv Rd,Rt,Rs décalage logique à gauche décalage logique à gauche srl Rd,Rs,Sa srlv Rd,Rt,Rs décalage logique à droite décalage logique à droite sra Rd,Rs,Sa srav Rd,Rt,Rs décalage arithmétique à droite décalage arithmétique à droite Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs commentaire Rd←Rs∧Rt Rd←Rs∧Imm Rd←Rs∨Rt Rd←Rs∨Imm le non ou → Rd←Rs ∨ Imm Rd←Rs⊕Rt Rd←Rs⊕Imm Rd←Rs ; négation bit à bit rang du décalage défini par Rs rang du décalage défini par Rs rang du décalage défini par Rs IG3 2010-2011 215 / 238 Type d’instructions : chargement et rangement mémoire type instruction lb Rt,@ chargement et rangement commentaire chargement d’octet Rt←M[@] lw Rt,@ ld Rt,@ chargement d’un mot chargement d’un mot double Rt←(M[@],M[@+1]) (Rt,Rt+1) ←(M[@],M[@+1],M[@+2], lwl Rt,@ la Rt,@ chargt de la partie gauche d’un mot chargt de la partie droite d’un mot chargement d’un immédiat chargment d’un immédiat dans l’octet de poids fort chargement d’une adresse sb Rt,@ sw Rt,@ sd Rt,@ rangement d’octet rangement d’un mot rangement d’un mot double swl Rt,@ rangt de la partie gauche d’un mot rangt de la partie droite d’un Architecture des ordinateurs mot lwt Rt,@ li Rd,Imm lui Rt,Imm swt Rt,@ Clement Jonquet (Polytech’ Montpellier) Rd←Imm Rt←Imm×21 6 Rt←@ (utilisée avec un label) M[@]←Rt (M[@],M[@+1])←Rt (M[@],M[@+1],M[@+2],M[ ←(Rt,Rt+1) IG3 2010-2011 216 / 238 Type d’instructions : transfert de données type transfert de données instruction move Rd,Rs mfhi Rd mflo Rd mfc1.d Rd,Fs Clement Jonquet (Polytech’ Montpellier) transfert transfert depuis hi transfert depuis lo Transfert d’un mot double depuis le coprocesseur 1 Architecture des ordinateurs commentaire Rd←Rs Rd←hi Rd←lo [Rd,Rd+1]←[Fs,Fs+1] IG3 2010-2011 217 / 238 Type d’instructions : comparaison type instruction seq Rd,Rs1,Rs2 sne Rd,Rs1,Rs2 sgt Rd,Rs1,Rs2 comparaison 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 commentaire 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 2010-2011 218 / 238 Type d’instructions : branchement conditionnel et saut type instruction beq Rs,Rt,label branchement conditionnel bne Rs,Rt,label et saut branchement si égal branchement si différent bgt Rs,Rt,label branchement si supérieur bge Rs,Rt,label branchement si supérieur ou égal blt Rs,Rt,label branchement si inférieur ble Rs,Rt,label branchement si inférieur ou égal j label jal label saut saut avec lien jr Rs saut par registre Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs commentaire if(Rs==Rt) goto label if(Rs!=Rt) goto label if(Rs>Rt) goto label if(Rs>=Rt) goto label if(Rs<Rt) goto label if(Rs<=Rt) goto label saut inconditionnel saut incond. avec $31←@retour saut inconditionnel à l’adresse stockée dans Rs IG3 2010-2011 219 / 238 Type d’instructions : exception et interruption type instruction exception rfe et interruption syscall nop Clement Jonquet (Polytech’ Montpellier) retour d’exception appel système aucune opération Architecture des ordinateurs commentaire restitue le registre État le registre $v0 contient le numéro de l’appel système ne rien faire ! IG3 2010-2011 220 / 238 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 2010-2011 221 / 238 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 2010-2011 222 / 238 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 2010-2011 223 / 238 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 2010-2011 224 / 238 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 2010-2011 225 / 238 Appels de sous-programmes : exemple [Talbot] (1/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 226 / 238 Appels de sous-programmes : exemple [Talbot] (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 227 / 238 Adressage des opérandes en MIPS Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 228 / 238 Exemple de boucle [Talbot] (1/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 229 / 238 Exemple de boucle [Talbot] (2/2) Clement Jonquet (Polytech’ Montpellier) Architecture des ordinateurs IG3 2010-2011 230 / 238