département informatique les bases de l’assembleur laurent jeanpierre d’après le cours de...

29
Département Informatique Les bases de l’assembleur Laurent JEANPIERRE <[email protected]> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Upload: mariette-jourdan

Post on 04-Apr-2015

111 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique

Les bases de l’assembleur

Laurent JEANPIERRE <[email protected]>

D’après le cours de Pascal FOUGERAY

IUT de CAEN – Campus 3

Page 2: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 2

Contenu du cours

Structure d’un programme

Les directives

Les instructions / opérandes

Les données initialisées

Déplacer des données (MOV, PUSH )

Page 3: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 3

Structure d’un programme

Un source assembleur est une suite de lignes : Indépendantes Se suivant dans l’ordre

Chaque ligne peut contenir (dans l’ordre) Un label Une instruction/directive (+ opérandes) Un commentaire Le symbole « \ » seul

Les espaces/tabulations n’ont pas de sens

Page 4: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 4

Structure d’un programme (2)

Exemple :

Ici1: movl2 $0,%eax3 \4

#5 met A à 0

1. Le label « Ici »

2. L’instruction « movl »

3. Les opérandes « $0, %eax »

4. La rupture de ligne « \ »

5. Le commentaire « met A à 0 »

Page 5: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 5

Les labels

Tant qu’un programme n’est pas assemblé Les instructions n’existent pas vraiment Elles n’ont donc pas d’adresse en mémoire

On doit pourtant y faire référence : Écriture dans une variable Affichage d’un message Appel d’une fonction

Nécessité de donner un nom à une ligne du programme

Le label (ou encore étiquette)

Page 6: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 6

Un label

Commence en première colonneObéit au motif [A-Za-z_.][0-9A-Za-z_.]* :

Une lettre, le caractère « _ » ou un pointÉventuellement des chiffres, des lettres,

des caractères « _ » ou « . »Se termine par un deux-points : « : »

Est unique dans tout le programme.Exemple :Label_exemple.13

Page 7: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 7

Les commentaires

Commencent par un dièse « # »Se terminent en fin de ligneContiennent ce que vous voulez !

Ils sont ignorés par le compilateurIls ne produisent pas de code machine

Ils expliquent le programme

Page 8: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 8

Le caractère « \ » seul

Indique la rupture de ligne N’est suivi d’aucun caractère

Lors de l’assemblage : La ligne suivante sera lue comme la suite de la ligne courante

Exemple :movl %eax, \

(0x12345678) # gros entier

Page 9: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 9

Contenu du cours

Structure d’un programme

Les directives

Les instructions / opérandes

Les données initialisées

Déplacer des données (MOV, PUSH )

Page 10: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 10

Définition

Une directive de compilationNe génère pas de codeDonne des ordres au compilateurNe change pas le structure du programme

Elle respecte le motif .[a-z]+ :Un point « . »Une ou plusieurs lettres MINUSCULES

Page 11: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 11

Directives de segmentation

.align nAligne les données en mémoireSur des paquets de n octetsExemple : un 80386 ne peut lire un ‘long’

(32 bits) que s’il est aligné tous les 4 octets..data

Indique le début du segment de données.text

Indique le début du segment de code

Page 12: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 12

Directives de constantes

.byte 65,0b1000001,0101,0x41,’A Inscrit 5 fois le nombre 65 en mémoireSur 8 bits chacunSéparés par des virgules

.quad 0x0123456789ABCDEF, 13 Inscrit de grands nombres en mémoireSur 64 bitsSéparés par des virgules

Page 13: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 13

Directives de constantes (2)

.ascii "Ring the bell\7"Stocke les caractères en mémoire (Ici suivi du caractère N°7 : BELL)N’ajoute pas le ‘\0’ final (≠ .string)

.float 0f – 31415926E-7Stocke un nombre flottant en mémoire

(voir cours sur le FPU) (ici : - )

Page 14: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 14

Contenu du cours

Structure d’un programme

Les directives

Les instructions / opérandes

Les données initialisées

Déplacer des données (MOV, PUSH )

Page 15: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 15

Les instructions

Mnémoniques du langage du processeur cible Peuvent avoir un ou plusieurs opérandes Génèrent du code pendant l’assemblage Sont très nombreuses

(Ne seront pas toutes étudiées !) Exemple :

addl $4, %eax

cmpl $111, %eax

