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
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
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 )
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
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 »
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)
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
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
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
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 )
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
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
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
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 : - )
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 )
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
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)
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 )
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]+
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
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
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…
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
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
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 )
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
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
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 :
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
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