! INSA-3IF Architecture des Ordinateurs! Séance 1! Christian Wolf,! INSA-Lyon, Dép. IF! # 1 C. Wolf Au Menu! CM1! ISA : Introduction. Jeux d’instructions, assembleur.! TD! La « Micromachine » : réalisation d’un processeur simple sur papier! CM2! ISA : Encodage; Histoire! TP! Réalisation de la micromachine sous Logicworks! CM3! Approfondissements, typologie, comparaisons! CM4! Parallélisme : pipeline, processeurs superscalaires ! CM5! Hiérarchie mémoire! TP! Prise en main du controleur MSP 430 CM6! Les GPU ! TD! Micromachine sur papier : les interruptions TP! MSP 430 : pile, timer, interruptions # 2 C. Wolf Bibliographie! Hennessy et Patterson, Architecture des Ordinateurs! # 3 C. Wolf ppels Mon premier ordinateur! hine de von Neumann c’est un processeur relié à une mémoire. adresse Processeur Mémoire données F IGURE 8.1 – Mon premier ordinateur oire est adressable par mot (de 8, 16, 32 ou 64 bits de nos jours), et gra dre de 109 , ou 230 mots). La mémoire est non typée : chaque mot peut êt manières. # 4 C.un Wolf coin sseur exécute le cycle de von Neumann. Pour cela, il garde dans ppels La mémoire! Instrmémoire. 1! hine de von Neumann c’est un processeur relié à une adresse Processeur Instr 2! Instr 3! Instr 4! Instr 5! Instr 6! Mémoire données donnée! donnée! donnée! donnée! donnée! F IGURE 8.1 – Mon premier ordinateur ire est adressable par mot (de 8, 16, 32 ou 64 bits de nos jours), et gra Adressable 9 30par mot (8, 16, 32, 64 bits)! dre de 10 , ou(10 2 9 = mots). Grande 230 mots)!La mémoire est non typée : chaque mot peut êt manières. Non typé! # 5 C.un Wolf coin seur exécute le cycle de von Neumann. Pour cela, il garde dans C’est l’heure de l’historie! An Ajouter le nombre qui est dans la case mémoire n à l’accumulateur! ! En Si le nombre dans l’accumulateur est positif ou nul, exécuter l’instruction dans la case mémoire n; sinon exécuter en séquence (=continuer).! ! Z EDSAC (1949) Arrêter la machine et déclencher la sonnette d’alarme.! # 6 C. Wolf ppels Le cycle de von Neumann! Instrmémoire. 1! hine de von Neumann c’est un processeur relié à une adresse Processeur Instr 2! Instr 3! Instr 4! Instr 5! Instr 6! Mémoire données donnée! donnée! donnée! donnée! donnée! F IGURE 8.1 – Mon premier ordinateur Garder l’adresse de l’instruction courante dans le « Program Counter » (PC)! Lire le contenu la cellule adressée PC!bits de nos jours), et gra ire est 1. adressable parde mot (de 8, 16, 32par oule64 2. 9PC = PC dre de 10 , ou 230+1! mots). La mémoire est non typée : chaque mot peut êt 3. Interpréter contenu comme une instruction, et l’exécuter! manières. 4. Recommencer! # 7 C.un Wolf coin seur exécute le cycle de von Neumann. Pour cela, il garde dans Interprétation d’une instruction! Instr 6! 1110 0001 1010 0000 0011 0000 0000 0111 e1a03007! mov r3, r7 Binaire Hex Code mnémonique ! => « assembleur » # 8 C. Wolf Jeux d’instruction! Objectifs :! - Universel / Turing-complet – permet d’exprimer tout programme exprimable! - Facilite de construire le processeur! - Facilite d’écrire des programmes! Deux familles :! - RISC (Reduced instruction set computer)! – Instructions courtes, toutes de la même taille. ! – Exemples : MIPS, ARM, MSP 430 (traité en TP)! - CISC (Reduced instruction set computer)! – Instructions complexes, de taille variable! – Exemples : x86! # 9 C. Wolf Exemple : x86 (.c è.asm)! gcc –S toto.c # 10 C. Wolf Exemple : x86 (.c è.asm)! Linux : Mac: objdump –d a.out otool -tV a.out # 11 C. Wolf Exemple : x86! Produit avec : http://gcc.godbolt.org # 12 C. Wolf Exemple : ARM! # 13 C. Wolf Le C combine la vitesse de l’assembleur ! avec l’élégance de l’assembleur.! ! (Ancien proverbe des Aztèques)! # 14 C. Wolf L’Importance du jeu d’instructions! 2006 : Apple passe de l’architecture IBM Power à Intel x86! # 15 C. Wolf Usage de la mémoire! Jeux d’instructions mémoire-mémoire :! - Add adresseX, adresseY - Add adresseX, adresseY, adresseZ! Beaucoup de trafic mémoire (lent)! L’adressage des cases mémoire prend beaucoup de place dans l’instruction! Jeux d’instructions registre-mémoire, registre-registre :! - Mov RX, adresseX - Mov adresseX, RX - Add RX adresse1 - Add RX, RY, RZ - …! # 16 C. Wolf ppels Les registres! Instrmémoire. 1! hine de von Neumann c’est un processeur relié à une r2! r0! r1! r5! r3! r4! r8! r6! r7! Processeur r9! r10! r11! r12! r13! r14! adresse Instr 2! Instr 3! Instr 4! Instr 5! Instr 6! Mémoire données donnée! donnée! donnée! donnée! donnée! F IGURE 8.1 – Mon premier ordinateur ire est adressable par mot (de 8, 16, 32 ou 64 bits de nos jours), et gra Non 9 adressables! dre de 10 ou 230 mots). La…)! mémoire est non typée : chaque mot peut êt Peu,nombreux (4, 16, 32 manières. Non typé! # 17 C.un Wolf coin seur exécute le cycle de von Neumann. Pour cela, il garde dans Les registres! Certains registres sont visibles au programmeur/ compilateur.! Certains registres sont gérés automatiquement par le processeur. Lesquels?! ! Solution :! ! - PC (program counter)! - SP (stack pointer)! - Registres internes / non-visibles! # 18 C. Wolf Exemple : ARM! R0! Utilisable*! R1! Utilisable*! R2! Utilisable*! R3! Utilisable*! R4! Utilisable*! R5! Utilisable*! R6! Utilisable*! R7! Utilisable*! R8! Utilisable*! R9! Utilisable*! R10! Utilisable*! R11! Utilisable*! R12! Utilisable*! R13! SP : stack pointer! R14! Link register (return address)! R15! PC : Program counter! Certains registres sont sujets aux conventions (passage de paramètre etc.)! # 19 C. Wolf Cahier de charges #1/2! Si on souhaite construire un jeu d’instruction pour un processeur « Turing complet », quelles sont les instructions à prévoir?! Solution :! - Opérations arithmétiques/logiques! - Opérations de chargement/rangement! - Branchements et branchements conditionnels! # 20 C. Wolf Cahier de charges #2/2! Quelles sont les instructions supplémentaires souhaitables pour un bon fonctionnement?! Solution :! - Opérations arithmétiques/logiques! - Opérations de chargement/rangement! - Branchements et branchements conditionnels! - Opérations d’entrée/sortie! - Manipulation de la pile / appel de fonctions! # 21 C. Wolf Quelques exemples pour ARM! - Opérations arithmétiques/logiques! – – – – add adc sub and Rd, Rd, Rd, Rd, Rn, Rn, Rn, Rn, Rm Rm Rm Rm // with carry - Opérations de chargement/rangement! – – – – mov mov ldr str Rn, Rn, Rn, Rn, Rm #XXXX [Rm] [Rm] // Restrictions … // Rn <- MEM[Rm] // MEM[Rm] <- Rn # 22 C. Wolf Quelques exemples pour ARM! - Branchements et branchements conditionnels! – – – – – – Conditions : état des « flags » Z, N, C etc.! b <dest> beq <dest> // equal bmi <dest> // negative/minus bgt <dest> // greater than bcs <dest> // carry set - Opérations de test! - Cmp Rn, Rm – Les opérations aréthmétiques-logiques peuvent influencer les flags si souhaité : ! • add Rd, Rn, Rm • adds Rd, Rn, Rm # 23 C. Wolf Quelques exemples pour ARM! - Opérations d’entrée/sortie! – Non disponibles sur ARM : memory-mapped I/O! – Certaines architectures disposent d’instructions spécifiques (e.g. x86)! ! - Manipulation de la pile / appel de fonctions! – – – – push <Rn, Rm, …> pop <Rn, Rm, …> call <dest> return # 24 C. Wolf Assembleur : échauffement #1! Quel pourrait être le code « assembleur » produit par un compilateur C pour une architecture choisie ? mov r3, #3 mov r4, #5 add r5, r3, r4! # 25 C. Wolf Assembleur : échauffement #2! Quel pourrait être le code « assembleur » produit par un compilateur C pour une architecture choisie ? mov mov cmp ble r2, #3 r3, #5 r2, r3 .L1: mov r4, #2 b .L2 .L1: mov r4, #3 .L2: # 26 C. Wolf Modes d’adressage! - Comment accéder aux données :! – – – – constantes, contenu des registres, contenu de la mémoire! directement! Indexation (mode « tableau »)! indirect (mode « pointeur »)! - Objectifs : souplesse, minimiser le nombre d’instructions! - Peuvent augmenter le nombre de cycles par instruction! # 27 C. Wolf Quelques exemples pour ARM! - Mode immédiat! – Utilisation d’une valeur concrète, numérique! – mov r2, #3 - Mode registre! – Utilisation d’une valeur venant d’un autre registre! – mov r2, r7 - Mode direct! – Utilisation d’une valeur venant de la mémoire en spécifiant son adresse directement! – ldr r2, #8001 – str r2, #8001 - Mode registre indirect! – L’adresse est stockée dans un registre! – ldr r2, [r3] ! # 28 C. Wolf Quelques exemples pour ARM! - Mode indexé-indirect! - ldr r2, [r3, r4] // r2 <- MEM[r3 + r4] - Mode indirect avec post-increment – ldr r1, [r3], #4 // r1 <- MEM[r3]; r3 += 4 ! - Mode relatif au PC! – – – – b .Label … .Label: La destination du saut vers « .Label » est calculé relatif au PC, donc à l’adresse de l’instruction même. Ce calcul est fait par l’assembleur.! # 29 C. Wolf Modes d’adressage : utilisation! Reproduit de : Hennessy et Patterson # 30 C. Wolf Assembleur : échauffement #3! mov add mov r3, #adresse_arr r0, r3, #40 r2, #0 .L2: ldr cmp add bne r1, [r3], #4 r3, r0 r2, r2, r1 .L2 // r1 <- MEM[r3]; r3 += 4 # 31 C. Wolf Démonstrations en direct! - http://gcc.godbolt.org! – Code simple, sans printf() du résultat, compiler en ARM! – Même code, avec –O3! – Ajouter printf(), avec –O3! – – – – Un code se servant d’un tableau en variable globale! Passer le tableau en variable locale du main! Définir un pointeur vers le premier élément de ce tableau! Quelles sont les différences dans les accès mémoire?! # 32 C. Wolf