Support de cours
Transcription
Support de cours
Conception et exploitation des processeurs Chargés de cours : Frédéric Pétrot et Sébastien Viardot Année universitaire 2011-2012 Conception et exploitation des processeurs Structure du cours C1 C2 C3 Introduction au VHDL Introduction aux langages d'assemblage pour les ISA x86 et MIPS Conventions pour les appels de fonctions en assembleur x86 et MIPS 2 / 32 Conception et exploitation des processeurs Introduction Plan 1 Introduction 2 Introduction à l'assembleur x86 3 Introduction à l'assembleur MIPS 4 Traduction systématique des structures de contrôle 5 Vue mémoire 6 Informations techniques 3 / 32 Conception et exploitation des processeurs Introduction Introduction Étude du langage d'assemblage de 2 processeurs Intel x86 (pentium) ISA hégémonique, desktops, laptops et serveurs Constructeur Intel a , compatibilité ascendante depuis 1979 Machine CISC : Complex Instruction Set Computer a. www.intel.com MIPS R3000 ISA symbolique RISC : Reduced Instruction Set Computer Constructeur MIPS a , 1988 Importante part de marché dans l'embarqué (networking en particulier), mais nettement moins que ARM b , favori des smartphones et autres tablettes. a. www.mips.com b. www.arm.com 4 / 32 Conception et exploitation des processeurs Introduction Introduction CISC Intel x86 jeu d'instruction prolique , 425 en 2004 sans les extensions multimédia et 64 bits destiné à être programmé par un humain vise un code compréhensible et dense nombreux modes d'adressage opérandes peuvent être des cases mémoire registres spécialisés par le matériel cherche à optimiser la taille du programme par l'utilisation d'instructions complexes 5 / 32 Conception et exploitation des processeurs Introduction Introduction RISC MIPS R3000 jeu d'instruction minimaliste, 65 dans le R3000, moins de 80 dans ses évolutions destiné à être la cible d'un compilateur instruction de taille xe menant à une occupation mémoire du programme plus grande registres à usage général, utilisation logicielle conventionnelle un mode d'adressage unique, architecture load/store opérande = registre 6 / 32 Conception et exploitation des processeurs Introduction Introduction Programmation assembleur Langage traduit en binaire compréhensible par la machine Transformation fondamentalement syntaxique caractéristiques diérentes important de connaître les deux types Attention ! Ne pas confondre les 2 assembleurs ! ! ! 7 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 Plan 1 Introduction 2 Introduction à l'assembleur x86 3 Introduction à l'assembleur MIPS 4 Traduction systématique des structures de contrôle 5 Vue mémoire 6 Informations techniques 8 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 ISA x86 : Registres Registre bits bits 32 bits 15 à 8 7 à 0 %eax %ebx %ecx %edx %esi %edi %esp %ebp %eip %eflags %ah %bh %ch %dh %ax %bx %cx %dx %al %bl %cl %dl %si %di %sp %bp %ip %flags Remarque parfois spécialisé parfois spécialisé parfois spécialisé parfois spécialisé parfois spécialisé parfois spécialisé pointeur de pile pointeur de contexte pointeur d'instruction registre des indicateurs Considérés registres général comme à usage durant ce cours Attention, peuvent sés par être ils utili- implicitement certaines ins- tructions que nous n'étudierons pas 9 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 ISA x86 Adresses Sur 32 bits, de 0x0000_0000 à 0xFFFF_FFFF Données Sur 32, 16 ou 8 bits Instruction contient information de taille Organisation mémoire little endian Valeur 0x12345678 stockée en 0xDEAD_BEEC Adresse Valeur 0xDEADBEEC 0x78 0xDEADBEED 0x56 0xDEADBEEE 0x34 0xDEADBEEF 0x12 10 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 Instructions Sous-ensemble pour commencer, ... Suxes Précisent la taille de la valeur manipulée par l'instruction l (long) : 32 bits w (word) : 16 bits b (byte) : 8 bits Copies entre éléments mémorisants movsuxe source, destination entre registres : movl %eax, %ebx ebx ← eax registre vers mémoire : movb %al, v mem[v ]7..0 ← al mémoire vers registre : movw u, %bx bx15..0 ← mem[u ]15..0 constante vers registre : movb $45, %dh dh7..0 ← 45 const. vers mém. : movl $0x1234, t mem[t ]31..0 ← 0x 00001234 mémoire vers mémoire : impossible 11 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 Instructions Les plus courantes, ... Arithmétiques addw subb negl shll shrl sarl %ax, %bx $20, %al %eax $1, %eax $4, %ebx $12, %ebx Logiques andw $0xD0D0, %cx orb $0xFA, %al xorl %eax, %eax notl %ecx bx ← bx + ax al ← al − 20 eax ← −eax eax ← eax30..1 || 0 ebx ← 04 || ebx31..4 12 || ebx ebx ← ebx31 31..12 cx ← cx and 0xD 0D 0 al ← al or 0xFA eax ← eax xor eax ecx ← ecx 12 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 Instructions Les plus courantes, ... Comparaisons eags ← ags (eax − 5) eags ← ags (1 and bl ) cmpl $5, %eax testb $0x01, %bl Branchements Décision prise en fonction du contenu des ags jmp label si adresse instruction suivante si ( jxx label ip ← label ip ← label xx est vraie, non xx 13 / 32 Conception et exploitation des processeurs Introduction à l'assembleur x86 Instructions Les plus courantes, ... Branchements Comparaison Entiers naturels Entiers signés > ≥ < ≤ = 6 = n not, a ja, jnbe jae, jnb jb, jnae jbe, jna je, jz jne, jnz jg, jnle jge, jnl jl, jnge jle, jng above, b below, g greater, l less, e equal, z zero 14 / 32 Conception et exploitation des processeurs Introduction à l'assembleur MIPS Plan 1 Introduction 2 Introduction à l'assembleur x86 3 Introduction à l'assembleur MIPS 4 Traduction systématique des structures de contrôle 5 Vue mémoire 6 Informations techniques 15 / 32 Conception et exploitation des processeurs Introduction à l'assembleur MIPS ISA MIPS Registre Remarque 32 bits $0 registre trash (peut être écrit, zéro en lecture) $1-$30 non spécialisés $31 contient l'adresse de retour de fonction Adresses Sur 32 bits, de 0x0000_0000 à 0xFFFF_FFFF Données Sur 32, 16 ou 8 bits Seules les instructions de chargement ou de stockage mémoire contiennent information de taille Organisation mémoire little endian 16 / 32 Conception et exploitation des processeurs Introduction à l'assembleur MIPS ISA MIPS Sous-ensemble pour commencer, ... Suxes pour les chargements/stockages mémoire Précisent la taille de la valeur manipulée par l'instruction w (word) : 32 bits h (half) : 16 bits b (byte) : 8 bits Copies entre éléments mémorisants entre registres : add $3, $2, $0 $3 ← $2 reg. vers mém. : sw $12, 96($5) mem[$5 + 96]31..0 ← $12 mém. vers reg. : lb $2, -15($1) $2 ← 024 ||mem[$1 − 15]7..0 const. vers reg. : ori $3, $0, 0xBEEF $3 ← 016 ||0xBEEF const. vers demi-mot poids fort reg. : lui $4, 0xDEAD $4 ← 0xDEAD ||016 const. vers mém. : impossible mém. vers mém. : impossible 17 / 32 Conception et exploitation des processeurs Introduction à l'assembleur MIPS Instructions Les plus courantes, ... Arithmétiques add $4, $12, $23 sub $14, $9, $30 addi $2, $17, -1 sllv $1, $12, $7 sra $4, $3, 9 Logiques and $14, $9, $30 ori $4, $3, 0xFF xori $1, $12, 0xAAAA nor $4, $12, $23 4 12 23 14 9 30 2 17 1 12 0 4 3 3 $ ←$ +$ $ ←$ −$ $ ←$ − $ ← $ 31−$74...0 ...0 k $74...0 $ ← $ 931 k $ 31...9 1 14 4 3 0 1 12 0 4 9 30 $ ← $ and $ $ ← $ or 16 || x FF $ ← $ xor 16 || xAAAA $ ← $ or $ 0 00 0 12 23 18 / 32 Conception et exploitation des processeurs Introduction à l'assembleur MIPS Instructions Les plus courantes, ... Comparaisons 4 sltu $4, $12, $23 slti $2, $17, -1 2 031 k 1 si 0||$12 < 0||$23, 032 sinon 031 k 1 si $17 < 116 ||0xFFFF , 032 sinon ( $ ← ( $ ← Branchements inconditionnels (sauts) j label jr $31 pc ← label pc ← $31 19 / 32 Conception et exploitation des processeurs Introduction à l'assembleur MIPS Instructions Les plus courantes, ... Branchements conditionnels beq $2, ( $3, label label pc ← si $2 = $3, adresse instruction suivante sinon bne $2, ( $3, label label pc ← si $2 6= $3, adresse instruction(suivante sinon blez $2, label bgtz $2, label si $2 ≤ 0, adresse instruction suivante sinon ( label si $2 > 0, pc ← adresse instruction suivante sinon pc ← label 20 / 32 Conception et exploitation des processeurs Traduction systématique des structures de contrôle Plan 1 Introduction 2 Introduction à l'assembleur x86 3 Introduction à l'assembleur MIPS 4 Traduction systématique des structures de contrôle 5 Vue mémoire 6 Informations techniques 21 / 32 Conception et exploitation des processeurs Traduction systématique des structures de contrôle Traduction systématique des structures de contrôle if C: x86 : MIPS : int x = ...; if (x == 5) { x += 2; } else { x -= 4; } ; x est dans %eax if: cmpl $5, %eax jne else addl $2, %eax jmp endif else: subl $4, %eax endif: ... ; x est dans $4 if: li $1, bne $4, addi $4, j endif else: addi $4, endif: ... 5 $1, else $4, 2 $4, -4 22 / 32 Conception et exploitation des processeurs Traduction systématique des structures de contrôle Traduction systématique des structures de contrôle while C: int x = ...; while (x > 5) { x -= 1; } x86 : MIPS : while: cmpl $5, %eax jle endwhile subl $1, %eax jmp while endwhile: ... while: slti $1, $4, 6 bne $1, $0, endwhile addi $4, $4, -1 j while endwhile: ... 23 / 32 Conception et exploitation des processeurs Traduction systématique des structures de contrôle Traduction systématique des structures de contrôle for, équivalent structuré du while x86 : C: int x = ...; unsigned int i; for (i = 0; i < 5; i++) { x = x + 4; } movl $0, %ecx for: cmpl $5, %ecx jae endfor addl $4, %eax addl $1, %ecx jmp for endfor: MIPS : li $2, for: slti $1, beq $1, addi $4, addi $2, j for endfor: ... $0 $2, $0, $4, $2, 5 endfor 4 1 24 / 32 Conception et exploitation des processeurs Traduction systématique des structures de contrôle Premier programme : pgcd x86 : C: int main(void) { unsigned a, b; a = 15; b = 10; while (a != b) { if (a < b) { b = b - a; } else { a = a - b; } } return 0; } .globl main main: enter $0, $0 movl $15, %ecx movl $10, %edx while: cmpl %ecx, %edx je endwhile if: jb else subl %ecx, %edx jmp endif else: subl %edx, %ecx endif: jmp while endwhile: leave movl $0, %eax ret MIPS : .globl main main: addi $4, $0, 15 addi $5, $0, 10 while: beq $4, $5, endwhile if: slt $1, $4, $5 beq $1, $0, else sub $5, $5, $4 j endif else: sub $4, $4, $5 endif: j while endwhile: addi $2, $0, 0 jr $31 25 / 32 Conception et exploitation des processeurs Traduction systématique des structures de contrôle Éclaircissements étent la visibilité de l'étiquette main aux autres chiers prologue et épilogue de fonction minimaux : x86 MIPS .globl main enter $0,$0 ... leave ; retourne zéro movl $0, %eax ret ... ; retourne zéro addi $2, $0, 0 ; $31 contient l'adresse ; de retour de la fonction jr $31 Permet de faire tourner vos premiers programmes Clarication complète au Cours 3 ! 26 / 32 Conception et exploitation des processeurs Vue mémoire Plan 1 Introduction 2 Introduction à l'assembleur x86 3 Introduction à l'assembleur MIPS 4 Traduction systématique des structures de contrôle 5 Vue mémoire 6 Informations techniques 27 / 32 Conception et exploitation des processeurs Vue mémoire Exécutable en mémoire Exécutable constitué de 4 parties Code Directive .text En lecture seulement Commence en bas de la mémoire Données connues statiquement Directive .data Variables globales initialisées au lancement En lecture/écriture Directive .lcomm Variables globales non explicitement initialisées, initialisées à zéro au lancement En lecture/écriture 28 / 32 Conception et exploitation des processeurs Vue mémoire Exécutable en mémoire Données connues statiquement Directive .rodata Constantes initialisées au lancement En lecture seulement Placées à la suite du code Données allouées dynamiquement Variables globales dont les adresses sont dénies à l'exécution Placées à la suite des données initialisées Pile Gérée par le matériel et/ou le logiciel lors des appels de fonctions Commence à la n de la mémoire 29 / 32 Conception et exploitation des processeurs Vue mémoire Résumé 0xFFFFFFFF 0x........ 0x........ . . . 0x00000000 0x........ 0x........ pile ⇓ 0x........ 0x........ . . . . . . ⇑ tas ⇑ 0x........ 0x........ 0x........ 0x........ 0x........ 0x00000000 données ⇑ code . . . .bss .data .rodata .text . . . code ⇓ données ⇓ tas ⇓ .text .rodata .data .bss . . . . . . 0x........ 0x........ 0x........ 0xFFFFFFFF ⇑ pile . . . 30 / 32 Conception et exploitation des processeurs Informations techniques Plan 1 Introduction 2 Introduction à l'assembleur x86 3 Introduction à l'assembleur MIPS 4 Traduction systématique des structures de contrôle 5 Vue mémoire 6 Informations techniques 31 / 32 Conception et exploitation des processeurs Informations techniques Informations techniques Nom de chier Historiquement x.s : assembleur x.S : préprocesseur C avant assembleur Maintenant comportement identique : cpp+asm Génération du binaire gcc -gstabs -o x x.s -gstabs -o file : ajoute les information permettant de déverminer : donne le nom file au chier produit 32 / 32