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

Les bases de l’assembleur

Embed Size (px)

DESCRIPTION

Les bases de l’assembleur. Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3. 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 ). - PowerPoint PPT Presentation

Citation preview

Page 1: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 4

Structure d’un programme (2) Exemple :Ici1: movl2 $0,%eax3 \4

#5 met A à 01. 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: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 6

Un labelCommence 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: Les bases de l’assembleur

Département Informatique 7

Les commentairesCommencent 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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 10

DéfinitionUne directive de compilation

Ne 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: Les bases de l’assembleur

Département Informatique 11

Directives de segmentation.align n

Aligne 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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

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, %eaxcmpl $111, %eaxjz Boucle

Page 16: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 18

Bases de calculsDé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: Les bases de l’assembleur

Département Informatique 19

Les entiersLes 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 01002Sur 32b : 0000 0000 0000 0000 0000 0001

0000 01002

Page 20: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 21

Les flottants.float, ou .single

Simple précision, 4 octets, 32 bits.double

Double 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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 25

Manipulation de donnéesOpé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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

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: Les bases de l’assembleur

Département Informatique 29

esp

esp

Exemple de manipulation de pilemovw $0x10, %axpushl %eaxpopl %ebx

Registres

EAX EBX ESP

**** ???? 10010

Pile

**10

**10

9610**10