1 / 21

Le langage machine

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)

davin
Download Presentation

Le langage machine

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  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 à unesuite d’opérations logiques Département Informatique

  5. 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

  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’instruction • Passe à 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 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

  12. 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

  13. Contenu du cours • Définition • Les transcripteurs • Quelques exemples Département Informatique

  14. 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

  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&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

  17. 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

  18. 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

  19. 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

  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 x86 • Comprendre le fonctionnement du mP •  Ecrire des applications plus performantes Département Informatique

  21. 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

More Related