Assembleur .
-
Upload
alison-turpin -
Category
Documents
-
view
136 -
download
2
Transcript of Assembleur .
![Page 1: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/1.jpg)
assembleurassembleur
http://cs.nyu.edu/courses/spring07/G22.3130-001/assembly_howto.txt
![Page 2: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/2.jpg)
Contenu du coursContenu du cours
Structure d’un programmeStructure d’un programme
Les directives
Les instructions / opérandes
Les données initialisées
Déplacer des données (MOV, PUSH )
![Page 3: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/3.jpg)
Structure d’un programmeStructure 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/4.jpg)
Structure d’un programme (2)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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/5.jpg)
Les labelsLes 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
Naissance du label (ou encore étiquette)Naissance du label (ou encore étiquette)
![Page 6: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/6.jpg)
Un labelUn label
Commence en première colonne
Obé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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/7.jpg)
Les commentairesLes commentaires
Commencent par un dièse « # »
Se terminent en fin de ligne
Contiennent ce que vous voulez !
Ils sont ignorés par le compilateur
Ils ne produisent pas de code machine
Ils expliquent le programme
![Page 8: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/8.jpg)
Le caractère « \ » seulLe 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/9.jpg)
Contenu du coursContenu du cours
Structure d’un programme
Les directivesLes directives
Les instructions / opérandes
Les données initialisées
Déplacer des données (MOV, PUSH )
![Page 10: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/10.jpg)
DéfinitionDéfinition
Une directive de compilation
Ne génère pas de code
Donne des ordres au compilateur
Ne change pas le structure du programme
Elle respecte le motif .[a-z]+ :
Un point « . »
Une ou plusieurs lettres MINUSCULES
![Page 11: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/11.jpg)
Directives de segmentationDirectives de segmentation
.align n
Aligne les données en mémoire
Sur des paquets de n octets
Exemple : 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/12.jpg)
Directives de constantesDirectives de constantes
.byte 65,0b1100101,0101,0x41,‘A
Inscrit 5 fois le nombre 65 en mémoire
Sur 8 bits chacun
Séparés par des virgules
.quad 0x0123456789ABCDEF, 13
Inscrit de grands nombres en mémoire
Sur 64 bits
Séparés par des virgules
![Page 13: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/13.jpg)
Directives de constantes (2)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’ finale (≠ .string)
.float 0f – 31415926E-7
Stocke un nombre flottant en mémoire (voir cours sur le FPU)
(ici : - )
![Page 14: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/14.jpg)
Contenu du coursContenu du cours
Structure d’un programme
Les directives
Les instructions / opérandesLes instructions / opérandes
Les données initialisées
Déplacer des données (MOV, PUSH )
![Page 15: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/15.jpg)
Les instructionsLes 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/16.jpg)
Les opérandesLes opérandes
Indiquent les argument de l’instruction (ou directive) courante séparées par des virgulesPeuvent ê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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/17.jpg)
Contenu du coursContenu du cours
Structure d’un programme
Les directives
Les instructions / opérandes
Les données initialiséesLes données initialisées
Déplacer des données (MOV, PUSH )
![Page 18: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/18.jpg)
Bases de calculsBases 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/19.jpg)
Les entiersLes 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/20.jpg)
Les entiers (2)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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/21.jpg)
Les flottantsLes 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 le Floating Point Unit…
![Page 22: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/22.jpg)
Les tableauxLes 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,25
Est équivalent à
.byte 25, 25, 25, 25
![Page 23: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/23.jpg)
Les chaînes de caractèresLes 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° 0
Le caractère 0 indique la fin de chaîne
![Page 24: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/24.jpg)
Contenu du coursContenu du cours
Structure d’un programme
Les directives
Les instructions / opérandes
Les données initialisées
Déplacer des données (Déplacer des données (MOV, PUSH MOV, PUSH ))
![Page 25: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/25.jpg)
Manipulation de donnéesManipulation de données
Opération de base = copie de données.
Instruction = MOV
Copie la source dans la destination
Ex :
movl $0,%eax #A0
movl $10,%ebx #B10
Movl %ebx,%eax #AB
#ici, A et B contiennent 10
![Page 26: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/26.jpg)
Sélection de la taille des donnéesSélection de la taille des données
Dans la norme AT&T, la taille doit être indiquéeOn ajoute une lettre à l’instruction
B : Byte, 1 octetW : Word, 2 octetsL : Long Word, 4 octetsQ : Quad Word, 8 octets
Ex :movw $0, %axmovq $25, %mm0 # registre mmx
![Page 27: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/27.jpg)
Valeur Immédiate
CS, DS, ES, FS, GS, SS
eAXeBXeCXeDXeSIeDIeBPeSP
MEMOIRE
MOV : opérations permisesMOV : opérations permises
Tous les mouvements ne sont pas permis
Exemple : Mémoire Mémoire est illégal
Les possibilités sont :
![Page 28: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/28.jpg)
Mouvements sur la pileMouvements 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 = empilermet 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: Assembleur .](https://reader036.fdocuments.net/reader036/viewer/2022062511/551d9d8c497959293b8c0d42/html5/thumbnails/29.jpg)
esp
esp
Exemple de manipulation de pileExemple de manipulation de pile
movw $0x10, %ax
pushl %eax
popl %ebx
Registres
EAX EBX ESP
**** ???? 10010
Pile
**10
**10
9610**10