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