le langage machine
DESCRIPTION
Le langage machine. Laurent JEANPIERRE 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) - PowerPoint PPT PresentationTRANSCRIPT
Département Informatique
Le langage machine
Laurent JEANPIERRE <[email protected]>
D’après le cours de Pascal FOUGERAY
IUT de CAEN – Campus 3
Département Informatique 2
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 3
Contenu du cours
Définition
Les transcripteurs
Quelques exemples
Département Informatique 4
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 à une
suite d’opérations logiques
Département Informatique 5
Le Processeur
Ne travaille qu’en binaireUn programme = suite de ‘0’ et de ‘1’.
Très indigeste Langage intermédiaire compréhensible Logiciels de transcription
Deux grandes familles de transcripteurs InterpréteursCompilateurs
Département Informatique 6
Contenu du cours
Définition
Les transcripteurs
Quelques exemples
Département Informatique 7
Les interpréteurs
Analyse du programme au cours de l’exécution
Processus :Lit & Analyse l’instruction (erreur ?)Exécute l’instructionPasse à l’instruction suivante
L’interpréteur gère la mémoire les variables
Département Informatique 8
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 9
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 10
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 11
L’assembleur
Un compilateurTraduit le code source
langage d’assemblage langage machineUne fois pour toutes
N’optimise pas le code généréRespect du programme de l’utilisateur
Quoi que …
Département Informatique 12
Chaîne de compilation
Compiler un langage de haut niveau (C)Plusieurs étapesPlusieurs façons différentes
Source C Source Asm Fichier ObjetProgrammeExécutable
gcc -S gcc -c gcc
asld
gcc
gcc -c
gcc
Département Informatique 13
Contenu du cours
Définition
Les transcripteurs
Quelques exemples
Département Informatique 14
Fichiers assembleurs de plusieurs processeurs différents
Un même exempleHello World
Pour plusieurs compilateurs/processeursx86, Norme AT&Tx86, Norme IntelAlphaSolaris
Département Informatique 15
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 16
Hello Worldx86, Norme AT&T1 .file "hello_world.c"2 .section .rodata3 .LC0 :4 .string "Hello world \n"5 .text6 .global main7 .type main, @function8 main :9 pushl %ebp10 movl %esp, %ebp11 subl $8, %esp12 andl $-16, %esp
13 movl $0, %eax14 subl %eax, %esp15 subl $12, %esp16 pushl $.LC017 call printf18 addl $16, %esp19 leave20 ret21 .size main, .-main22 .section .note .GNU-stack,
"", @progbits23 .ident "GCC: (GNU) 3.3.2
20031022"
Département Informatique 17
Hello Worldx86, Norme Intel1 .file " hello_world.c "2 .intel_syntax3 .section .rodata4 .LC0 :5 .string "Hello world \n"6 .text7 .global main8 .type main, @function9 main :10 push %ebp11 mov %ebp, %esp12 sub %esp, 8
13 and %esp, -1614 mov %eax, 015 sub %esp, %eax16 sub %esp, 1217 push OFFSET FLAT : .LC018 call printf19 add %esp, 1620 leave21 ret22 .size main, .-main23 .section .note .GNU-
stack, "", @progbits24 .ident "GCC: (GNU) 3.3.2
20031022"
Département Informatique 18
Hello WorldAlpha (obsolète)
1 .ugen .verstamp 3 112 .data3 $$8 : .ascii "Hello World \X00"4 .text5 .align 46 .file 2 "hello.c"7 .global main8 main :9 ldgp $gp, 0($27)10 lda $sp, -16($sp)11 stq $26, 0($sp)12 .mask 0x04000000 , -1613 .frame $sp, 16, $26, 014 # 5 printf("Hello World");15 lda $16, $$816 .livereg 0x0001C002,0x0000000017 jsr $26, printf18 ldgp $gp, 0($26)19 .livereg 0x007F0002,0x3FC0000020 ldq $26, 0($sp)21 lda $sp, 16($sp)22 ret $31, ($26), 123 .end main
Département Informatique 19
Hello WorldSolaris
1 .file "hello.c"2 gcc2_compiled.:3 .section ".rodata"4 .align 85 .LLC0 :6 .asciz "Hello World"7 .section ".text"8 .align 49 .global main10 .type main, #function11 .proc 02012 main :13 !#PROLOGUE# 0
14 save %sp,¡112,%sp15 !#PROLOGUE# 116 sethi %hi (.LLC0), %o117 or %o1,%lo (.LLC0), %o018 call printf, 019 nop20 .LL1 :21 ret22 restore23 .LLfe1 :24 .size main, .LLfe1-main25 .ident "GCC: (GNU)
2.7.2.1.f.1"
Département Informatique 20
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 x86Comprendre le fonctionnement du P Ecrire des applications plus performantes
Département Informatique 21
Remarque finale (2)
À la fin de ce cours, vous saurezLire un programme écrit en assembleurComprendre ce qu’il faitModifier ou Corriger une partie du code
Mais aussiSavoir ce qu’est une optimisationComprendre pourquoi les mécanismes des
langages de haut niveau sont conçus ainsi