jz Boucle

Page 16: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 16

Les opérandes

Indiquent les argument de l’instruction (ou directive) courante séparées par des virgules

Peuvent être : Registres : %eax, %esp, %bh, … Constantes : $1, $0x24, $’A, $Question

(Question étant un label)(sauf dans les directives : pas de dollar « $ »)

Expressions : $(64+1), $(’B-1)(L’assembleur remplace par le résultat)

Indirection : (13)(contenu de la mémoire à l’adresse 13. Pas pour les directives)

Page 17: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 17

Contenu du cours

Structure d’un programme

Les directives

Les instructions / opérandes

Les données initialisées

Déplacer des données (MOV, PUSH )

Page 18: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 18

Bases de calculs

Décimale : [1-9][0-9]*Mode par défaut de l’assembleurNe peut pas commencer par un zéro

Binaire : 0b[01]+

Octal : 0[0-7]*

Hexadécimal : 0x[0-9A-Fa-f]+

Page 19: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 19

Les entiers

Les processeurs ont un bus de données bien défini (aujourd’hui 32 bits et plus)

On ne travaille pas toujours avec des mots de cette taille…

Exemple :260 = 1 0000 01002

En octets (8b) : 0000 00012,0000 01002

Sur 16b : 0000 0001 0000 01002

Sur 32b : 0000 0000 0000 0000 0000 0001 0000 01002

Page 20: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 20

Les entiers (2)

.byte 1 octet, 8 bits

.hword, ou .short 2 octets, 16 bits

.long, ou .int 4 octets, 32 bits

.quad 8 octets, 64 bits

.octa 16 octets, 128 bits

Page 21: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 21

Les flottants

.float, ou .singleSimple précision, 4 octets, 32 bits

.doubleDouble précision, 8 octets, 64 bits

Les FPU travaillent en fait sur 80 bitsMais échangent leurs données sur 32 ou

sur 64 bits avec le processeur central.Voir cours sur la Floating Point Unit…

Page 22: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 22

Les tableaux

Deux possibilités :Énumération des valeurs :

.byte ‘a, ‘b, ‘c, ‘d .short 0, 1, 2, 3, 4

Spécification de la taille : .space 4, 25 ou .fill 4,1,25Est équivalent à .byte 25, 25, 25, 25

Page 23: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 23

Les chaînes de caractères

Deux façons de stocker une chaîne :.ascii "Abcdefgh"

Insère les 8 premières lettres de l’alphabet

.string "Abcdefgh" Insère les 8 lettres suivies du caractère N° 0Le caractère 0 indique la fin de chaîne

Page 24: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 24

Contenu du cours

Structure d’un programme

Les directives

Les instructions / opérandes

Les données initialisées

Déplacer des données (MOV, PUSH )

Page 25: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 25

Manipulation de données

Opération de base = copie de données. Instruction = MOVCopie la source dans la destination

Ex :movl $0,%eax #A0movl $10,%ebx #B10movl %ebx,%eax #AB#ici, A et B contiennent 10

Page 26: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 26

Sélection de la taille des données

Dans la norme AT&T, la taille doit être indiquée

On ajoute une lettre à l’instructionB : Byte, 1 octetW : Word, 2 octetsL : Long Word, 4 octetsQ : Quad Word, 8 octets

Ex :movw $0, %axmovq $25, %mm0 # registre mmx

Page 27: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 27

Valeur Immédiate

CS, DS, ES, FS, GS, SS

eAXeBXeCXeDXeSIeDIeBPeSP

MEMOIRE

MOV : opérations permises

Tous les mouvements ne sont pas permis Exemple : Mémoire Mémoire est illégal

Les possibilités sont :

Page 28: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 28

Mouvements sur la pile

Pile = LIFO : Last In First Out En assembleur : mémoire contextuelle

On ferme le dernier bloc ouvert Comme des parenthèses

Deux instructions : PUSH = empiler

met une valeur sur la pile.Sur x86, le registre esp diminue

POP = dépilerretire une valeur de la pile.Sur x86, le registre esp augmente

Page 29: Département Informatique Les bases de l’assembleur Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

Département Informatique 29

esp

esp

Exemple de manipulation de pile

movw $0x10, %axpushl %eaxpopl %ebx

Registres

EAX EBX ESP

**** ???? 10010

Pile

**10

**10

9610**10