220 likes | 411 Views
Le langage machine. Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3. Le passé et le futur. Les instructions du processeur sont Câblées (portes logiques) Micro-codées (traduites en suites d’opérations câblées, processeur CISC)
E N D
Le langage machine Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3 Département Informatique
Le passé et le futur • Les instructions du processeur sont • Câblées (portes logiques) • Micro-codées (traduites en suites d’opérations câblées, processeur CISC) • Voir cours de début d’année • A partir de maintenant… • On oubliera comment sont réalisées les instructions • On étudiera comment agencer les instructions • Pour réaliser des tâches complexes • Notions de compilation & langages de haut niveau Département Informatique
Contenu du cours • Définition • Les transcripteurs • Quelques exemples Département Informatique
Le langage machine • ‘Inventé’ par Alan Turing • Terme « computing » • Faire faire des calculs à une machine • « a computer » : une machine à calculer • Tout est calcul • Un CPU (« Central Processing Unit» ou « Unité Centrale ») ne sait que calculer • Additions, Opérations logiques (Et, Ou, Non) • Toute instruction se réduit à unesuite d’opérations logiques Département Informatique
Le Processeur • Ne travaille qu’en binaire • Un programme = suite de ‘0’ et de ‘1’. • Très indigeste • Langage intermédiaire compréhensible • Logiciels de transcription • Deux grandes familles de transcripteurs • Interpréteurs • Compilateurs Département Informatique
Contenu du cours • Définition • Les transcripteurs • Quelques exemples Département Informatique
Les interpréteurs • Analyse du programme au cours de l’exécution • Processus : • Lit & Analyse l’instruction (erreur ?) • Exécute l’instruction • Passe à l’instruction suivante • L’interpréteur gère • la mémoire • les variables Département Informatique
Les interpréteurs (2) Avantages : • Pas de phase de compilation • Plus interactif • Gain de souplesse • Modification du programme et exécution sans délai • Débogage facilité (accès aux variables…) Inconvénients : • Lenteur du programme (Pas de compilation) • traduit chaque instruction à chaque exécutionde l’instruction (boucles !) • Pas d’optimisation du code pour le processeur Département Informatique
Les compilateurs • Analyse du programme avant l’exécution • Le code source est d’abord compilé • traduction en langage machine (binaire) • liaison aux bibliothèques • liaison au système d’exploitation • Ensuite il peut être exécuté • directement par le processeur Département Informatique
Les compilateurs (2) Avantages : • Exécution beaucoup plus rapide • Traduction déjà faite • Possibilité d’optimiser le code généré(Voir cours sur optimisation, à venir) Inconvénients : • Compilation obligatoire • Pas d’interaction avec l’exécution (variables, …) • Peut être fastidieux (après chaque modification du programme) Département Informatique
L’assembleur • Un compilateur • Traduit le code source langage d’assemblage langage machine • Une fois pour toutes • N’optimise pas le code généré • Respect du programme de l’utilisateur • Quoi que … Département Informatique
gcc gcc -S gcc -c gcc as ld gcc -c gcc Chaîne de compilation • Compiler un langage de haut niveau (C) • Plusieurs étapes • Plusieurs façons différentes Source C Source Asm Fichier Objet Programme Exécutable Département Informatique
Contenu du cours • Définition • Les transcripteurs • Quelques exemples Département Informatique
Fichiers assembleurs de plusieurs processeurs différents • Un même exemple • Hello World • Pour plusieurs compilateurs/processeurs • x86, Norme AT&T • x86, Norme Intel • Alpha • Solaris Département Informatique
Hello WorldLangage C • hello_world.c : #include <stdio.h> int main(int argc, char** argv) { printf("Hello World \n"); } • Compilation : • gcc –b<machine> -S hello_world.c Département Informatique
Hello Worldx86, Norme AT&T 1 .file "hello_world.c" 2 .section .rodata 3 .LC0 : 4 .string "Hello world \n" 5 .text 6 .global main 7 .type main, @function 8 main : 9 pushl %ebp 10 movl %esp, %ebp 11 subl $8, %esp 12 andl $-16, %esp 13 movl $0, %eax 14 subl %eax, %esp 15 subl $12, %esp 16 pushl $.LC0 17 call printf 18 addl $16, %esp 19 leave 20 ret 21 .size main, .-main 22 .section .note .GNU-stack, "", @progbits 23 .ident "GCC: (GNU) 3.3.2 20031022" Département Informatique
Hello Worldx86, Norme Intel 1 .file " hello_world.c " 2 .intel_syntax 3 .section .rodata 4 .LC0 : 5 .string "Hello world \n" 6 .text 7 .global main 8 .type main, @function 9 main : 10 push %ebp 11 mov %ebp, %esp 12 sub %esp, 8 13 and %esp, -16 14 mov %eax, 0 15 sub %esp, %eax 16 sub %esp, 12 17 push OFFSET FLAT : .LC0 18 call printf 19 add %esp, 16 20 leave 21 ret 22 .size main, .-main 23 .section .note .GNU-stack, "", @progbits 24 .ident "GCC: (GNU) 3.3.2 20031022" Département Informatique
Hello WorldAlpha (obsolète) 1 .ugen .verstamp 3 11 2 .data 3 $$8 : .ascii "Hello World \X00" 4 .text 5 .align 4 6 .file 2 "hello.c" 7 .global main 8 main : 9 ldgp $gp, 0($27) 10 lda $sp, -16($sp) 11 stq $26, 0($sp) 12 .mask 0x04000000 , -16 13 .frame $sp, 16, $26, 0 14 # 5 printf("Hello World"); 15 lda $16, $$8 16 .livereg 0x0001C002,0x00000000 17 jsr $26, printf 18 ldgp $gp, 0($26) 19 .livereg 0x007F0002,0x3FC00000 20 ldq $26, 0($sp) 21 lda $sp, 16($sp) 22 ret $31, ($26), 1 23 .end main Département Informatique
Hello WorldSolaris 1 .file "hello.c" 2 gcc2_compiled.: 3 .section ".rodata" 4 .align 8 5 .LLC0 : 6 .asciz "Hello World" 7 .section ".text" 8 .align 4 9 .global main 10 .type main, #function 11 .proc 020 12 main : 13 !#PROLOGUE# 0 14 save %sp,¡112,%sp 15 !#PROLOGUE# 1 16 sethi %hi (.LLC0), %o1 17 or %o1,%lo (.LLC0), %o0 18 call printf, 0 19 nop 20 .LL1 : 21 ret 22 restore 23 .LLfe1 : 24 .size main, .LLfe1-main 25 .ident "GCC: (GNU) 2.7.2.1.f.1" Département Informatique
Remarque finale • Il est plus facile de programmer en C qu’en assembleur… • Mais le but n’est pas d’apprendre à programmer en assembleur… • Les buts de ce cours sont : • Etudier l’architecture x86 • Comprendre le fonctionnement du mP • Ecrire des applications plus performantes Département Informatique
Remarque finale (2) • À la fin de ce cours, vous saurez • Lire un programme écrit en assembleur • Comprendre ce qu’il fait • Modifier ou Corriger une partie du code • Mais aussi • Savoir ce qu’est une optimisation • Comprendre pourquoi les mécanismes des langages de haut niveau sont conçus ainsi Département Informatique