Vous êtes sur la page 1sur 21

Le langage machine

Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> Daprs le cours de Pascal FOUGERAY


IUT de CAEN Campus 3

Dpartement Informatique

Le pass et le futur

Les instructions du processeur sont


Cbles (portes logiques) Micro-codes (traduites en suites doprations cbles, processeur CISC) Voir cours de dbut danne On oubliera comment sont ralises les instructions On tudiera comment agencer les instructions Pour raliser des tches complexes Notions de compilation & langages de haut niveau
Dpartement Informatique 2

A partir de maintenant

Contenu du cours

Dfinition

Les transcripteurs

Quelques exemples

Dpartement Informatique

Le langage machine
Invent par Alan Turing Terme computing

Faire faire des calculs une machine a computer : une machine calculer Un CPU ( Central Processing Unit ou Unit Centrale ) ne sait que calculer Additions, Oprations logiques (Et, Ou, Non) Toute instruction se rduit une suite doprations logiques
Dpartement Informatique 4

Tout est calcul

Le Processeur
Ne travaille quen binaire Un programme = suite de 0 et de 1.

Trs indigeste Langage intermdiaire comprhensible Logiciels de transcription

Deux grandes familles de transcripteurs


Interprteurs Compilateurs

Dpartement Informatique 5

Contenu du cours

Dfinition

Les transcripteurs

Quelques exemples

Dpartement Informatique

Les interprteurs
Analyse du programme au cours de lexcution Processus :

Lit & Analyse linstruction (erreur ?) Excute linstruction Passe linstruction suivante

Linterprteur gre
la mmoire les variables

Dpartement Informatique 7

Les interprteurs (2)


Avantages : Pas de phase de compilation

Plus interactif Modification du programme et excution sans dlai Dbogage facilit (accs aux variables)

Gain de souplesse

Inconvnients : Lenteur du programme (Pas de compilation)

traduit chaque instruction chaque excution de linstruction (boucles !) Pas doptimisation du code pour le processeur
Dpartement Informatique 8

Les compilateurs

Analyse du programme avant lexcution Le code source est dabord compil


traduction en langage machine (binaire) liaison aux bibliothques liaison au systme dexploitation

Ensuite il peut tre excut

directement par le processeur


Dpartement Informatique 9

Les compilateurs (2)


Avantages : Excution beaucoup plus rapide

Traduction dj faite Possibilit doptimiser le code gnr (Voir cours sur optimisation, venir)

Inconvnients : Compilation obligatoire


Pas dinteraction avec lexcution (variables, ) Peut tre fastidieux (aprs chaque modification du programme)
Dpartement Informatique 10

Lassembleur

Un compilateur
Traduit le code source langage dassemblage langage machine Une fois pour toutes

Noptimise pas le code gnr

Respect du programme de lutilisateur

Quoi que

Dpartement Informatique

11

Chane de compilation

Compiler un langage de haut niveau (C)


Plusieurs tapes Plusieurs faons diffrentes

gcc

gcc -S

gcc -c

gcc
Programme Excutable

Source C

Source Asm as gcc -c gcc

Fichier Objet

ld

Dpartement Informatique

12

Contenu du cours

Dfinition

Les transcripteurs

Quelques exemples

Dpartement Informatique

13

Fichiers assembleurs de plusieurs processeurs diffrents

Un mme exemple

Hello World

Pour plusieurs compilateurs/processeurs


x86, Norme AT&T x86, Norme Intel Alpha Solaris

Dpartement Informatique

14

Hello World Langage 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


Dpartement Informatique 15

Hello World x86, 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 14 15 16 17 18 19 20 21 22 movl $0, %eax subl %eax, %esp subl $12, %esp pushl $.LC0 call printf addl $16, %esp leave ret .size main, .-main .section .note .GNU-stack, "", @progbits 23 .ident "GCC: (GNU) 3.3.2 20031022"

Dpartement Informatique

16

Hello World x86, 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 14 15 16 17 18 19 20 21 22 23 and %esp, -16 mov %eax, 0 sub %esp, %eax sub %esp, 12 push OFFSET FLAT : .LC0 call printf add %esp, 16 leave ret .size main, .-main .section .note .GNUstack, "", @progbits 24 .ident "GCC: (GNU) 3.3.2 20031022"

Dpartement Informatique

17

Hello World Alpha (obsolte)


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
Dpartement Informatique 18

Hello World Solaris


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"

Dpartement Informatique

19

Remarque finale
Il est plus facile de programmer en C quen assembleur Mais le but nest pas dapprendre programmer en assembleur Les buts de ce cours sont :

Etudier larchitecture x86 Comprendre le fonctionnement du mP Ecrire des applications plus performantes

20

Dpartement Informatique

Remarque finale (2)

la fin de ce cours, vous saurez


Lire un programme crit en assembleur Comprendre ce quil fait Modifier ou Corriger une partie du code

Mais aussi
Savoir ce quest une optimisation Comprendre pourquoi les mcanismes des langages de haut niveau sont conus ainsi

Dpartement Informatique 21